diff --git a/DEPS b/DEPS
index 42212f6..52fee8f 100644
--- a/DEPS
+++ b/DEPS
@@ -306,7 +306,7 @@
   # 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': '36efebf14ad81e7af323695c58dc09b091e81b1d',
+  'skia_revision': '1952a3edba24b927f32150de88925e482835786d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -314,7 +314,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '4b084310d7bbb33631d58a461eb5814c12220926',
+  'angle_revision': 'b6a15123758f86c0235867d9acb1315c4c5fab0b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -333,7 +333,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
-  'fuchsia_version': 'version:10.20221115.1.1',
+  'fuchsia_version': 'version:10.20221116.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.
@@ -421,7 +421,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '4b260af6722f5f6b81d72afa42cf34d85420b6f4',
+  'dawn_revision': 'fad31fe74aaf84b1627364b206f7fd49941a39ee',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -816,7 +816,7 @@
 
   'src/clank': {
     'url': 'https://chrome-internal.googlesource.com/clank/internal/apps.git' + '@' +
-    '9ec2dac221888e0793edd548be8f6223c8c25554',
+    '96e7b73b2da29a845781c3c840612ee4ca50cd3e',
     'condition': 'checkout_android and checkout_src_internal and not checkout_clank_via_src_internal',
   },
 
@@ -1000,7 +1000,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': '06CY8QJEKQvLc6nEso6R3iTnrmW1NDVyz5Mmsu5y5_MC',
+          'version': 'krelcrYOcHkMcS_4oxzOl4ya1ady7UK4lOj118kjMTEC',
       },
     ],
     'condition': 'checkout_android',
@@ -1215,7 +1215,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'a04672686bbcd4d10de0afb750b2322c1806285b',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '066fd4019e94c13e7ae8753a70df62fba2d81091',
       'condition': 'checkout_chromeos',
   },
 
@@ -1233,7 +1233,7 @@
 
   # For Linux and Chromium OS.
   'src/third_party/cros_system_api': {
-      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + 'ca1cd5d1bb30fbbd5c8b3eddeac77f0892b38516',
+      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + 'f71907ee5a49b35b73cd6839b68e26d24246f4a3',
       'condition': 'checkout_linux',
   },
 
@@ -1249,7 +1249,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '6747e8aa347517fda0836da5159f9237e78dc50c',
+      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '65411bbd9e93a9d7be940ee4aa3bc4fd476534f2',
     'condition': 'checkout_src_internal',
   },
 
@@ -1664,7 +1664,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'd74cb19ee888e97725e7dd9b051d558a7aaf4bda',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '31d7f4d96753a1a7e9a04b733e8e7e66fb8e2221',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1704,7 +1704,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': '-NUQfUfOV_01dV0d71XGUoe7FpVrH5M31W17eU8pLd0C',
+              'version': 'SRv8kr_t534yPmvzQnKEBqgw_lidewzTdKnAKoWYkz0C',
           },
       ],
       'condition': 'checkout_android',
@@ -1849,7 +1849,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '8c74caae35d253e20d294ed1c3d035726282587b',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '82c8e4af7ce40771b9b15664a2068d7913b7a98f',
+    Var('webrtc_git') + '/src.git' + '@' + '52b0ef792602250f1aa841cbc867ea00bfba1d5a',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -1919,7 +1919,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@268390b999ce0a5fe5cb20da08000e9528f0ba60',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f61b58e0b171e01527667c2f65f65faa6ee1ff4f',
     'condition': 'checkout_src_internal',
   },
 
@@ -1949,7 +1949,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'E8UvDFYz832_Rt4-utRqinH-2NNF-zdW-TFOLr-FpdkC',
+        'version': 'd-ZhMA6rYoStq9l1o3a2s_290IHycGVmW3JyavxMf34C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1971,7 +1971,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'Vf6Aoh_aF7Es88b8cFxmkwK0DpvaYXqAxXje6toibWwC',
+        'version': 'pXb22K_ujzsS0b1Z1LMb3VkrhYhP2FlVgV7A4iovusUC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/WATCHLISTS b/WATCHLISTS
index f87620e..8fe73e9 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -1560,15 +1560,17 @@
                   '|chrome/browser/android/offline_pages/'\
                   '|chrome/android/java/src/org/chromium/chrome/browser/offlinepages/'
     },
-    'omnibox': {
+    'omnibox_desktop': {
       'filepath': '^chrome/browser/autocomplete/|'\
                   '^chrome/browser/resources/new_tab_page/realbox/|'\
                   '^chrome/browser/resources/omnibox|'\
                   '^chrome/browser/ui/location_bar/|'\
                   '^chrome/browser/ui/omnibox/|'\
-                  '^chrome/browser/ui/.*/location_bar/|'\
-                  '^chrome/browser/ui/.*/omnibox/|'\
-                  '^chrome/browser/ui/.*/realbox/|'\
+                  '^chrome/browser/ui/app_list/search/omnibox/|'\
+                  '^chrome/browser/ui/views/location_bar/|'\
+                  '^chrome/browser/ui/views/omnibox/|'\
+                  '^chrome/browser/ui/webui/omnibox/|'\
+                  '^chrome/browser/ui/webui/realbox/|'\
                   '^chrome/test/data/webui/new_tab_page/realbox/|'\
                   '^components/omnibox/|'\
                   '^components/search_engines/'
@@ -2848,8 +2850,8 @@
                       'dimich+watch@chromium.org',
                       'fgorski+watch@chromium.org',
                       'petewil+watch@chromium.org'],
-    'omnibox': ['jdonnelly+watch@chromium.org',
-                'mahmadi+watch@chromium.org'],
+    'omnibox_desktop': ['jdonnelly+watch@chromium.org',
+                        'mahmadi+watch@chromium.org'],
     'origin_trials': ['chasej+watch@chromium.org',
                       'iclelland+watch@chromium.org'],
     'os_crypt': ['wfh+watch@chromium.org'],
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index ed7ae62..565aec7 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1726,6 +1726,8 @@
     "system/time/calendar_model.h",
     "system/time/calendar_month_view.cc",
     "system/time/calendar_month_view.h",
+    "system/time/calendar_up_next_view.cc",
+    "system/time/calendar_up_next_view.h",
     "system/time/calendar_utils.cc",
     "system/time/calendar_utils.h",
     "system/time/calendar_view.cc",
@@ -3058,6 +3060,7 @@
     "system/time/calendar_month_view_unittest.cc",
     "system/time/calendar_unittest_utils.cc",
     "system/time/calendar_unittest_utils.h",
+    "system/time/calendar_up_next_view_unittest.cc",
     "system/time/calendar_utils_unittest.cc",
     "system/time/calendar_view_controller_unittest.cc",
     "system/time/calendar_view_unittest.cc",
diff --git a/ash/app_list/app_list_controller_impl_unittest.cc b/ash/app_list/app_list_controller_impl_unittest.cc
index b005831..8f64281 100644
--- a/ash/app_list/app_list_controller_impl_unittest.cc
+++ b/ash/app_list/app_list_controller_impl_unittest.cc
@@ -181,16 +181,6 @@
     return widget_layer && widget_layer->GetAnimator()->is_animating();
   }
 
-  int CountPageBreakItems() {
-    auto* top_list = GetAppListModel()->top_level_item_list();
-    int count = 0;
-    for (size_t index = 0; index < top_list->item_count(); ++index) {
-      if (top_list->item_at(index)->is_page_break())
-        ++count;
-    }
-    return count;
-  }
-
  private:
   // The count of the items created by `PopulateItem()`.
   int populated_item_count_ = 0;
@@ -679,9 +669,6 @@
   // Add an extra item and verify that the page count is 2 now.
   PopulateItem(1);
   EXPECT_EQ(2, apps_grid_view->pagination_model()->total_pages());
-
-  // Verify that there is no page break items.
-  EXPECT_EQ(0, CountPageBreakItems());
 }
 
 // The test parameter indicates whether the shelf should auto-hide. In either
diff --git a/ash/app_list/app_list_metrics.cc b/ash/app_list/app_list_metrics.cc
index fd16fe0..0e11ea7a 100644
--- a/ash/app_list/app_list_metrics.cc
+++ b/ash/app_list/app_list_metrics.cc
@@ -249,8 +249,6 @@
   AppListItemList* const item_list = model->top_level_item_list();
   for (size_t i = 0; i < item_list->item_count(); ++i) {
     AppListItem* item = item_list->item_at(i);
-    if (item->is_page_break())
-      continue;
     number_of_root_level_items++;
 
     // Item is a folder.
diff --git a/ash/app_list/model/app_list_item.cc b/ash/app_list/model/app_list_item.cc
index 16ec750..f0644217 100644
--- a/ash/app_list/model/app_list_item.cc
+++ b/ash/app_list/model/app_list_item.cc
@@ -138,8 +138,8 @@
 }
 
 std::string AppListItem::ToDebugString() const {
-  return id().substr(0, 8) + " '" + (is_page_break() ? "page_break" : name()) +
-         "'" + " [" + position().ToDebugString() + "]";
+  return id().substr(0, 8) + " '" + "'" + " [" + position().ToDebugString() +
+         "]";
 }
 
 // Protected methods
diff --git a/ash/app_list/model/app_list_item.h b/ash/app_list/model/app_list_item.h
index 44dbbc6..b459855 100644
--- a/ash/app_list/model/app_list_item.h
+++ b/ash/app_list/model/app_list_item.h
@@ -111,8 +111,6 @@
 
   bool is_folder() const { return metadata_->is_folder; }
 
-  bool is_page_break() const { return metadata_->is_page_break; }
-
   bool has_notification_badge() const { return has_notification_badge_; }
 
   bool is_new_install() const { return metadata_->is_new_install; }
diff --git a/ash/app_list/model/app_list_test_model.cc b/ash/app_list/model/app_list_test_model.cc
index ee9236a..57a7a46f 100644
--- a/ash/app_list/model/app_list_test_model.cc
+++ b/ash/app_list/model/app_list_test_model.cc
@@ -8,9 +8,11 @@
 
 #include <memory>
 #include <utility>
+#include <vector>
 
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "base/memory/ptr_util.h"
+#include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -207,14 +209,12 @@
 }
 
 std::string AppListTestModel::GetModelContent() {
-  std::string content;
-  for (size_t i = 0; i < top_level_item_list()->item_count(); ++i) {
-    if (i > 0)
-      content += ',';
-    AppListItem* item = top_level_item_list()->item_at(i);
-    content += item->is_page_break() ? "PageBreakItem" : item->id();
-  }
-  return content;
+  std::vector<std::string> ids;
+  ids.reserve(top_level_item_list()->item_count());
+
+  for (size_t i = 0; i < top_level_item_list()->item_count(); ++i)
+    ids.push_back(top_level_item_list()->item_at(i)->id());
+  return base::JoinString(ids, ",");
 }
 
 AppListTestModel::AppListTestItem* AppListTestModel::CreateItem(
diff --git a/ash/app_list/paged_view_structure.cc b/ash/app_list/paged_view_structure.cc
index e5eb9e7eb..4850c9c 100644
--- a/ash/app_list/paged_view_structure.cc
+++ b/ash/app_list/paged_view_structure.cc
@@ -171,27 +171,7 @@
 int PagedViewStructure::GetTargetItemListIndexForMove(
     AppListItem* moved_item,
     const GridIndex& index) const {
-  if (mode_ == Mode::kFullPages)
-    return GetModelIndexFromIndex(index);
-
-  DCHECK_EQ(index.page, 0);
-  GridIndex current_index(0, 0);
-  size_t current_item_index = 0;
-
-  const auto* item_list = apps_grid_view_->item_list_;
-  while (current_item_index < item_list->item_count() &&
-         item_list->item_at(current_item_index)->is_page_break()) {
-    ++current_item_index;
-  }
-
-  while (current_item_index < item_list->item_count() &&
-         current_index != index) {
-    if (!item_list->item_at(current_item_index)->is_page_break())
-      ++current_index.slot;
-    ++current_item_index;
-  }
-  DCHECK_EQ(current_index, index);
-  return current_item_index;
+  return GetModelIndexFromIndex(index);
 }
 
 bool PagedViewStructure::IsValidReorderTargetIndex(
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc
index 2fc601b..7dddf442 100644
--- a/ash/app_list/views/apps_grid_view.cc
+++ b/ash/app_list/views/apps_grid_view.cc
@@ -390,15 +390,9 @@
   layer()->SetOpacity(1.0f);
   SetVisible(true);
 
-  // The number of non-page-break-items should be the same as item views.
-  if (item_list_) {
-    size_t item_count = 0;
-    for (size_t i = 0; i < item_list_->item_count(); ++i) {
-      if (!item_list_->item_at(i)->is_page_break())
-        ++item_count;
-    }
-    CHECK_EQ(item_count, view_model_.view_size());
-  }
+  // The number of model items should be the same as item views.
+  if (item_list_)
+    CHECK_EQ(item_list_->item_count(), view_model_.view_size());
 }
 
 void AppsGridView::CancelDragWithNoDropAnimation() {
@@ -1081,9 +1075,6 @@
   std::vector<AppListItemView*> item_views;
   if (item_list_ && item_list_->item_count()) {
     for (size_t i = 0; i < item_list_->item_count(); ++i) {
-      // Skip "page break" items.
-      if (item_list_->item_at(i)->is_page_break())
-        continue;
       std::unique_ptr<AppListItemView> view = CreateViewForItemAtIndex(i);
       view_model_.Add(view.get(), view_model_.view_size());
       item_views.push_back(items_container_->AddChildView(std::move(view)));
@@ -1134,13 +1125,11 @@
 }
 
 AppListItemView* AppsGridView::MaybeSwapPlaceholderAsset(size_t index) {
-  size_t model_index = GetTargetModelIndexFromItemIndex(index);
-  AppListItemView* view = items_container_->AddChildViewAt(
-      CreateViewForItemAtIndex(index), model_index);
-  view_model_.Add(view, model_index);
+  AppListItemView* view =
+      items_container_->AddChildViewAt(CreateViewForItemAtIndex(index), index);
+  view_model_.Add(view, index);
 
-  const bool placeholder_in_view_index =
-      model_index == (view_model_.view_size() - 1);
+  const bool placeholder_in_view_index = index == (view_model_.view_size() - 1);
   const bool is_syncing =
       model_ && model_->status() == AppListModelStatus::kStatusSyncing;
   const bool should_animate_placeholder_swap =
@@ -2551,15 +2540,13 @@
   // Abort reorder animation before a view is added to `view_model_`.
   MaybeAbortWholeGridAnimation();
 
-  if (!item->is_page_break()) {
-    AppListItemView* view = MaybeSwapPlaceholderAsset(index);
+  AppListItemView* view = MaybeSwapPlaceholderAsset(index);
 
-    if (item == drag_item_) {
-      drag_view_ = view;
-      drag_view_hider_ = std::make_unique<DragViewHider>(drag_view_);
-    }
-    view->InitializeIconLoader();
+  if (item == drag_item_) {
+    drag_view_ = view;
+    drag_view_hider_ = std::make_unique<DragViewHider>(drag_view_);
   }
+  view->InitializeIconLoader();
 
   view_structure_.LoadFromMetadata();
 
@@ -2587,8 +2574,7 @@
   // Abort reorder animation before a view is deleted from `view_model_`.
   MaybeAbortWholeGridAnimation();
 
-  if (!item->is_page_break())
-    DeleteItemViewAtIndex(GetModelIndexOfItem(item));
+  DeleteItemViewAtIndex(GetModelIndexOfItem(item));
 
   view_structure_.LoadFromMetadata();
 
@@ -2617,20 +2603,14 @@
     EndDrag(true);
   }
 
-  if (item->is_page_break()) {
-    LOG(ERROR) << "Page break item is moved: " << item->id();
-  } else {
-    // The item is updated in the item list but the view_model is not updated,
-    // so get current model index by looking up view_model and predict the
-    // target model index based on its current item index.
-    size_t from_model_index = GetModelIndexOfItem(item);
-    size_t to_model_index = GetTargetModelIndexFromItemIndex(to_index);
-    view_model_.Move(from_model_index, to_model_index);
-    items_container_->ReorderChildView(view_model_.view_at(to_model_index),
-                                       to_model_index);
-    items_container_->NotifyAccessibilityEvent(
-        ax::mojom::Event::kChildrenChanged, true /* send_native_event */);
-  }
+  // The item is updated in the item list but the view_model is not updated,
+  // so get current model index by looking up view_model and predict the
+  // target model index based on its current item index.
+  size_t from_model_index = GetModelIndexOfItem(item);
+  view_model_.Move(from_model_index, to_index);
+  items_container_->ReorderChildView(view_model_.view_at(to_index), to_index);
+  items_container_->NotifyAccessibilityEvent(ax::mojom::Event::kChildrenChanged,
+                                             true /* send_native_event */);
 
   view_structure_.LoadFromMetadata();
 
@@ -2986,19 +2966,6 @@
   return static_cast<size_t>(std::distance(entries.begin(), iter));
 }
 
-size_t AppsGridView::GetTargetModelIndexFromItemIndex(size_t item_index) {
-  if (folder_delegate_)
-    return item_index;
-
-  CHECK(item_index <= item_list_->item_count());
-  size_t target_model_index = 0;
-  for (size_t i = 0; i < item_index; ++i) {
-    if (!item_list_->item_at(i)->is_page_break())
-      ++target_model_index;
-  }
-  return target_model_index;
-}
-
 int AppsGridView::GetNumberOfItemsOnPage(int page) const {
   if (page < 0 || page >= GetTotalPages())
     return 0;
diff --git a/ash/app_list/views/apps_grid_view.h b/ash/app_list/views/apps_grid_view.h
index d562c55..0580243e 100644
--- a/ash/app_list/views/apps_grid_view.h
+++ b/ash/app_list/views/apps_grid_view.h
@@ -809,11 +809,6 @@
   // Returns model index of the item view of the specified item.
   size_t GetModelIndexOfItem(const AppListItem* item) const;
 
-  // Returns the target model index based on item index. (Item index is the
-  // index of an item in item list.) This should be used when the item is
-  // updated in item list but its item view has not been updated in view model.
-  size_t GetTargetModelIndexFromItemIndex(size_t item_index);
-
   // Returns the target GridIndex for a keyboard move.
   GridIndex GetTargetGridIndexForKeyboardMove(ui::KeyboardCode key_code) const;
 
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd
index 8eafe42..0b4d5aaf 100644
--- a/ash/ash_strings.grd
+++ b/ash/ash_strings.grd
@@ -4199,6 +4199,10 @@
         Open in Google Calendar
       </message>
 
+      <message name="IDS_ASH_CALENDAR_UP_NEXT" desc="Header label for the Calendar Up next view.">
+        Up next
+      </message>
+
       <message name="IDS_ASH_STATUS_TRAY_PROGRESS_BAR_ACCESSIBLE_NAME" desc="The accessible name for the progress bar shown in the status tray.">
         Loading
       </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_CALENDAR_UP_NEXT.png.sha1 b/ash/ash_strings_grd/IDS_ASH_CALENDAR_UP_NEXT.png.sha1
new file mode 100644
index 0000000..3a0b798
--- /dev/null
+++ b/ash/ash_strings_grd/IDS_ASH_CALENDAR_UP_NEXT.png.sha1
@@ -0,0 +1 @@
+05da4a226414b5fea76a977dcf45df6a3272546e
\ No newline at end of file
diff --git a/ash/components/arc/BUILD.gn b/ash/components/arc/BUILD.gn
index 4720a54..2ea9dbb4 100644
--- a/ash/components/arc/BUILD.gn
+++ b/ash/components/arc/BUILD.gn
@@ -208,6 +208,8 @@
 
   public_deps = [ ":arc_features" ]
   deps = [
+    "//ash/components/arc:prefs",
+    "//ash/components/arc/session:arc_base_enums",
     "//ash/constants",
     "//ash/public/cpp",
     "//base",
@@ -218,6 +220,7 @@
     "//chromeos/ash/components/dbus/upstart:upstart",
     "//chromeos/version",
     "//components/exo",
+    "//components/prefs:prefs",
     "//ui/aura",
   ]
 }
diff --git a/ash/components/arc/arc_util.cc b/ash/components/arc/arc_util.cc
index 384b0b74..6390ec87 100644
--- a/ash/components/arc/arc_util.cc
+++ b/ash/components/arc/arc_util.cc
@@ -8,6 +8,8 @@
 #include <cstdio>
 
 #include "ash/components/arc/arc_features.h"
+#include "ash/components/arc/arc_prefs.h"
+#include "ash/components/arc/session/arc_vm_data_migration_status.h"
 #include "ash/constants/app_types.h"
 #include "ash/constants/ash_switches.h"
 #include "base/bind.h"
@@ -22,6 +24,7 @@
 #include "chromeos/ash/components/dbus/upstart/upstart_client.h"
 #include "chromeos/version/version_loader.h"
 #include "components/exo/shell_surface_util.h"
+#include "components/prefs/pref_service.h"
 #include "components/user_manager/user_manager.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/aura/client/aura_constants.h"
@@ -427,4 +430,35 @@
   }
 }
 
+ArcVmDataMigrationStatus GetArcVmDataMigrationStatus(
+    PrefService* profile_prefs) {
+  return static_cast<ArcVmDataMigrationStatus>(
+      profile_prefs->GetInteger(prefs::kArcVmDataMigrationStatus));
+}
+
+void SetArcVmDataMigrationStatus(PrefService* profile_prefs,
+                                 ArcVmDataMigrationStatus status) {
+  profile_prefs->SetInteger(prefs::kArcVmDataMigrationStatus,
+                            static_cast<int>(status));
+}
+
+bool ShouldUseVirtioBlkData(PrefService* profile_prefs) {
+  // If kEnableVirtioBlkForData is set, force using virtio-blk /data regardless
+  // of the migration status.
+  if (base::FeatureList::IsEnabled(kEnableVirtioBlkForData))
+    return true;
+
+  // Just use virtio-fs when ARCVM /data migration is not enabled.
+  if (!base::FeatureList::IsEnabled(kEnableArcVmDataMigration))
+    return false;
+
+  ArcVmDataMigrationStatus status = GetArcVmDataMigrationStatus(profile_prefs);
+  if (status == ArcVmDataMigrationStatus::kFinished) {
+    VLOG(1) << "ARCVM /data migration has finished";
+    return true;
+  }
+  VLOG(1) << "ARCVM /data migration hasn't finished yet. Status=" << status;
+  return false;
+}
+
 }  // namespace arc
diff --git a/ash/components/arc/arc_util.h b/ash/components/arc/arc_util.h
index 9614f4c..361e12d 100644
--- a/ash/components/arc/arc_util.h
+++ b/ash/components/arc/arc_util.h
@@ -15,6 +15,7 @@
 #include <string>
 #include <vector>
 
+#include "ash/components/arc/session/arc_vm_data_migration_status.h"
 #include "chromeos/dbus/common/dbus_method_call_status.h"
 
 namespace aura {
@@ -29,6 +30,8 @@
 class User;
 }  // namespace user_manager
 
+class PrefService;
+
 namespace arc {
 
 // This enum should be synced with CpuRestrictionState in
@@ -226,6 +229,16 @@
 void ConfigureUpstartJobs(std::deque<JobDesc> jobs,
                           chromeos::VoidDBusMethodCallback callback);
 
+// Gets the ArcVmDataMigrationStatus profile preference.
+ArcVmDataMigrationStatus GetArcVmDataMigrationStatus(PrefService* prefs);
+
+// Sets the ArcVmDataMigrationStatus profile preference.
+void SetArcVmDataMigrationStatus(PrefService* prefs,
+                                 ArcVmDataMigrationStatus status);
+
+// Returns whether ARCVM should use virtio-blk for /data.
+bool ShouldUseVirtioBlkData(PrefService* prefs);
+
 }  // namespace arc
 
 #endif  // ASH_COMPONENTS_ARC_ARC_UTIL_H_
diff --git a/ash/components/arc/arc_util_unittest.cc b/ash/components/arc/arc_util_unittest.cc
index 3246cf5..34e4b730 100644
--- a/ash/components/arc/arc_util_unittest.cc
+++ b/ash/components/arc/arc_util_unittest.cc
@@ -10,6 +10,8 @@
 #include <vector>
 
 #include "ash/components/arc/arc_features.h"
+#include "ash/components/arc/arc_prefs.h"
+#include "ash/components/arc/session/arc_vm_data_migration_status.h"
 #include "ash/components/arc/test/arc_util_test_support.h"
 #include "ash/constants/app_types.h"
 #include "base/base_switches.h"
@@ -112,6 +114,7 @@
 
   void SetUp() override {
     run_loop_ = std::make_unique<base::RunLoop>();
+    prefs::RegisterProfilePrefs(profile_prefs_.registry());
     RemoveUpstartStartStopJobFailures();
   }
 
@@ -162,6 +165,8 @@
     return upstart_operations_;
   }
 
+  PrefService* profile_prefs() { return &profile_prefs_; }
+
  private:
   void RemoveUpstartStartStopJobFailures() {
     auto* upstart_client = ash::FakeUpstartClient::Get();
@@ -173,6 +178,7 @@
 
   std::unique_ptr<base::RunLoop> run_loop_;
   base::test::TaskEnvironment task_environment_;
+  TestingPrefServiceSimple profile_prefs_;
 
   // List of upstart operations recorded. When it's "start" the boolean is set
   // to true.
@@ -625,5 +631,78 @@
   }
 }
 
+TEST_F(ArcUtilTest, SetAndGetArcVmDataMigrationStatus) {
+  constexpr ArcVmDataMigrationStatus statuses[] = {
+      ArcVmDataMigrationStatus::kFinished,
+      ArcVmDataMigrationStatus::kStarted,
+      ArcVmDataMigrationStatus::kConfirmed,
+      ArcVmDataMigrationStatus::kNotified,
+      ArcVmDataMigrationStatus::kUnnotified,
+  };
+  for (const auto status : statuses) {
+    SetArcVmDataMigrationStatus(profile_prefs(), status);
+    EXPECT_EQ(status, GetArcVmDataMigrationStatus(profile_prefs()));
+  }
+}
+
+// Tests that ShouldUseVirtioBlkData() returns true when virtio-blk /data is
+// enabled via the kEnableVirtioBlkForData feature.
+TEST_F(ArcUtilTest, ShouldUseVirtioBlkData_VirtioBlkForDataFeatureEnabled) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(kEnableVirtioBlkForData);
+  EXPECT_FALSE(base::FeatureList::IsEnabled(kEnableArcVmDataMigration));
+  EXPECT_TRUE(ShouldUseVirtioBlkData(profile_prefs()));
+}
+
+// Tests that ShouldUseVirtioBlkData() returns false when ARCVM /data is enabled
+// but the user has not been notified yet.
+TEST_F(ArcUtilTest, ShouldUseVirtioBlkData_ArcVmDataMigration_Unnotified) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(kEnableArcVmDataMigration);
+  SetArcVmDataMigrationStatus(profile_prefs(),
+                              ArcVmDataMigrationStatus::kUnnotified);
+  EXPECT_FALSE(ShouldUseVirtioBlkData(profile_prefs()));
+}
+
+// Tests that ShouldUseVirtioBlkData() returns false when ARCVM /data is enabled
+// but the user has just been notified of its availability.
+TEST_F(ArcUtilTest, ShouldUseVirtioBlkData_ArcVmDataMigration_Notified) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(kEnableArcVmDataMigration);
+  SetArcVmDataMigrationStatus(profile_prefs(),
+                              ArcVmDataMigrationStatus::kNotified);
+  EXPECT_FALSE(ShouldUseVirtioBlkData(profile_prefs()));
+}
+
+// Tests that ShouldUseVirtioBlkData() returns false when ARCVM /data is enabled
+// but the user has just confirmed the migration.
+TEST_F(ArcUtilTest, ShouldUseVirtioBlkData_ArcVmDataMigration_Confirmed) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(kEnableArcVmDataMigration);
+  SetArcVmDataMigrationStatus(profile_prefs(),
+                              ArcVmDataMigrationStatus::kConfirmed);
+  EXPECT_FALSE(ShouldUseVirtioBlkData(profile_prefs()));
+}
+
+// Tests that ShouldUseVirtioBlkData() returns false when ARCVM /data is enabled
+// and the migration has started, but not finished yet.
+TEST_F(ArcUtilTest, ShouldUseVirtioBlkData_ArcVmDataMigration_Started) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(kEnableArcVmDataMigration);
+  SetArcVmDataMigrationStatus(profile_prefs(),
+                              ArcVmDataMigrationStatus::kStarted);
+  EXPECT_FALSE(ShouldUseVirtioBlkData(profile_prefs()));
+}
+
+// Tests that ShouldUseVirtioBlkData() returns true when ARCVM /data is enabled
+// and the migration has finished.
+TEST_F(ArcUtilTest, ShouldUseVirtioBlkData_ArcVmDataMigration_Finished) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(kEnableArcVmDataMigration);
+  SetArcVmDataMigrationStatus(profile_prefs(),
+                              ArcVmDataMigrationStatus::kFinished);
+  EXPECT_TRUE(ShouldUseVirtioBlkData(profile_prefs()));
+}
+
 }  // namespace
 }  // namespace arc
diff --git a/ash/components/arc/session/arc_session.h b/ash/components/arc/session/arc_session.h
index 59d5fae..3f0f445 100644
--- a/ash/components/arc/session/arc_session.h
+++ b/ash/components/arc/session/arc_session.h
@@ -110,6 +110,8 @@
 
   virtual void SetDefaultDeviceScaleFactor(float scale_factor) = 0;
 
+  virtual void SetUseVirtioBlkData(bool use_virtio_blk_data) = 0;
+
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
 
diff --git a/ash/components/arc/session/arc_session_impl.cc b/ash/components/arc/session/arc_session_impl.cc
index a187299e..25eedc5 100644
--- a/ash/components/arc/session/arc_session_impl.cc
+++ b/ash/components/arc/session/arc_session_impl.cc
@@ -466,6 +466,7 @@
       base::FeatureList::IsEnabled(kEnableTTSCacheSetup);
   params.enable_consumer_auto_update_toggle = base::FeatureList::IsEnabled(
       ash::features::kConsumerAutoUpdateToggleAllowed);
+  params.use_virtio_blk_data = use_virtio_blk_data_;
 
   // TODO (b/196460968): Remove after CTS run is complete.
   if (params.enable_notifications_refresh) {
@@ -883,6 +884,10 @@
   DCHECK_GT(lcd_density_, 0);
 }
 
+void ArcSessionImpl::SetUseVirtioBlkData(bool use_virtio_blk_data) {
+  use_virtio_blk_data_ = use_virtio_blk_data;
+}
+
 void ArcSessionImpl::OnConfigurationSet(bool success,
                                         size_t num_cores_disabled) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/ash/components/arc/session/arc_session_impl.h b/ash/components/arc/session/arc_session_impl.h
index e7a85b5..824cd86 100644
--- a/ash/components/arc/session/arc_session_impl.h
+++ b/ash/components/arc/session/arc_session_impl.h
@@ -198,6 +198,7 @@
       ArcClientAdapter::DemoModeDelegate* delegate) override;
   void TrimVmMemory(TrimVmMemoryCallback callback, int page_limit) override;
   void SetDefaultDeviceScaleFactor(float scale_factor) override;
+  void SetUseVirtioBlkData(bool use_virtio_blk_data) override;
 
   // chromeos::SchedulerConfigurationManagerBase::Observer overrides:
   void OnConfigurationSet(bool success, size_t num_cores_disabled) override;
@@ -276,6 +277,9 @@
   // Whether there's insufficient disk space to start the container.
   bool insufficient_disk_space_ = false;
 
+  // Whether ARCVM uses virtio-blk for /data.
+  bool use_virtio_blk_data_ = false;
+
   // In CONNECTING_MOJO state, this is set to the write side of the pipe
   // to notify cancelling of the procedure.
   base::ScopedFD accept_cancel_pipe_;
diff --git a/ash/components/arc/session/arc_session_runner.cc b/ash/components/arc/session/arc_session_runner.cc
index 0fc70c1c..7c77830 100644
--- a/ash/components/arc/session/arc_session_runner.cc
+++ b/ash/components/arc/session/arc_session_runner.cc
@@ -291,6 +291,7 @@
     }
     arc_session_->SetDefaultDeviceScaleFactor(default_device_scale_factor_);
     arc_session_->SetDemoModeDelegate(demo_mode_delegate_.get());
+    arc_session_->SetUseVirtioBlkData(use_virtio_blk_data_);
     arc_session_->AddObserver(this);
     arc_session_->StartMiniInstance();
     // Record the UMA only when |restart_after_crash_count_| is zero to avoid
diff --git a/ash/components/arc/session/arc_session_runner.h b/ash/components/arc/session/arc_session_runner.h
index b915297f..cf0f92dc 100644
--- a/ash/components/arc/session/arc_session_runner.h
+++ b/ash/components/arc/session/arc_session_runner.h
@@ -123,6 +123,10 @@
     default_device_scale_factor_ = scale_factor;
   }
 
+  void set_use_virtio_blk_data(bool use_virtio_blk_data) {
+    use_virtio_blk_data_ = use_virtio_blk_data;
+  }
+
   // Returns the current ArcSession instance for testing purpose.
   ArcSession* GetArcSessionForTesting() { return arc_session_.get(); }
 
@@ -189,6 +193,9 @@
 
   float default_device_scale_factor_ = 1.0f;
 
+  // Whether ARCVM uses virtio-blk for /data.
+  bool use_virtio_blk_data_ = false;
+
   // DemoModeDelegate to be used by ArcSession.
   std::unique_ptr<ArcClientAdapter::DemoModeDelegate> demo_mode_delegate_;
 
diff --git a/ash/components/arc/session/arc_start_params.h b/ash/components/arc/session/arc_start_params.h
index d63079e9..8dcc5fd 100644
--- a/ash/components/arc/session/arc_start_params.h
+++ b/ash/components/arc/session/arc_start_params.h
@@ -97,6 +97,9 @@
 
   // Flag to enable disable consumer auto update toggle as part of EU new deal.
   bool enable_consumer_auto_update_toggle = false;
+
+  // Flag that indicates whether ARCVM uses virtio-blk for /data.
+  bool use_virtio_blk_data = false;
 };
 
 }  // namespace arc
diff --git a/ash/components/arc/session/arc_vm_client_adapter.cc b/ash/components/arc/session/arc_vm_client_adapter.cc
index 873fb42e..e6e10a2 100644
--- a/ash/components/arc/session/arc_vm_client_adapter.cc
+++ b/ash/components/arc/session/arc_vm_client_adapter.cc
@@ -226,7 +226,7 @@
   if (start_params.arc_generate_play_auto_install)
     result.push_back("androidboot.arc_generate_pai=1");
 
-  if (base::FeatureList::IsEnabled(kEnableVirtioBlkForData))
+  if (start_params.use_virtio_blk_data)
     result.push_back("androidboot.arcvm_virtio_blk_data=1");
   else
     result.push_back("androidboot.arcvm_virtio_blk_data=0");
@@ -566,8 +566,7 @@
       base::FeatureList::IsEnabled(arc::kVmGmsCoreLowMemoryKillerProtection));
   request.set_enable_broadcast_anr_prenotify(
       base::FeatureList::IsEnabled(arc::kVmBroadcastPreNotifyANR));
-  request.set_enable_virtio_blk_data(
-      base::FeatureList::IsEnabled(kEnableVirtioBlkForData));
+  request.set_enable_virtio_blk_data(start_params.use_virtio_blk_data);
 
   if (base::FeatureList::IsEnabled(kGuestZram)) {
     request.set_guest_swappiness(kGuestZramSwappiness.Get());
@@ -1061,7 +1060,7 @@
 
   void OnDemoResourcesLoaded(chromeos::VoidDBusMethodCallback callback,
                              FileSystemStatus file_system_status) {
-    if (!base::FeatureList::IsEnabled(kEnableVirtioBlkForData)) {
+    if (!start_params_.use_virtio_blk_data) {
       VLOG(1) << "Using virtio-fs for /data";
       StartArcVm(std::move(callback), std::move(file_system_status),
                  /*data_disk_path=*/absl::nullopt);
diff --git a/ash/components/arc/session/arc_vm_client_adapter_unittest.cc b/ash/components/arc/session/arc_vm_client_adapter_unittest.cc
index 20665e377..7b278e64 100644
--- a/ash/components/arc/session/arc_vm_client_adapter_unittest.cc
+++ b/ash/components/arc/session/arc_vm_client_adapter_unittest.cc
@@ -1555,14 +1555,13 @@
       GetTestConciergeClient()->start_arc_vm_request().rootfs_block_size());
 }
 
-TEST_F(ArcVmClientAdapterTest, VirtioBlkForData_FlagDisabled) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatureState(arc::kEnableVirtioBlkForData, false);
-
+TEST_F(ArcVmClientAdapterTest, VirtioBlkForData_Disabled) {
   GetTestConciergeClient()->set_create_disk_image_response(
       CreateDiskImageResponse(vm_tools::concierge::DISK_STATUS_CREATED));
 
-  StartMiniArcWithParams(true, GetPopulatedStartParams());
+  StartParams start_params(GetPopulatedStartParams());
+  start_params.use_virtio_blk_data = false;
+  StartMiniArcWithParams(true, std::move(start_params));
   EXPECT_GE(GetTestConciergeClient()->start_arc_vm_call_count(), 1);
 
   // CreateDiskImage() should NOT be called.
@@ -1577,41 +1576,39 @@
 }
 
 TEST_F(ArcVmClientAdapterTest, VirtioBlkForData_CreateDiskimageResponseEmpty) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(arc::kEnableVirtioBlkForData);
-
   // CreateDiskImage() returns an empty response.
   GetTestConciergeClient()->set_create_disk_image_response(absl::nullopt);
 
   // StartArcVm should NOT be called.
-  StartMiniArcWithParams(false, {});
+  StartParams start_params(GetPopulatedStartParams());
+  start_params.use_virtio_blk_data = true;
+  StartMiniArcWithParams(false, std::move(start_params));
   EXPECT_EQ(GetTestConciergeClient()->start_arc_vm_call_count(), 0);
 
   EXPECT_EQ(GetTestConciergeClient()->create_disk_image_call_count(), 1);
 }
 
 TEST_F(ArcVmClientAdapterTest, VirtioBlkForData_CreateDiskImageStatusFailed) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(arc::kEnableVirtioBlkForData);
-
   GetTestConciergeClient()->set_create_disk_image_response(
       CreateDiskImageResponse(vm_tools::concierge::DISK_STATUS_FAILED));
 
+  StartParams start_params(GetPopulatedStartParams());
+  start_params.use_virtio_blk_data = true;
+
   // StartArcVm should NOT be called.
-  StartMiniArcWithParams(false, {});
+  StartMiniArcWithParams(false, std::move(start_params));
   EXPECT_EQ(GetTestConciergeClient()->start_arc_vm_call_count(), 0);
 
   EXPECT_EQ(GetTestConciergeClient()->create_disk_image_call_count(), 1);
 }
 
 TEST_F(ArcVmClientAdapterTest, VirtioBlkForData_CreateDiskImageStatusCreated) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(arc::kEnableVirtioBlkForData);
-
   GetTestConciergeClient()->set_create_disk_image_response(
       CreateDiskImageResponse(vm_tools::concierge::DISK_STATUS_CREATED));
 
-  StartMiniArcWithParams(true, GetPopulatedStartParams());
+  StartParams start_params(GetPopulatedStartParams());
+  start_params.use_virtio_blk_data = true;
+  StartMiniArcWithParams(true, std::move(start_params));
   EXPECT_GE(GetTestConciergeClient()->start_arc_vm_call_count(), 1);
 
   EXPECT_EQ(GetTestConciergeClient()->create_disk_image_call_count(), 1);
@@ -1625,13 +1622,12 @@
 }
 
 TEST_F(ArcVmClientAdapterTest, VirtioBlkForData_CreateDiskImageStatusExists) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(arc::kEnableVirtioBlkForData);
-
   GetTestConciergeClient()->set_create_disk_image_response(
       CreateDiskImageResponse(vm_tools::concierge::DISK_STATUS_EXISTS));
 
-  StartMiniArcWithParams(true, GetPopulatedStartParams());
+  StartParams start_params = GetPopulatedStartParams();
+  start_params.use_virtio_blk_data = true;
+  StartMiniArcWithParams(true, std::move(start_params));
   EXPECT_GE(GetTestConciergeClient()->start_arc_vm_call_count(), 1);
 
   EXPECT_EQ(GetTestConciergeClient()->create_disk_image_call_count(), 1);
@@ -1646,12 +1642,11 @@
 
 TEST_F(ArcVmClientAdapterTest, VirtioBlkForData_LvmSupported) {
   base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatures(
-      /*enabled_features=*/{arc::kEnableVirtioBlkForData,
-                            arc::kLvmApplicationContainers},
-      /*disabled_features=*/{});
+  feature_list.InitAndEnableFeature(arc::kLvmApplicationContainers);
 
-  StartMiniArcWithParams(true, GetPopulatedStartParams());
+  StartParams start_params(GetPopulatedStartParams());
+  start_params.use_virtio_blk_data = true;
+  StartMiniArcWithParams(true, std::move(start_params));
   EXPECT_GE(GetTestConciergeClient()->start_arc_vm_call_count(), 1);
 
   // CreateDiskImage() should NOT be called.
@@ -1672,12 +1667,13 @@
   // ArcLvmApplicationContainers flag.
   base::test::ScopedFeatureList feature_list;
   feature_list.InitWithFeaturesAndParameters(
-      /*enabled_features=*/{{arc::kEnableVirtioBlkForData, {{}}},
-                            {arc::kVirtioBlkDataConfigOverride,
+      /*enabled_features=*/{{arc::kVirtioBlkDataConfigOverride,
                              {{"use_lvm", "true"}}}},
       /*disabled_features=*/{arc::kLvmApplicationContainers});
 
-  StartMiniArcWithParams(true, GetPopulatedStartParams());
+  StartParams start_params(GetPopulatedStartParams());
+  start_params.use_virtio_blk_data = true;
+  StartMiniArcWithParams(true, std::move(start_params));
   EXPECT_GE(GetTestConciergeClient()->start_arc_vm_call_count(), 1);
 
   // CreateDiskImage() should NOT be called.
diff --git a/ash/components/arc/test/fake_arc_session.cc b/ash/components/arc/test/fake_arc_session.cc
index d7431f1..5f64bc4 100644
--- a/ash/components/arc/test/fake_arc_session.cc
+++ b/ash/components/arc/test/fake_arc_session.cc
@@ -57,6 +57,8 @@
 
 void FakeArcSession::SetDefaultDeviceScaleFactor(float scale_factor) {}
 
+void FakeArcSession::SetUseVirtioBlkData(bool use_virtio_blk_data) {}
+
 void FakeArcSession::StopWithReason(ArcStopReason reason) {
   bool was_mojo_connected = running_;
   running_ = false;
diff --git a/ash/components/arc/test/fake_arc_session.h b/ash/components/arc/test/fake_arc_session.h
index 69d3582..c116f2a0 100644
--- a/ash/components/arc/test/fake_arc_session.h
+++ b/ash/components/arc/test/fake_arc_session.h
@@ -40,6 +40,7 @@
       ArcClientAdapter::DemoModeDelegate* delegate) override;
   void TrimVmMemory(TrimVmMemoryCallback callback, int page_limit) override;
   void SetDefaultDeviceScaleFactor(float scale_factor) override;
+  void SetUseVirtioBlkData(bool use_virtio_blk_data) override;
 
   // To emulate unexpected stop, such as crash.
   void StopWithReason(ArcStopReason reason);
diff --git a/ash/public/cpp/app_list/app_list_types.h b/ash/public/cpp/app_list/app_list_types.h
index 67b7ff4a..782a856 100644
--- a/ash/public/cpp/app_list/app_list_types.h
+++ b/ash/public/cpp/app_list/app_list_types.h
@@ -129,8 +129,7 @@
   // to contain a single item.
   bool is_system_folder = false;
 
-  gfx::ImageSkia icon;         // The icon of this item.
-  bool is_page_break = false;  // Whether this item is a "page break" item.
+  gfx::ImageSkia icon;                  // The icon of this item.
   SkColor badge_color = SK_ColorWHITE;  // Notification badge color.
 
   // Whether the app was installed this session and has not yet been launched.
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index f817b2c..5baceac 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">አዘምን እና ዘግተህ ውጣ</translation>
 <translation id="1864454756846565995">USB-C መሣሪያ (የኋላ ወደብ)</translation>
 <translation id="1869497990620230175">ፈጣን ፋይሎች</translation>
+<translation id="1871703283152909317">ሁለቱንም መዳረሻዎች አብራ</translation>
 <translation id="1879018240766558464">ማንነት የማያሳውቁ መስኮቶች በአሁኑ ጊዜ አይደገፉም። ሌሎች መተግበሪያዎች ይቀመጣሉ።</translation>
 <translation id="1882814835921407042">ምንም ተንቀሳቃሽ ስልክ አውታረ መረብ የለም</translation>
 <translation id="1882897271359938046">ወደ <ph name="DISPLAY_NAME" /> በማንጸባረቅ ላይ</translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">የንግግር ፍጥነት</translation>
 <translation id="6099678161144790572">ባለፈው ወር ውስጥ አርትዖት ተደርጓል</translation>
 <translation id="6103838137565245112">ሥርዓት</translation>
+<translation id="6107292179555508368">ማይክሮፎን እና የካሜራ መዳረሻዎች በዚህ መሣሪያ ላይ ጠፍተዋል</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> የንግግር ፋይሎች ወርደዋል</translation>
 <translation id="6116825164611323644">በዚህ መሣሪያ ላይ የካሜራ መዳረሻ ጠፍቷል</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />። <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">ለመጠቀም የእርስዎን ስታይለስ ይጠቀሙ</translation>
 <translation id="6267036997247669271"><ph name="NAME" />፦ በማግበር ላይ...</translation>
 <translation id="6274202259872570803">ማያ ገጽ መቅርጽ</translation>
+<translation id="6282694724099204652">በዚህ መሣሪያ ላይ ያሉትን ማይክሮፎን(ኖች) እና ካሜራ(ዎች) ለመጠቀም ፈቃድ ያላቸው መተግበሪያዎችን እና ድረ-ገጾችን ለመፍቀድ መዳረሻዎቹን ያብሩ።</translation>
 <translation id="6283712521836204486">አትረብሽ ጠፍቷል</translation>
 <translation id="6284232397434400372">ጥራቱ ተቀይሯል</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> ከወላጅ ፈቃድ ጋር እንደገና ሊታከል ይችላል።</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index c7ad106..ffffb59 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -176,6 +176,7 @@
 <translation id="1862380676329487333">تحديث وتسجيل الخروج</translation>
 <translation id="1864454756846565995">‏جهاز USB-C (المنفذ الخلفي)</translation>
 <translation id="1869497990620230175">الوصول سريعًا إلى الملفات</translation>
+<translation id="1871703283152909317">تفعيل إمكانية الوصول إلى الميكروفون والكاميرا</translation>
 <translation id="1879018240766558464">نوافذ التصفّح المتخفي غير متوافقة حاليًا، ولكن سيتم حفظ التطبيقات الأخرى.</translation>
 <translation id="1882814835921407042">شبكة الجوّال غير متاحة</translation>
 <translation id="1882897271359938046">نسخ إلى <ph name="DISPLAY_NAME" /></translation>
@@ -923,6 +924,7 @@
 <translation id="6095008505822982596">معدّل سرعة الكلام</translation>
 <translation id="6099678161144790572">تم تعديله الشهر الماضي.</translation>
 <translation id="6103838137565245112">النظام</translation>
+<translation id="6107292179555508368">إمكانية الوصول إلى الميكروفون والكاميرا غير مفعَّلة على هذا الجهاز</translation>
 <translation id="6114505516289286752">تم تنزيل ملفات اللغة <ph name="LANGUAGE" /> في ميزة "التعرّف على الكلام"</translation>
 <translation id="6116825164611323644">خيار الوصول إلى الكاميرا غير مفعَّل على هذا الجهاز</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -951,6 +953,7 @@
 <translation id="6259254695169772643">استخدام قلم الشاشة للاختيار</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: جارٍ التفعيل...</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">يجب تفعيل إمكانية الوصول إلى الميكروفون والكاميرا من أجل منح التطبيقات وصفحات الويب إذنًا لاستخدام الميكروفونات والكاميرات على هذا الجهاز.</translation>
 <translation id="6283712521836204486">وضع "عدم الإزعاج" متوقف.</translation>
 <translation id="6284232397434400372">تم تغيير درجة الدقة</translation>
 <translation id="6288235558961782912">يمكن إعادة إضافة <ph name="USER_EMAIL_ADDRESS" /> لاحقًا بإذنٍ من أحد الوالدَين.</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index 085d205..9fcc6888 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Güncəlləyin və çıxın</translation>
 <translation id="1864454756846565995">USB-C cihazı (arxa port)</translation>
 <translation id="1869497990620230175">Sürətli fayllar</translation>
+<translation id="1871703283152909317">Hər iki girişi aktiv edin</translation>
 <translation id="1879018240766558464">Anonim pəncərələr hazırda dəstəklənmir. Digər tətbiqlər yadda saxlanılacaq.</translation>
 <translation id="1882814835921407042">Mobil şəbəkə yoxdur</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> əks etdirilir</translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Nitq sürəti</translation>
 <translation id="6099678161144790572">Keçən ay redaktə edilib</translation>
 <translation id="6103838137565245112">sistem</translation>
+<translation id="6107292179555508368">Bu cihazda mikrofon və kamera girişləri deaktivdir</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> dilində danışıq faylları endirilib</translation>
 <translation id="6116825164611323644">Bu cihazda kameraya giriş deaktivdir</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Seçmək üçün fırçadan istifadə edin</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Aktivləşdirilir...</translation>
 <translation id="6274202259872570803">Ekran yayımı</translation>
+<translation id="6282694724099204652">Bu cihazda mikrofon(lar) və kamera(lar)dan istifadə etmək icazəsi olan tətbiqlərə və veb səhifələrə icazə vermək üçün girişləri aktiv edin.</translation>
 <translation id="6283712521836204486">Narahat etməyin rejimi deaktivdir</translation>
 <translation id="6284232397434400372">Keyfiyyət dəyişdi</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> daha sonra valideynin icazəsi ilə yenidən əlavə edilə bilər.</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 3abe2980..c11db2b 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Opdater, og log ud</translation>
 <translation id="1864454756846565995">USB-C-enhed (port bagpå)</translation>
 <translation id="1869497990620230175">Genvej til foretrukne filer</translation>
+<translation id="1871703283152909317">Aktivér adgang til begge</translation>
 <translation id="1879018240766558464">Inkognitovinduer understøttes ikke i øjeblikket. Andre apps gemmes.</translation>
 <translation id="1882814835921407042">Intet mobilnetværk</translation>
 <translation id="1882897271359938046">Spejler mod <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Talehastighed</translation>
 <translation id="6099678161144790572">Redigeret inden for den seneste måned</translation>
 <translation id="6103838137565245112">systemet</translation>
+<translation id="6107292179555508368">Adgang til mikrofon og kamera er deaktiveret på denne enhed</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> talefiler blev downloadet</translation>
 <translation id="6116825164611323644">Kameraadgang er deaktiveret på denne enhed</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Vælg ved hjælp af din styluspen</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Aktiverer...</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">Aktivér adgang for at tillade, at apps og websider med tilladelsen kan bruge mikrofonerne og kameraerne på denne enhed.</translation>
 <translation id="6283712521836204486">Forstyr ikke er deaktiveret</translation>
 <translation id="6284232397434400372">Opløsningen blev ændret</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> kan tilføjes igen senere, hvis en forælder giver tilladelse til det.</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index 1033243..50b00ec 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Frissítés és kijelentkezés</translation>
 <translation id="1864454756846565995">C típusú USB-vel kompatibilis eszköz (hátsó port)</translation>
 <translation id="1869497990620230175">Gyorsfájlok</translation>
+<translation id="1871703283152909317">Mindkét hozzáférés bekapcsolása</translation>
 <translation id="1879018240766558464">Az inkognitó ablakok jelenleg nem támogatottak. Az egyéb alkalmazásokat menti a rendszer.</translation>
 <translation id="1882814835921407042">Nincs mobilhálózat</translation>
 <translation id="1882897271359938046">Tükrözés: <ph name="DISPLAY_NAME" /></translation>
@@ -925,6 +926,7 @@
 <translation id="6095008505822982596">Beszéd sebessége</translation>
 <translation id="6099678161144790572">Az elmúlt egy hónapban szerkesztette</translation>
 <translation id="6103838137565245112">rendszer</translation>
+<translation id="6107292179555508368">A mikrofon- és a kamera-hozzáférés ki van kapcsolva ezen az eszközön</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> nyelvű beszédfájlok letöltve</translation>
 <translation id="6116825164611323644">A kamera-hozzáférés ki van kapcsolva ezen az eszközön</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -953,6 +955,7 @@
 <translation id="6259254695169772643">A kiválasztáshoz használja az érintőceruzát</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: aktiválás...</translation>
 <translation id="6274202259872570803">Képernyőátküldés</translation>
+<translation id="6282694724099204652">Kapcsolja be a hozzáféréseket, ha engedélyezni szeretné az engedéllyel rendelkező alkalmazások és weboldalak számára az eszköz mikrofonjainak vagy kameráinak használatát.</translation>
 <translation id="6283712521836204486">A Ne zavarjanak funkció ki van kapcsolva.</translation>
 <translation id="6284232397434400372">A felbontás módosult</translation>
 <translation id="6288235558961782912">A(z) <ph name="USER_EMAIL_ADDRESS" /> felhasználót később szülői engedéllyel újra hozzáadhatja.</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 1e28eaa..86a5066 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Update dan logout</translation>
 <translation id="1864454756846565995">Perangkat USB-C (port belakang)</translation>
 <translation id="1869497990620230175">File cepat</translation>
+<translation id="1871703283152909317">Aktifkan kedua akses</translation>
 <translation id="1879018240766558464">Jendela Samaran saat ini tidak didukung. Aplikasi lainnya akan disimpan.</translation>
 <translation id="1882814835921407042">Tidak ada jaringan seluler</translation>
 <translation id="1882897271359938046">Mencerminkan ke <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Kecepatan ucapan</translation>
 <translation id="6099678161144790572">Diedit dalam sebulan terakhir</translation>
 <translation id="6103838137565245112">sistem</translation>
+<translation id="6107292179555508368">Akses mikrofon dan kamera nonaktif di perangkat ini</translation>
 <translation id="6114505516289286752">File ucapan bahasa <ph name="LANGUAGE" /> didownload</translation>
 <translation id="6116825164611323644">Akses kamera nonaktif di perangkat ini</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Gunakan stilus untuk memilih</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Mengaktifkan...</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">Aktifkan akses untuk mengizinkan aplikasi dan halaman web yang memiliki izin untuk menggunakan mikrofon dan kamera di perangkat ini.</translation>
 <translation id="6283712521836204486">Mode Jangan Ganggu nonaktif.</translation>
 <translation id="6284232397434400372">Resolusi diubah</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> dapat ditambahkan ulang nanti dengan izin orang tua.</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb
index 134d8375..9039030 100644
--- a/ash/strings/ash_strings_is.xtb
+++ b/ash/strings/ash_strings_is.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Uppfæra og skrá út</translation>
 <translation id="1864454756846565995">USB-C-tæki (tengi að aftan)</translation>
 <translation id="1869497990620230175">Skrár fljótt</translation>
+<translation id="1871703283152909317">Kveikja á aðgangi beggja</translation>
 <translation id="1879018240766558464">Huliðsgluggar eru ekki studdir eins og er. Önnur forrit verða vistuð.</translation>
 <translation id="1882814835921407042">Ekkert farsímakerfi</translation>
 <translation id="1882897271359938046">Speglar á <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Talhraði</translation>
 <translation id="6099678161144790572">Breytt í liðnum mánuði</translation>
 <translation id="6103838137565245112">kerfi</translation>
+<translation id="6107292179555508368">Slökkt er á aðgangi hljóðnema og myndavélar í þessu tæki</translation>
 <translation id="6114505516289286752">Talskrár sóttar fyrir: <ph name="LANGUAGE" /></translation>
 <translation id="6116825164611323644">Slökkt er á aðgangi að myndavél í tækinu</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Notaðu pennann þinn til að velja</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Virkjar...</translation>
 <translation id="6274202259872570803">Skjáupptaka</translation>
+<translation id="6282694724099204652">Kveiktu á aðgangi beggja til að leyfa forritum og vefsíðum með heimildina að nota hljóðnema og myndavél(ar) þessa tækis.</translation>
 <translation id="6283712521836204486">Slökkt er á „Ónáðið ekki“.</translation>
 <translation id="6284232397434400372">Upplausn breytt</translation>
 <translation id="6288235558961782912">Hægt er að bæta <ph name="USER_EMAIL_ADDRESS" /> við aftur síðar með leyfi foreldris.</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index 187027a1..f94e368 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">ដំឡើងកំណែ រួច​ចេញ</translation>
 <translation id="1864454756846565995">ឧបករណ៍ USB-C (រន្ធខាងក្រោយ)</translation>
 <translation id="1869497990620230175">ឯកសារ​រហ័ស</translation>
+<translation id="1871703283152909317">បើក​សិទ្ធិចូលប្រើប្រាស់ទាំងពីរ</translation>
 <translation id="1879018240766558464">បច្ចុប្បន្ន មិនអាចប្រើ​ផ្ទាំងឯកជន​បានទេ។ កម្មវិធីផ្សេងទៀតនឹងត្រូវបានរក្សាទុក។</translation>
 <translation id="1882814835921407042">គ្មានបណ្ដាញ​ទូរសព្ទចល័តទេ</translation>
 <translation id="1882897271359938046">កំពុងឆ្លុះទៅ <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">ល្បឿននៃការនិយាយ</translation>
 <translation id="6099678161144790572">បានកែ​កាលពីខែមុន</translation>
 <translation id="6103838137565245112">ប្រព័ន្ធ</translation>
+<translation id="6107292179555508368">សិទ្ធិចូលប្រើប្រាស់​មីក្រូហ្វូន និង​កាមេរ៉ា​ត្រូវបាន​បិទ​នៅលើ​ឧបករណ៍​នេះ</translation>
 <translation id="6114505516289286752">បានទាញយក​ឯកសារនៃការនិយាយ​ជាភាសា<ph name="LANGUAGE" /></translation>
 <translation id="6116825164611323644">ការ​ចូលប្រើប្រាស់​កាមេរ៉ា​ត្រូវបាន​បិទ​នៅលើ​ឧបករណ៍​នេះ</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />។ <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">ប្រើប៊ិច​របស់អ្នក​ដើម្បី​ជ្រើសរើស</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: កំពុងធ្វើសកម្មភាព...</translation>
 <translation id="6274202259872570803">ការថតអេក្រង់</translation>
+<translation id="6282694724099204652">បើក​សិទ្ធិចូលប្រើប្រាស់ ដើម្បីអនុញ្ញាត​ឱ្យ​កម្មវិធី និង​ទំព័របណ្ដាញ​ដែលមាន​ការអនុញ្ញាត​ ប្រើប្រាស់​មីក្រូហ្វូន និង​កាមេរ៉ា​នៅលើ​ឧបករណ៍​នេះ។</translation>
 <translation id="6283712521836204486">មុខងារ​ "កុំរំខាន​" ត្រូវបាន​បិទ។</translation>
 <translation id="6284232397434400372">បាន​ប្តូរ​កម្រិត​ច្បាស់</translation>
 <translation id="6288235558961782912">អាចបញ្ចូល <ph name="USER_EMAIL_ADDRESS" /> ឡើងវិញ​នៅពេលក្រោយ​ដោយមាន​ការអនុញ្ញាតពីមាតាបិតា។</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index a17f2c3..310b164 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">업데이트 및 로그아웃</translation>
 <translation id="1864454756846565995">USB-C 기기(후면 포트)</translation>
 <translation id="1869497990620230175">빠른 파일</translation>
+<translation id="1871703283152909317">두 액세스 모두 사용 설정</translation>
 <translation id="1879018240766558464">시크릿 창은 현재 지원되지 않습니다. 다른 앱은 저장됩니다.</translation>
 <translation id="1882814835921407042">모바일 네트워크 없음</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" />에 미러링</translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">말하는 속도</translation>
 <translation id="6099678161144790572">지난달에 수정됨</translation>
 <translation id="6103838137565245112">시스템</translation>
+<translation id="6107292179555508368">기기에서 마이크 및 카메라 액세스가 사용 중지되어 있습니다</translation>
 <translation id="6114505516289286752">음성 파일 <ph name="LANGUAGE" />개 다운로드됨</translation>
 <translation id="6116825164611323644">기기에서 카메라 액세스가 사용 중지되어 있습니다</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />, <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">스타일러스로 선택하세요.</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: 활성화 중...</translation>
 <translation id="6274202259872570803">스크린캐스트</translation>
+<translation id="6282694724099204652">액세스를 사용 설정하여 이 기기에서 마이크 및 카메라 사용 권한이 있는 앱과 웹페이지를 허용하세요.</translation>
 <translation id="6283712521836204486">방해 금지 모드가 사용 중지되어 있습니다.</translation>
 <translation id="6284232397434400372">해상도가 변경됨</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" />은(는) 나중에 부모님의 허락을 받아 다시 추가할 수 있습니다.</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 7f17867..c0bd558 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">ອັບເດດ ແລະ ອອກຈາກລະບົບ</translation>
 <translation id="1864454756846565995">ອຸ​ປະ​ກອນ USB-C (ຜອດ​ດ້ານຫຼັງ)</translation>
 <translation id="1869497990620230175">ໄຟລ໌ດ່ວນ</translation>
+<translation id="1871703283152909317">ເປີດສິດເຂົ້າເຖິງທັງສອງຢ່າງ</translation>
 <translation id="1879018240766558464">ຕອນນີ້ບໍ່ຮອງຮັບໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນເທື່ອ. ແອັບອື່ນໆຈະຖືກບັນທຶກໄວ້.</translation>
 <translation id="1882814835921407042">ບໍ່ມີເຄືອຂ່າຍມືຖື</translation>
 <translation id="1882897271359938046">ການສ່ອງໜ້າຈໍໃສ່ <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">ອັດຕາການເວົ້າ</translation>
 <translation id="6099678161144790572">ແກ້ໄຂເດືອນແລ້ວ</translation>
 <translation id="6103838137565245112">ລະບົບ</translation>
+<translation id="6107292179555508368">ສິດເຂົ້າເຖິງໄມໂຄຣໂຟນ ແລະ ສິດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບແມ່ນປິດຢູ່ໃນອຸປະກອນນີ້</translation>
 <translation id="6114505516289286752">ດາວໂຫຼດໄຟລ໌ສຽງເວົ້າ <ph name="LANGUAGE" /> ແລ້ວ</translation>
 <translation id="6116825164611323644">ສິດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບຖືກປິດໄວ້ຢູ່ອຸປະກອນນີ້</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">ໃຊ້ປາຍປາກກາຂອງທ່ານເພື່ອເລືອກ</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: ກຳລັງເປີດນຳໃຊ້...</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">ເປີດສິດເຂົ້າເຖິງເພື່ອອະນຸຍາດໃຫ້ແອັບ ແລະ ໜ້າເວັບທີ່ມີການອະນຸຍາດດັ່ງກ່າວໃຊ້ໄມໂຄຣໂຟນ ແລະ ກ້ອງຖ່າຍຮູບຢູ່ໃນອຸປະກອນນີ້.</translation>
 <translation id="6283712521836204486">ໂໝດຫ້າມລົບກວນປິດຢູ່.</translation>
 <translation id="6284232397434400372">ປ່ຽນຄວາມລະອຽດແລ້ວ</translation>
 <translation id="6288235558961782912">ສາມາດເພີ່ມ <ph name="USER_EMAIL_ADDRESS" /> ຄືນໃໝ່ໃນພາຍຫຼັງໄດ້ໂດຍມີການອະນຸຍາດຂອງພໍ່ແມ່.</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index a0f461f..d34de82 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Atnaujinti ir atsijungti</translation>
 <translation id="1864454756846565995">USB-C įrenginys (prievadas gale)</translation>
 <translation id="1869497990620230175">Spartieji failai</translation>
+<translation id="1871703283152909317">Įjungti abiejų tipų prieigą</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>
 <translation id="1882897271359938046">Dubliuojama <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Kalbėjimo sparta</translation>
 <translation id="6099678161144790572">Redaguota per pastarąjį mėnesį</translation>
 <translation id="6103838137565245112">sistema</translation>
+<translation id="6107292179555508368">Prieiga prie mikrofono ir fotoaparato išjungta šiame įrenginyje</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> kalbos failai atsisiųsti</translation>
 <translation id="6116825164611323644">Prieiga prie fotoaparato išjungta šiame įrenginyje</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Pasirinkite naudodami rašiklį</translation>
 <translation id="6267036997247669271">„<ph name="NAME" />“: aktyvinama...</translation>
 <translation id="6274202259872570803">Ekrano vaizdo įrašas</translation>
+<translation id="6282694724099204652">Įjunkite prieigą, kad leistumėte leidimą turinčioms programoms ir tinklalapiams naudoti mikrofoną (-us) ir fotoaparatą (-us) šiame įrenginyje.</translation>
 <translation id="6283712521836204486">Netrukdymo režimas išjungtas.</translation>
 <translation id="6284232397434400372">Skyra pakeista</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> galima pridėti iš naujo vėliau, gavus tėvų leidimą.</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 79f62134..87d0278 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Atjaunināt un izrakstīties</translation>
 <translation id="1864454756846565995">USB-C ierīce (aizmugurējā pieslēgvieta)</translation>
 <translation id="1869497990620230175">Ātrā piekļuve failiem</translation>
+<translation id="1871703283152909317">Ieslēgt abējādu piekļuvi</translation>
 <translation id="1879018240766558464">Inkognito režīma logi pašlaik netiek atbalstīti. Citas lietotnes tiks saglabātas.</translation>
 <translation id="1882814835921407042">Nav mobilā tīkla</translation>
 <translation id="1882897271359938046">Spoguļo šeit: <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Runas ātrums</translation>
 <translation id="6099678161144790572">Rediģēts pagājušajā mēnesī</translation>
 <translation id="6103838137565245112">sistēma</translation>
+<translation id="6107292179555508368">Šajā ierīcē ir izslēgta piekļuve mikrofonam un kamerai</translation>
 <translation id="6114505516289286752">Lejupielādēti runas faili šādā valodā: <ph name="LANGUAGE" /></translation>
 <translation id="6116825164611323644">Piekļuve kamerai ir izslēgta šajā ierīcē</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" />.</translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Atlasīšanai izmantojiet skārienekrāna pildspalvu.</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: notiek aktivizēšana...</translation>
 <translation id="6274202259872570803">Ekrānraide</translation>
+<translation id="6282694724099204652">Ieslēdziet piekļuvi, lai ļautu lietotnēm un tīmekļa lapām ar attiecīgo atļauju izmantot ar šo ierīci savienotos mikrofonus un kameras.</translation>
 <translation id="6283712521836204486">Režīms “Netraucēt” ir izslēgts.</translation>
 <translation id="6284232397434400372">Izšķirtspēja nomainīta</translation>
 <translation id="6288235558961782912">Kontu <ph name="USER_EMAIL_ADDRESS" /> var vēlāk atkārtoti pievienot ar vecāku atļauju.</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index 895624f..9c9d1f7 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Шинэчлээд, гарах</translation>
 <translation id="1864454756846565995">USB-C төхөөрөмж (ард талын порт)</translation>
 <translation id="1869497990620230175">Шуурхай файлууд</translation>
+<translation id="1871703283152909317">Хоёр хандалтыг хоёуланг нь асаах</translation>
 <translation id="1879018240766558464">Нууцлалтай цонхнуудыг одоогоор дэмждэггүй. Бусад аппыг хадгална.</translation>
 <translation id="1882814835921407042">Мобайл сүлжээ алга</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> руу тусгаж байна</translation>
@@ -925,6 +926,7 @@
 <translation id="6095008505822982596">Ярианы хурд</translation>
 <translation id="6099678161144790572">Өнгөрсөн сард зассан</translation>
 <translation id="6103838137565245112">систем</translation>
+<translation id="6107292179555508368">Энэ төхөөрөмж дээр микрофон болон камерын хандалтууд унтраалттай байна</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> дээрх ярианы файлуудыг татсан</translation>
 <translation id="6116825164611323644">Энэ төхөөрөмж дээр камерын хандалтыг унтраасан</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -953,6 +955,7 @@
 <translation id="6259254695169772643">Мэдрэгч үзгээ ашиглан сонгоно уу</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: идэвхжүүлж байна...</translation>
 <translation id="6274202259872570803">Дэлгэцийн видео бичлэг</translation>
+<translation id="6282694724099204652">Зөвшөөрөлтэй аппууд болон веб хуудаснуудад энэ төхөөрөмж дээрх микрофон болон камерыг ашиглахыг зөвшөөрөхийн тулд хандалтуудыг асаана уу.</translation>
 <translation id="6283712521836204486">Бүү саад бол горим унтраалттай байна.</translation>
 <translation id="6284232397434400372">Нягтралыг өөрчилсөн</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" />-г эцэг эхийн зөвшөөрөлтэйгөөр дараа дахин нэмэх боломжтой.</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index b592e3d..b711f3dc 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">အပ်ဒိတ်လုပ်ပြီး ထွက်ရန်</translation>
 <translation id="1864454756846565995">USB-C ကိရိယာ (နောက်ဘက် ပို့တ်)</translation>
 <translation id="1869497990620230175">အမြန်ဖိုင်များ</translation>
+<translation id="1871703283152909317">သုံးခွင့်နှစ်ခုလုံး ဖွင့်ရန်</translation>
 <translation id="1879018240766558464">‘ရုပ်ဖျက်’ ဝင်ဒိုးများကို လောလောဆယ် ပံ့ပိုးမထားပါ။ အခြားအက်ပ်များကို သိမ်းပါမည်။</translation>
 <translation id="1882814835921407042">မိုဘိုင်းကွန်ရက် မရှိပါ</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> သို့ ပုံတူပွားနေ</translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">စကားပြောနှုန်း</translation>
 <translation id="6099678161144790572">ယခင်လက ပြင်ဆင်ထားသည်</translation>
 <translation id="6103838137565245112">စနစ်</translation>
+<translation id="6107292179555508368">ဤစက်ရှိ မိုက်ခရိုဖုန်းနှင့် ကင်မရာသုံးခွင့်များ ပိတ်ထားသည်</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> တိုက်ရိုက်စာတန်းဖိုင်များ ဒေါင်းလုဒ်လုပ်ပြီးပြီ</translation>
 <translation id="6116825164611323644">ဤစက်တွင် ကင်မရာသုံးခွင့် ပိတ်ထားသည်</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />။ <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">ရွေးချယ်ရန် သင့်စတိုင်လပ်စ် အသုံးပြုပါ</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: ဖွင့်ပေးနေ...</translation>
 <translation id="6274202259872570803">ဖန်သားပြင် ထုတ်လွှင့်ခြင်း</translation>
+<translation id="6282694724099204652">ဤစက်သို့ ချိတ်ဆက်ထားသည့် မိုက်ခရိုဖုန်း(များ) နှင့် ကင်မရာ(များ) သုံးရန်အတွက် ခွင့်ပြုချက်ပါရှိသည့် အက်ပ်နှင့် ဝဘ်စာမျက်နှာများအား ခွင့်ပြုရန် သုံးခွင့်များကို ဖွင့်ပါ။</translation>
 <translation id="6283712521836204486">'မနှောင့်ယှက်ရ' ကို ပိတ်ထားသည်။</translation>
 <translation id="6284232397434400372">ပုံရိပ်ပြတ်သားကိန်း ပြောင်းသွားခြင်း</translation>
 <translation id="6288235558961782912">မိဘခွင့်ပြုချက်ဖြင့် <ph name="USER_EMAIL_ADDRESS" /> ကို နောက်ပိုင်းတွင် ပြန်ထည့်နိုင်သည်။</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index 250d409..e8b31ec 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Atualizar e sair</translation>
 <translation id="1864454756846565995">Dispositivo USB-C (porta traseira)</translation>
 <translation id="1869497990620230175">Arquivos de acesso rápido</translation>
+<translation id="1871703283152909317">Ativar os dois acessos</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>
 <translation id="1882897271359938046">Espelhamento de <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Velocidade da fala</translation>
 <translation id="6099678161144790572">Editado no último mês</translation>
 <translation id="6103838137565245112">sistema</translation>
+<translation id="6107292179555508368">Os acessos ao microfone e à câmera estão desativados neste dispositivo</translation>
 <translation id="6114505516289286752">Download de arquivos de fala em <ph name="LANGUAGE" /> concluído</translation>
 <translation id="6116825164611323644">O acesso à câmera está desativado neste dispositivo</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Use a stylus para selecionar</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Ativando...</translation>
 <translation id="6274202259872570803">Screencast</translation>
+<translation id="6282694724099204652">Ative os acessos para autorizar apps e páginas da Web com a permissão de uso do microfone e da câmera neste dispositivo.</translation>
 <translation id="6283712521836204486">O "Não perturbe" está desativado.</translation>
 <translation id="6284232397434400372">Resolução alterada</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> pode ser adicionado novamente com a permissão do pai/mãe.</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index 1b75b44..2f53342c 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Обновить и выйти</translation>
 <translation id="1864454756846565995">Устройство USB-C (порт сзади)</translation>
 <translation id="1869497990620230175">Быстрый доступ к файлам</translation>
+<translation id="1871703283152909317">Разрешить доступ к камере и микрофону</translation>
 <translation id="1879018240766558464">Окна в режиме инкогнито пока не поддерживаются. Остальные приложения будут сохранены.</translation>
 <translation id="1882814835921407042">Не подключено к мобильной сети</translation>
 <translation id="1882897271359938046">Дублирование экрана в <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Скорость речи</translation>
 <translation id="6099678161144790572">Изменено за последний месяц</translation>
 <translation id="6103838137565245112">система</translation>
+<translation id="6107292179555508368">На этом устройстве запрещен доступ к камере и микрофону</translation>
 <translation id="6114505516289286752">Скачаны файлы распознавания речи для языка: <ph name="LANGUAGE" /></translation>
 <translation id="6116825164611323644">Доступ к камере отключен на этом устройстве</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" />.</translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Выберите нужное с помощью стилуса</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: выполняется активация...</translation>
 <translation id="6274202259872570803">Скринкаст</translation>
+<translation id="6282694724099204652">Разрешите доступ, чтобы приложения и веб-страницы могли использовать микрофоны и камеры на этом устройстве.</translation>
 <translation id="6283712521836204486">Режим "Не беспокоить" отключен</translation>
 <translation id="6284232397434400372">Разрешение изменено</translation>
 <translation id="6288235558961782912">Аккаунт <ph name="USER_EMAIL_ADDRESS" /> можно будет добавить снова с разрешения одного из родителей.</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index 6c42324..ed236d28 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">යාවත්කාලීන කර වරන්න</translation>
 <translation id="1864454756846565995">USB-C උපාංගය (පසුපස තොට)</translation>
 <translation id="1869497990620230175">ඉක්මන් ගොනු</translation>
+<translation id="1871703283152909317">ප්‍රවේශ දෙකම ක්‍රියාත්මක කරන්න</translation>
 <translation id="1879018240766558464">අප්‍රසිද්ධ කවුළු දැනට සහාය නොදක්වයි. වෙනත් යෙදුම් සුරකිනු ඇත.</translation>
 <translation id="1882814835921407042">ජංගම ජාලයක් නැත</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> වෙත කැඩපත් කරයි</translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">කථන ශීඝ්‍රතාව</translation>
 <translation id="6099678161144790572">පසුගිය මාසයේ සංස්කරණය කරන ලදී</translation>
 <translation id="6103838137565245112">පද්ධතිය</translation>
+<translation id="6107292179555508368">මෙම උපාංගයෙහි මයික්‍රෆෝන සහ කැමරා ප්‍රවේශ ක්‍රියා විරහිතයි</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> කථන ගොනු බාගන්නා ලදී</translation>
 <translation id="6116825164611323644">මෙම උපාංගයෙහි කැමරා ප්‍රවේශය ක්‍රියා විරහිතයි</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">තෝරා ගැනීමට ඔබේ පන්හිඳ භාවිත කරන්න</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: සක්‍රීය කරමින්...</translation>
 <translation id="6274202259872570803">තිරසටහන</translation>
+<translation id="6282694724099204652">මෙම උපාංගයෙහි මයික්‍රෆෝනය(න්) සහ කැමරාව(න්) භාවිතා කිරීමට අවසර ඇති යෙදුම් සහ වෙබ් පිටුවලට ඉඩ දීමට ප්‍රවේශයන් ක්‍රියාත්මක කරන්න.</translation>
 <translation id="6283712521836204486">'බාධා නොකරන්න' අක්‍රියයි.</translation>
 <translation id="6284232397434400372">විභේදනය වෙනස් විය</translation>
 <translation id="6288235558961782912">මාපියෙකුගේ අවසරය සමඟ පසුව <ph name="USER_EMAIL_ADDRESS" /> එක් කළ හැක.</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 46959d48..df05f94 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Posodobi in odjavi</translation>
 <translation id="1864454756846565995">Naprava USB-C (vrata zadaj)</translation>
 <translation id="1869497990620230175">Hitre datoteke</translation>
+<translation id="1871703283152909317">Vklopi oba dostopa</translation>
 <translation id="1879018240766558464">Anonimna okna trenutno niso podprta. Druge aplikacije bodo shranjene.</translation>
 <translation id="1882814835921407042">Ni mobilnih omrežij</translation>
 <translation id="1882897271359938046">Zrcaljenje na <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Hitrost govora</translation>
 <translation id="6099678161144790572">Urejeno v preteklem mesecu</translation>
 <translation id="6103838137565245112">sistem</translation>
+<translation id="6107292179555508368">Dostop do mikrofona in kamere je izklopljen v tej napravi</translation>
 <translation id="6114505516289286752">Datoteke za govor v jeziku <ph name="LANGUAGE" /> so bile prenesene</translation>
 <translation id="6116825164611323644">Dostop do kamere je izklopljen v tej napravi</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" />.</translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Uporabite pisalo za izbiranje</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Aktiviranje ...</translation>
 <translation id="6274202259872570803">Snemanje zaslona</translation>
+<translation id="6282694724099204652">Omogočite dostop, če želite aplikacijam in spletnim stranem, ki imajo dovoljenje, dovoliti uporabo mikrofonov in kamer v tej napravi.</translation>
 <translation id="6283712521836204486">Način »ne moti« je izklopljen.</translation>
 <translation id="6284232397434400372">Ločljivost je bila spremenjena</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> lahko dodate pozneje z dovoljenjem starša.</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index caada50..8133168 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Ažuriraj i odjavi me</translation>
 <translation id="1864454756846565995">Uređaj sa USB priključkom tipa C (zadnji port)</translation>
 <translation id="1869497990620230175">Brz pristup fajlovima</translation>
+<translation id="1871703283152909317">Uključi oba pristupa</translation>
 <translation id="1879018240766558464">Prozori bez arhiviranja trenutno nisu podržani. Druge aplikacije će biti sačuvane.</translation>
 <translation id="1882814835921407042">Nema mobilne mreže</translation>
 <translation id="1882897271359938046">Preslikavanje u <ph name="DISPLAY_NAME" /></translation>
@@ -925,6 +926,7 @@
 <translation id="6095008505822982596">Brzina govora</translation>
 <translation id="6099678161144790572">Izmenjeno proteklog meseca</translation>
 <translation id="6103838137565245112">sistem</translation>
+<translation id="6107292179555508368">Pristup mikrofonu i kameri je isključen na ovom uređaju</translation>
 <translation id="6114505516289286752">Preuzeti su fajlovi sa govorom na jeziku <ph name="LANGUAGE" /></translation>
 <translation id="6116825164611323644">Pristup kameri je isključen na ovom uređaju</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -953,6 +955,7 @@
 <translation id="6259254695169772643">Izaberite pomoću pisaljke</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Aktiviranje...</translation>
 <translation id="6274202259872570803">Video snimak ekrana</translation>
+<translation id="6282694724099204652">Uključite pristup da biste omogućili aplikacijama i veb-stranicama sa dozvolom da koriste mikrofone i kamere na ovom uređaju.</translation>
 <translation id="6283712521836204486">Režim Ne uznemiravaj je isključen.</translation>
 <translation id="6284232397434400372">Rezolucija je promenjena</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> može ponovo da se doda kasnije uz dozvolu roditelja.</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 04be243..65f045e 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Ажурирај и одјави ме</translation>
 <translation id="1864454756846565995">Уређај са USB прикључком типа C (задњи порт)</translation>
 <translation id="1869497990620230175">Брз приступ фајловима</translation>
+<translation id="1871703283152909317">Укључи оба приступа</translation>
 <translation id="1879018240766558464">Прозори без архивирања тренутно нису подржани. Друге апликације ће бити сачуване.</translation>
 <translation id="1882814835921407042">Нема мобилне мреже</translation>
 <translation id="1882897271359938046">Пресликавање у <ph name="DISPLAY_NAME" /></translation>
@@ -925,6 +926,7 @@
 <translation id="6095008505822982596">Брзина говора</translation>
 <translation id="6099678161144790572">Измењено протеклог месеца</translation>
 <translation id="6103838137565245112">систем</translation>
+<translation id="6107292179555508368">Приступ микрофону и камери је искључен на овом уређају</translation>
 <translation id="6114505516289286752">Преузети су фајлови са говором на језику <ph name="LANGUAGE" /></translation>
 <translation id="6116825164611323644">Приступ камери је искључен на овом уређају</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -953,6 +955,7 @@
 <translation id="6259254695169772643">Изаберите помоћу писаљке</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Активирање...</translation>
 <translation id="6274202259872570803">Видео снимак екрана</translation>
+<translation id="6282694724099204652">Укључите приступ да бисте омогућили апликацијама и веб-страницама са дозволом да користе микрофоне и камере на овом уређају.</translation>
 <translation id="6283712521836204486">Режим Не узнемиравај је искључен.</translation>
 <translation id="6284232397434400372">Резолуција је промењена</translation>
 <translation id="6288235558961782912"><ph name="USER_EMAIL_ADDRESS" /> може поново да се дода касније уз дозволу родитеља.</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index 96e604ba..660b6e27 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">اپ ڈیٹ کریں اور سائن آؤٹ کریں</translation>
 <translation id="1864454756846565995">‏USB-C آلہ (پیچھے کا پورٹ)</translation>
 <translation id="1869497990620230175">فوری فائلز</translation>
+<translation id="1871703283152909317">دونوں رسائیاں آن کریں</translation>
 <translation id="1879018240766558464">پوشیدگی ونڈوز فی الحال تعاون یافتہ نہیں ہیں۔ دیگر ایپس کو محفوظ کیا جائے گا۔</translation>
 <translation id="1882814835921407042">کوئی موبائل نیٹ ورک نہیں ہے</translation>
 <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> میں معکوس سازی</translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">اسپیچ کی شرح</translation>
 <translation id="6099678161144790572">گزشتہ مہینے میں ترمیم کی</translation>
 <translation id="6103838137565245112">سسٹم</translation>
+<translation id="6107292179555508368">اس آلہ پر مائیکروفون اور کیمرا تک رسائی آف ہے</translation>
 <translation id="6114505516289286752"><ph name="LANGUAGE" /> کی اسپیچ فائلز ڈاؤن لوڈ ہو گئی</translation>
 <translation id="6116825164611323644">اس آلہ پر کیمرے تک رسائی بند ہے</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />۔ <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">منتخب کرنے کے لئے اپنا اسٹائلس استعمال کریں</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: فعال کیا جا رہا ہے…</translation>
 <translation id="6274202259872570803">اسکرین کاسٹ</translation>
+<translation id="6282694724099204652">اس آلہ پر مائیکروفون(مائیکروفونز) اور کیمرا(کیمرے) استعمال کرنے کی اجازت کے ساتھ ایپس اور ویب صفحات کو اجازت دینے کے لیے رسائیوں کو آن کریں۔</translation>
 <translation id="6283712521836204486">ڈسٹرب نہ کریں آف ہے۔</translation>
 <translation id="6284232397434400372">ریزولیوشن تبدیل ہو گئی</translation>
 <translation id="6288235558961782912">والد/والدہ کی اجازت سے <ph name="USER_EMAIL_ADDRESS" /> بعد میں دوبارہ شامل کیا جا سکتا ہے۔</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index ea5dc58..ff2d7c2 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -175,6 +175,7 @@
 <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="1869497990620230175">Tệp nhanh</translation>
+<translation id="1871703283152909317">Bật cả hai quyền truy cập</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>
 <translation id="1882897271359938046">Đang phản chiếu tới <ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Tốc độ đọc</translation>
 <translation id="6099678161144790572">Chỉnh sửa tháng trước</translation>
 <translation id="6103838137565245112">hệ thống</translation>
+<translation id="6107292179555508368">Quyền truy cập vào micrô và máy ảnh trên thiết bị này đều đang tắt</translation>
 <translation id="6114505516289286752">Đã tải tệp mã chuyển lời nói thành văn bản <ph name="LANGUAGE" /> xuống</translation>
 <translation id="6116825164611323644">Quyền truy cập vào máy ảnh đang tắt trên thiết bị này</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Sử dụng bút cảm ứng để chọn</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Đang kích hoạt...</translation>
 <translation id="6274202259872570803">Video ghi lại chuyển động trên màn hình</translation>
+<translation id="6282694724099204652">Bật cả hai quyền truy cập để cho phép ứng dụng và trang web có quyền này sử dụng (các) micrô và máy ảnh trên thiết bị này.</translation>
 <translation id="6283712521836204486">Chế độ Không làm phiền đang tắt.</translation>
 <translation id="6284232397434400372">Đã thay đổi độ phân giải</translation>
 <translation id="6288235558961782912">Bạn có thể thêm <ph name="USER_EMAIL_ADDRESS" /> lại sau nếu cha mẹ cho phép.</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index 82555be3..20f53dc0 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -924,7 +924,7 @@
 <translation id="6095008505822982596">語速</translation>
 <translation id="6099678161144790572">上個月編輯過</translation>
 <translation id="6103838137565245112">系統</translation>
-<translation id="6107292179555508368">這部裝置已停用麥克風和相機的存取權</translation>
+<translation id="6107292179555508368">此裝置已停用麥克風和相機的存取權</translation>
 <translation id="6114505516289286752">已下載<ph name="LANGUAGE" />語音檔案</translation>
 <translation id="6116825164611323644">此裝置的相機存取權已關閉</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />。<ph name="BATTERY_SAVER_STATE" /></translation>
@@ -953,7 +953,7 @@
 <translation id="6259254695169772643">使用觸控筆選擇</translation>
 <translation id="6267036997247669271"><ph name="NAME" />:正在啟用…</translation>
 <translation id="6274202259872570803">螢幕截圖</translation>
-<translation id="6282694724099204652">啟用這兩項存取權,允許具有權限的應用程式和網頁使用這部裝置的麥克風和相機。</translation>
+<translation id="6282694724099204652">啟用這兩項存取權,允許具有權限的應用程式和網頁使用此裝置的麥克風和相機。</translation>
 <translation id="6283712521836204486">「請勿騷擾」已關閉。</translation>
 <translation id="6284232397434400372">解像度已變更</translation>
 <translation id="6288235558961782912">您可稍後在家長許可下重新新增 <ph name="USER_EMAIL_ADDRESS" />。</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb
index 3f8a3e7..423d30da0 100644
--- a/ash/strings/ash_strings_zu.xtb
+++ b/ash/strings/ash_strings_zu.xtb
@@ -175,6 +175,7 @@
 <translation id="1862380676329487333">Buyekeza bese uyaphuma ngemvume</translation>
 <translation id="1864454756846565995">Idivayisi ye-USB-C (imbobo esemuva)</translation>
 <translation id="1869497990620230175">Amafayela asheshayo</translation>
+<translation id="1871703283152909317">Vula kokubili ukufinyelela</translation>
 <translation id="1879018240766558464">Amawindi e-Incognito awasekelwa okwamanje. Amanye ama-app azolondolozwa.</translation>
 <translation id="1882814835921407042">Ayikho inethiwekhi yeselula</translation>
 <translation id="1882897271359938046">Yenza isibuko ku-<ph name="DISPLAY_NAME" /></translation>
@@ -924,6 +925,7 @@
 <translation id="6095008505822982596">Isilinganiso senkulumo</translation>
 <translation id="6099678161144790572">Kuhlelwe enyangeni edlule</translation>
 <translation id="6103838137565245112">isistimu</translation>
+<translation id="6107292179555508368">Ukufinyelela kwemakrofoni nekhamera kuvaliwe kule divayisi</translation>
 <translation id="6114505516289286752">Amafayela wenkulumo ye-<ph name="LANGUAGE" /> alandiwe</translation>
 <translation id="6116825164611323644">Ukufinyelela kwekhamera kuvaliwe kule divayisi</translation>
 <translation id="6119360623251949462"><ph name="CHARGING_STATE" />. <ph name="BATTERY_SAVER_STATE" /></translation>
@@ -952,6 +954,7 @@
 <translation id="6259254695169772643">Sebenzisa i-stylus yakho ukuze ukhethe</translation>
 <translation id="6267036997247669271"><ph name="NAME" />: Yenza kusebenze...</translation>
 <translation id="6274202259872570803">I-Screencast</translation>
+<translation id="6282694724099204652">Vula ukufinyelela ukuze uvumele ama-app namakhasi ewebhu nemvume yokusebenzisa amamakrofoni namakhamera kule divayisi.</translation>
 <translation id="6283712521836204486">Ungaphazamisi kuvaliwe.</translation>
 <translation id="6284232397434400372">Ukulungiswa kushintshiwe</translation>
 <translation id="6288235558961782912">I-<ph name="USER_EMAIL_ADDRESS" /> lingaphinde lifakwe kamuva ngemvume yomzali.</translation>
diff --git a/ash/system/accessibility/unified_accessibility_detailed_view_controller.cc b/ash/system/accessibility/unified_accessibility_detailed_view_controller.cc
index 6041b8d1..22bd4dd 100644
--- a/ash/system/accessibility/unified_accessibility_detailed_view_controller.cc
+++ b/ash/system/accessibility/unified_accessibility_detailed_view_controller.cc
@@ -26,10 +26,13 @@
   Shell::Get()->accessibility_controller()->RemoveObserver(this);
 }
 
-views::View* UnifiedAccessibilityDetailedViewController::CreateView() {
+std::unique_ptr<views::View>
+UnifiedAccessibilityDetailedViewController::CreateView() {
   DCHECK(!view_);
-  view_ = new AccessibilityDetailedView(detailed_view_delegate_.get());
-  return view_;
+  auto view = std::make_unique<AccessibilityDetailedView>(
+      detailed_view_delegate_.get());
+  view_ = view.get();
+  return view;
 }
 
 std::u16string UnifiedAccessibilityDetailedViewController::GetAccessibleName()
diff --git a/ash/system/accessibility/unified_accessibility_detailed_view_controller.h b/ash/system/accessibility/unified_accessibility_detailed_view_controller.h
index 9ac29193..dfe26dc1 100644
--- a/ash/system/accessibility/unified_accessibility_detailed_view_controller.h
+++ b/ash/system/accessibility/unified_accessibility_detailed_view_controller.h
@@ -31,8 +31,8 @@
 
   ~UnifiedAccessibilityDetailedViewController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
   // AccessibilityObserver:
diff --git a/ash/system/audio/unified_audio_detailed_view_controller.cc b/ash/system/audio/unified_audio_detailed_view_controller.cc
index 48a9fcc..4574157 100644
--- a/ash/system/audio/unified_audio_detailed_view_controller.cc
+++ b/ash/system/audio/unified_audio_detailed_view_controller.cc
@@ -4,7 +4,6 @@
 
 #include "ash/system/audio/unified_audio_detailed_view_controller.h"
 
-#include "ash/constants/ash_features.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/audio/audio_detailed_view.h"
 #include "ash/system/tray/detailed_view_delegate.h"
@@ -23,11 +22,13 @@
   CrasAudioHandler::Get()->RemoveAudioObserver(this);
 }
 
-views::View* UnifiedAudioDetailedViewController::CreateView() {
+std::unique_ptr<views::View> UnifiedAudioDetailedViewController::CreateView() {
   DCHECK(!view_);
-  view_ = new AudioDetailedView(detailed_view_delegate_.get());
+  auto view =
+      std::make_unique<AudioDetailedView>(detailed_view_delegate_.get());
+  view_ = view.get();
   view_->Update();
-  return view_;
+  return view;
 }
 
 std::u16string UnifiedAudioDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/audio/unified_audio_detailed_view_controller.h b/ash/system/audio/unified_audio_detailed_view_controller.h
index 5439022..11885c5 100644
--- a/ash/system/audio/unified_audio_detailed_view_controller.h
+++ b/ash/system/audio/unified_audio_detailed_view_controller.h
@@ -32,8 +32,8 @@
 
   ~UnifiedAudioDetailedViewController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
   // CrasAudioHandler::AudioObserver.
diff --git a/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc b/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc
index 84cbb74..d4b7ae27 100644
--- a/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc
+++ b/ash/system/audio/unified_audio_detailed_view_controller_unittest.cc
@@ -178,7 +178,7 @@
   AudioDetailedView* audio_detailed_view() {
     if (!audio_detailed_view_) {
       audio_detailed_view_ = base::WrapUnique(static_cast<AudioDetailedView*>(
-          audio_detailed_view_controller_->CreateView()));
+          audio_detailed_view_controller_->CreateView().release()));
     }
     return audio_detailed_view_.get();
   }
@@ -208,7 +208,7 @@
 
 TEST_F(UnifiedAudioDetailedViewControllerTest, OnlyOneVisibleSlider) {
   std::unique_ptr<views::View> view =
-      base::WrapUnique(audio_detailed_view_controller_->CreateView());
+      audio_detailed_view_controller_->CreateView();
   fake_cras_audio_client()->SetAudioNodesAndNotifyObserversForTesting(
       GenerateAudioNodeList({kInternalMic, kMicJack}));
 
@@ -239,7 +239,7 @@
   EXPECT_TRUE(cras_audio_handler_->HasDualInternalMic());
 
   std::unique_ptr<views::View> view =
-      base::WrapUnique(audio_detailed_view_controller_->CreateView());
+      audio_detailed_view_controller_->CreateView();
 
   // Verify there is only 1 slider in the view.
   EXPECT_EQ(sliders_map_.size(), 1u);
@@ -259,7 +259,7 @@
       CrasAudioHandler::ACTIVATE_BY_USER);
 
   std::unique_ptr<views::View> view =
-      base::WrapUnique(audio_detailed_view_controller_->CreateView());
+      audio_detailed_view_controller_->CreateView();
   EXPECT_EQ(0u, toggles_map_.size());
 }
 
@@ -275,7 +275,7 @@
                                       CrasAudioHandler::ACTIVATE_BY_USER);
 
   std::unique_ptr<views::View> view =
-      base::WrapUnique(audio_detailed_view_controller_->CreateView());
+      audio_detailed_view_controller_->CreateView();
   EXPECT_EQ(1u, toggles_map_.size());
 
   views::ToggleButton* toggle =
@@ -297,7 +297,7 @@
                                       CrasAudioHandler::ACTIVATE_BY_USER);
 
   std::unique_ptr<views::View> view =
-      base::WrapUnique(audio_detailed_view_controller_->CreateView());
+      audio_detailed_view_controller_->CreateView();
   EXPECT_EQ(1u, toggles_map_.size());
 
   views::ToggleButton* toggle =
@@ -334,7 +334,7 @@
                                       true, CrasAudioHandler::ACTIVATE_BY_USER);
 
   std::unique_ptr<views::View> view =
-      base::WrapUnique(audio_detailed_view_controller_->CreateView());
+      audio_detailed_view_controller_->CreateView();
 
   EXPECT_EQ(0u, toggles_map_.size());
 
diff --git a/ash/system/bluetooth/bluetooth_detailed_view_controller.cc b/ash/system/bluetooth/bluetooth_detailed_view_controller.cc
index 22cc2654..43fda66c 100644
--- a/ash/system/bluetooth/bluetooth_detailed_view_controller.cc
+++ b/ash/system/bluetooth/bluetooth_detailed_view_controller.cc
@@ -13,6 +13,7 @@
 #include "ash/system/unified/unified_system_tray_controller.h"
 #include "base/check.h"
 #include "base/command_line.h"
+#include "base/memory/ptr_util.h"
 #include "build/chromeos_buildflags.h"
 #include "chromeos/ash/services/bluetooth_config/public/cpp/cros_bluetooth_config_util.h"
 #include "mojo/public/cpp/bindings/clone_traits.h"
@@ -48,7 +49,7 @@
 
 BluetoothDetailedViewController::~BluetoothDetailedViewController() = default;
 
-views::View* BluetoothDetailedViewController::CreateView() {
+std::unique_ptr<views::View> BluetoothDetailedViewController::CreateView() {
   DCHECK(!view_);
   std::unique_ptr<BluetoothDetailedView> bluetooth_detailed_view =
       BluetoothDetailedView::Factory::Create(detailed_view_delegate_.get(),
@@ -63,9 +64,8 @@
                                               previously_connected_devices_);
   }
 
-  // We are expected to return an unowned pointer that the caller is responsible
-  // for deleting.
-  return bluetooth_detailed_view.release()->GetAsView();
+  // `bluetooth_detailed_view` is not a views::View, so we must GetAsView().
+  return base::WrapUnique(bluetooth_detailed_view.release()->GetAsView());
 }
 
 std::u16string BluetoothDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/bluetooth/bluetooth_detailed_view_controller.h b/ash/system/bluetooth/bluetooth_detailed_view_controller.h
index 2e2ddb1..dd408a3 100644
--- a/ash/system/bluetooth/bluetooth_detailed_view_controller.h
+++ b/ash/system/bluetooth/bluetooth_detailed_view_controller.h
@@ -47,8 +47,8 @@
       std::vector<bluetooth_config::mojom::PairedBluetoothDevicePropertiesPtr>;
 
  private:
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
   // bluetooth_config::mojom::SystemPropertiesObserver:
diff --git a/ash/system/cast/unified_cast_detailed_view_controller.cc b/ash/system/cast/unified_cast_detailed_view_controller.cc
index 1437784..5d7aeb9 100644
--- a/ash/system/cast/unified_cast_detailed_view_controller.cc
+++ b/ash/system/cast/unified_cast_detailed_view_controller.cc
@@ -4,7 +4,6 @@
 
 #include "ash/system/cast/unified_cast_detailed_view_controller.h"
 
-#include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/cast/tray_cast.h"
 #include "ash/system/tray/detailed_view_delegate.h"
@@ -20,10 +19,11 @@
 UnifiedCastDetailedViewController::~UnifiedCastDetailedViewController() =
     default;
 
-views::View* UnifiedCastDetailedViewController::CreateView() {
+std::unique_ptr<views::View> UnifiedCastDetailedViewController::CreateView() {
   DCHECK(!view_);
-  view_ = new CastDetailedView(detailed_view_delegate_.get());
-  return view_;
+  auto view = std::make_unique<CastDetailedView>(detailed_view_delegate_.get());
+  view_ = view.get();
+  return view;
 }
 
 std::u16string UnifiedCastDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/cast/unified_cast_detailed_view_controller.h b/ash/system/cast/unified_cast_detailed_view_controller.h
index 6c9134d..2bb08cd 100644
--- a/ash/system/cast/unified_cast_detailed_view_controller.h
+++ b/ash/system/cast/unified_cast_detailed_view_controller.h
@@ -27,8 +27,8 @@
 
   ~UnifiedCastDetailedViewController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
   CastDetailedView* get_cast_detailed_view_for_testing() { return view_; }
diff --git a/ash/system/ime/unified_ime_detailed_view_controller.cc b/ash/system/ime/unified_ime_detailed_view_controller.cc
index dcbf812..82f5d87f 100644
--- a/ash/system/ime/unified_ime_detailed_view_controller.cc
+++ b/ash/system/ime/unified_ime_detailed_view_controller.cc
@@ -40,12 +40,13 @@
   Shell::Get()->accessibility_controller()->RemoveObserver(this);
 }
 
-views::View* UnifiedIMEDetailedViewController::CreateView() {
+std::unique_ptr<views::View> UnifiedIMEDetailedViewController::CreateView() {
   DCHECK(!view_);
-  view_ = new IMEDetailedView(detailed_view_delegate_.get(),
-                              Shell::Get()->ime_controller());
+  auto view = std::make_unique<IMEDetailedView>(detailed_view_delegate_.get(),
+                                                Shell::Get()->ime_controller());
+  view_ = view.get();
   view_->Init(ShouldShowKeyboardToggle(), GetSingleImeBehavior());
-  return view_;
+  return view;
 }
 
 std::u16string UnifiedIMEDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/ime/unified_ime_detailed_view_controller.h b/ash/system/ime/unified_ime_detailed_view_controller.h
index 58baac6..c00f0906 100644
--- a/ash/system/ime/unified_ime_detailed_view_controller.h
+++ b/ash/system/ime/unified_ime_detailed_view_controller.h
@@ -34,8 +34,8 @@
 
   ~UnifiedIMEDetailedViewController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
   // VirtualKeyboardObserver:
diff --git a/ash/system/locale/unified_locale_detailed_view_controller.cc b/ash/system/locale/unified_locale_detailed_view_controller.cc
index 3c9f95b9..c1b45681d 100644
--- a/ash/system/locale/unified_locale_detailed_view_controller.cc
+++ b/ash/system/locale/unified_locale_detailed_view_controller.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/locale/unified_locale_detailed_view_controller.h"
 
+#include <memory>
+
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/locale/locale_detailed_view.h"
 #include "ash/system/tray/detailed_view_delegate.h"
@@ -20,10 +22,12 @@
 UnifiedLocaleDetailedViewController::~UnifiedLocaleDetailedViewController() =
     default;
 
-views::View* UnifiedLocaleDetailedViewController::CreateView() {
+std::unique_ptr<views::View> UnifiedLocaleDetailedViewController::CreateView() {
   DCHECK(!view_);
-  view_ = new LocaleDetailedView(detailed_view_delegate_.get());
-  return view_;
+  auto view =
+      std::make_unique<LocaleDetailedView>(detailed_view_delegate_.get());
+  view_ = view.get();
+  return view;
 }
 
 std::u16string UnifiedLocaleDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/locale/unified_locale_detailed_view_controller.h b/ash/system/locale/unified_locale_detailed_view_controller.h
index c960876..d7ae9ad9 100644
--- a/ash/system/locale/unified_locale_detailed_view_controller.h
+++ b/ash/system/locale/unified_locale_detailed_view_controller.h
@@ -28,8 +28,8 @@
 
   ~UnifiedLocaleDetailedViewController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
  private:
diff --git a/ash/system/media/unified_media_controls_container_unittest.cc b/ash/system/media/unified_media_controls_container_unittest.cc
index 6921138..6dac4af 100644
--- a/ash/system/media/unified_media_controls_container_unittest.cc
+++ b/ash/system/media/unified_media_controls_container_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/media/unified_media_controls_container.h"
 
+#include <memory>
+
 #include "ash/system/media/media_tray.h"
 #include "ash/system/status_area_widget.h"
 #include "ash/system/status_area_widget_test_helper.h"
@@ -51,7 +53,7 @@
 
 TEST_F(UnifiedMediaControlsContainerTest, DoNotShowControlsWhenInDetailedView) {
   // Navigate to a dummy detailed view.
-  system_tray_view()->SetDetailedView(new views::View());
+  system_tray_view()->SetDetailedView(std::make_unique<views::View>());
 
   // Simulate media playing, container should still be hidden.
   system_tray_view()->ShowMediaControls();
diff --git a/ash/system/media/unified_media_controls_detailed_view_controller.cc b/ash/system/media/unified_media_controls_detailed_view_controller.cc
index 536f879..126efac 100644
--- a/ash/system/media/unified_media_controls_detailed_view_controller.cc
+++ b/ash/system/media/unified_media_controls_detailed_view_controller.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/media/unified_media_controls_detailed_view_controller.h"
 
+#include <memory>
+
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/style/ash_color_provider.h"
 #include "ash/system/media/media_notification_provider.h"
@@ -34,7 +36,8 @@
   MediaNotificationProvider::Get()->OnBubbleClosing();
 }
 
-views::View* UnifiedMediaControlsDetailedViewController::CreateView() {
+std::unique_ptr<views::View>
+UnifiedMediaControlsDetailedViewController::CreateView() {
   DCHECK(MediaNotificationProvider::Get());
 
   media_message_center::NotificationTheme theme;
@@ -55,7 +58,7 @@
       detailed_view_has_shown_);
   detailed_view_has_shown_ = true;
 
-  return new UnifiedMediaControlsDetailedView(
+  return std::make_unique<UnifiedMediaControlsDetailedView>(
       detailed_view_delegate_.get(),
       MediaNotificationProvider::Get()->GetMediaNotificationListView(
           kMenuSeparatorWidth));
diff --git a/ash/system/media/unified_media_controls_detailed_view_controller.h b/ash/system/media/unified_media_controls_detailed_view_controller.h
index e1ddb5d..95a084d 100644
--- a/ash/system/media/unified_media_controls_detailed_view_controller.h
+++ b/ash/system/media/unified_media_controls_detailed_view_controller.h
@@ -23,8 +23,8 @@
       UnifiedSystemTrayController* tray_controller);
   ~UnifiedMediaControlsDetailedViewController() override;
 
-  // DetailedViewController implementations.
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
  private:
diff --git a/ash/system/network/network_detailed_view_controller.cc b/ash/system/network/network_detailed_view_controller.cc
index 0f2222bd..7ac2a85 100644
--- a/ash/system/network/network_detailed_view_controller.cc
+++ b/ash/system/network/network_detailed_view_controller.cc
@@ -4,7 +4,10 @@
 
 #include "ash/system/network/network_detailed_view_controller.h"
 
+#include <memory>
+
 #include "ash/constants/ash_features.h"
+#include "ash/public/cpp/bluetooth_config_service.h"
 #include "ash/public/cpp/system_tray_client.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
@@ -16,6 +19,7 @@
 #include "ash/system/network/network_utils.h"
 #include "ash/system/network/tray_network_state_model.h"
 #include "ash/system/tray/detailed_view_delegate.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/user_metrics.h"
 #include "chromeos/ash/components/network/network_connect.h"
 #include "chromeos/services/network_config/public/cpp/cros_network_config_util.h"
@@ -133,7 +137,7 @@
 
 NetworkDetailedViewController::~NetworkDetailedViewController() = default;
 
-views::View* NetworkDetailedViewController::CreateView() {
+std::unique_ptr<views::View> NetworkDetailedViewController::CreateView() {
   DCHECK(!network_detailed_view_);
   std::unique_ptr<NetworkDetailedNetworkView> view =
       NetworkDetailedNetworkView::Factory::Create(detailed_view_delegate_.get(),
@@ -142,9 +146,8 @@
   network_list_view_controller_ =
       NetworkListViewController::Factory::Create(view.get());
 
-  // We are expected to return an unowned pointer that the caller is responsible
-  // for deleting.
-  return view.release()->GetAsView();
+  // `view` is not a views::View, so we must GetAsView().
+  return base::WrapUnique(view.release()->GetAsView());
 }
 
 std::u16string NetworkDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/network/network_detailed_view_controller.h b/ash/system/network/network_detailed_view_controller.h
index 61f43f6..d1e450d4 100644
--- a/ash/system/network/network_detailed_view_controller.h
+++ b/ash/system/network/network_detailed_view_controller.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "ash/ash_export.h"
-#include "ash/public/cpp/bluetooth_config_service.h"
 #include "ash/system/network/network_detailed_network_view.h"
 #include "ash/system/network/network_detailed_view.h"
 #include "ash/system/network/network_list_view_controller.h"
@@ -41,8 +40,8 @@
       const NetworkDetailedViewController&) = delete;
   ~NetworkDetailedViewController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
  private:
diff --git a/ash/system/network/unified_network_detailed_view_controller.cc b/ash/system/network/unified_network_detailed_view_controller.cc
index 6596f5d..8380dbb1 100644
--- a/ash/system/network/unified_network_detailed_view_controller.cc
+++ b/ash/system/network/unified_network_detailed_view_controller.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/network/unified_network_detailed_view_controller.h"
 
+#include <memory>
+
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
@@ -22,13 +24,15 @@
 UnifiedNetworkDetailedViewController::~UnifiedNetworkDetailedViewController() =
     default;
 
-views::View* UnifiedNetworkDetailedViewController::CreateView() {
+std::unique_ptr<views::View>
+UnifiedNetworkDetailedViewController::CreateView() {
   DCHECK(!view_);
-  view_ =
-      new NetworkListView(detailed_view_delegate_.get(),
-                          Shell::Get()->session_controller()->login_status());
+  auto view = std::make_unique<NetworkListView>(
+      detailed_view_delegate_.get(),
+      Shell::Get()->session_controller()->login_status());
+  view_ = view.get();
   view_->Init();
-  return view_;
+  return view;
 }
 
 std::u16string UnifiedNetworkDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/network/unified_network_detailed_view_controller.h b/ash/system/network/unified_network_detailed_view_controller.h
index 59e9c2b..87af57e 100644
--- a/ash/system/network/unified_network_detailed_view_controller.h
+++ b/ash/system/network/unified_network_detailed_view_controller.h
@@ -28,8 +28,8 @@
 
   ~UnifiedNetworkDetailedViewController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
  private:
diff --git a/ash/system/network/unified_vpn_detailed_view_controller.cc b/ash/system/network/unified_vpn_detailed_view_controller.cc
index 7b2447d..366aa18 100644
--- a/ash/system/network/unified_vpn_detailed_view_controller.cc
+++ b/ash/system/network/unified_vpn_detailed_view_controller.cc
@@ -4,6 +4,8 @@
 //
 #include "ash/system/network/unified_vpn_detailed_view_controller.h"
 
+#include <memory>
+
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
@@ -21,12 +23,14 @@
 
 UnifiedVPNDetailedViewController::~UnifiedVPNDetailedViewController() = default;
 
-views::View* UnifiedVPNDetailedViewController::CreateView() {
+std::unique_ptr<views::View> UnifiedVPNDetailedViewController::CreateView() {
   DCHECK(!view_);
-  view_ = new VPNListView(detailed_view_delegate_.get(),
-                          Shell::Get()->session_controller()->login_status());
+  auto view = std::make_unique<VPNListView>(
+      detailed_view_delegate_.get(),
+      Shell::Get()->session_controller()->login_status());
+  view_ = view.get();
   view_->Init();
-  return view_;
+  return view;
 }
 
 std::u16string UnifiedVPNDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/network/unified_vpn_detailed_view_controller.h b/ash/system/network/unified_vpn_detailed_view_controller.h
index c3b22ad..26bd76fe 100644
--- a/ash/system/network/unified_vpn_detailed_view_controller.h
+++ b/ash/system/network/unified_vpn_detailed_view_controller.h
@@ -28,8 +28,8 @@
 
   ~UnifiedVPNDetailedViewController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
  private:
diff --git a/ash/system/time/calendar_event_list_item_view_jelly.cc b/ash/system/time/calendar_event_list_item_view_jelly.cc
index 9d910d5..4b8b7d4 100644
--- a/ash/system/time/calendar_event_list_item_view_jelly.cc
+++ b/ash/system/time/calendar_event_list_item_view_jelly.cc
@@ -90,7 +90,8 @@
 // Creates and returns a label containing the event summary.
 views::Builder<views::Label> CreateSummaryLabel(
     const std::string& event_summary,
-    const std::u16string& tooltip_text) {
+    const std::u16string& tooltip_text,
+    const int& max_width) {
   return views::Builder<views::Label>(
              bubble_utils::CreateLabel(
                  bubble_utils::TypographyStyle::kButton1,
@@ -100,6 +101,9 @@
       .SetID(kSummaryLabelID)
       .SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT)
       .SetAutoColorReadabilityEnabled(false)
+      .SetMultiLine(true)
+      .SetMaxLines(1)
+      .SetMaximumWidth(max_width)
       .SetElideBehavior(gfx::ElideBehavior::ELIDE_TAIL)
       .SetSubpixelRenderingEnabled(false)
       .SetTextContext(CONTEXT_CALENDAR_DATE)
@@ -126,20 +130,21 @@
 
 CalendarEventListItemViewJelly::CalendarEventListItemViewJelly(
     CalendarViewController* calendar_view_controller,
+    SelectedDateParams selected_date_params,
     google_apis::calendar::CalendarEvent event,
     const bool round_top_corners,
-    const bool round_bottom_corners)
+    const bool round_bottom_corners,
+    const int max_width)
     : ActionableView(TrayPopupInkDropStyle::FILL_BOUNDS),
       calendar_view_controller_(calendar_view_controller),
+      selected_date_params_(selected_date_params),
       event_url_(event.html_link()) {
   SetLayoutManager(std::make_unique<views::FillLayout>());
 
-  DCHECK(calendar_view_controller_->selected_date().has_value());
-
   const auto [start_time, end_time] = calendar_utils::GetStartAndEndTime(
-      &event, calendar_view_controller->selected_date().value(),
-      calendar_view_controller->selected_date_midnight(),
-      calendar_view_controller->selected_date_midnight_utc());
+      &event, selected_date_params_.selected_date,
+      selected_date_params_.selected_date_midnight,
+      selected_date_params_.selected_date_midnight_utc);
   const auto [start_time_accessible_name, end_time_accessible_name] =
       event_date_formatter_util::GetStartAndEndTimeAccessibleNames(start_time,
                                                                    end_time);
@@ -169,8 +174,8 @@
   std::u16string formatted_time_text;
   if (calendar_utils::IsMultiDayEvent(&event) || event.all_day_event()) {
     formatted_time_text = event_date_formatter_util::GetMultiDayText(
-        &event, calendar_view_controller->selected_date_midnight(),
-        calendar_view_controller->selected_date_midnight_utc());
+        &event, selected_date_params_.selected_date_midnight,
+        selected_date_params_.selected_date_midnight_utc);
   } else {
     formatted_time_text =
         event_date_formatter_util::GetFormattedInterval(start_time, end_time);
@@ -188,7 +193,8 @@
               views::Builder<views::View>()
                   .SetLayoutManager(std::make_unique<views::BoxLayout>(
                       views::BoxLayout::Orientation::kVertical))
-                  .AddChild(CreateSummaryLabel(event.summary(), tooltip_text))
+                  .AddChild(CreateSummaryLabel(event.summary(), tooltip_text,
+                                               max_width))
                   .AddChild(CreateTimeLabel(formatted_time_text, tooltip_text)))
           .Build());
 }
@@ -209,10 +215,9 @@
 
   GURL finalized_url;
   bool opened_pwa = false;
-  DCHECK(calendar_view_controller_->selected_date().has_value());
   Shell::Get()->system_tray_model()->client()->ShowCalendarEvent(
-      event_url_, calendar_view_controller_->selected_date_midnight(),
-      opened_pwa, finalized_url);
+      event_url_, selected_date_params_.selected_date_midnight, opened_pwa,
+      finalized_url);
   return true;
 }
 
diff --git a/ash/system/time/calendar_event_list_item_view_jelly.h b/ash/system/time/calendar_event_list_item_view_jelly.h
index a13e379..c234e55 100644
--- a/ash/system/time/calendar_event_list_item_view_jelly.h
+++ b/ash/system/time/calendar_event_list_item_view_jelly.h
@@ -23,6 +23,12 @@
 
 class CalendarViewController;
 
+struct SelectedDateParams {
+  base::Time selected_date;
+  base::Time selected_date_midnight;
+  base::Time selected_date_midnight_utc;
+};
+
 // This view displays a jelly version of a calendar event entry.
 class ASH_EXPORT CalendarEventListItemViewJelly : public ActionableView {
  public:
@@ -30,9 +36,11 @@
 
   CalendarEventListItemViewJelly(
       CalendarViewController* calendar_view_controller,
+      SelectedDateParams selected_date_params,
       google_apis::calendar::CalendarEvent event,
       const bool round_top_corners,
-      const bool round_bottom_corners);
+      const bool round_bottom_corners,
+      const int max_width = 0);
   CalendarEventListItemViewJelly(const CalendarEventListItemViewJelly& other) =
       delete;
   CalendarEventListItemViewJelly& operator=(
@@ -51,6 +59,8 @@
   // Unowned.
   CalendarViewController* const calendar_view_controller_;
 
+  const SelectedDateParams selected_date_params_;
+
   // The URL for the meeting event.
   const GURL event_url_;
 };
diff --git a/ash/system/time/calendar_event_list_item_view_jelly_unittest.cc b/ash/system/time/calendar_event_list_item_view_jelly_unittest.cc
index 4ada6930..4820269 100644
--- a/ash/system/time/calendar_event_list_item_view_jelly_unittest.cc
+++ b/ash/system/time/calendar_event_list_item_view_jelly_unittest.cc
@@ -53,13 +53,18 @@
   void CreateEventListItemView(base::Time date,
                                google_apis::calendar::CalendarEvent* event,
                                bool round_top_corners = false,
-                               bool round_bottom_corners = false) {
+                               bool round_bottom_corners = false,
+                               int max_width = 0) {
     event_list_item_view_jelly_.reset();
     controller_->UpdateMonth(date);
     controller_->selected_date_ = date;
     event_list_item_view_jelly_ =
         std::make_unique<CalendarEventListItemViewJelly>(
-            controller_.get(), *event, round_top_corners, round_bottom_corners);
+            controller_.get(),
+            SelectedDateParams{controller_->selected_date().value(),
+                               controller_->selected_date_midnight(),
+                               controller_->selected_date_midnight_utc()},
+            *event, round_top_corners, round_bottom_corners, max_width);
   }
 
   void SetSelectedDateInController(base::Time date) {
@@ -167,4 +172,28 @@
             background_layer->rounded_corner_radii());
 }
 
+TEST_F(CalendarViewEventListItemViewJellyTest, MaxLabelWidth) {
+  base::Time date;
+  ASSERT_TRUE(base::Time::FromString("22 Nov 2021 00:00 UTC", &date));
+  SetSelectedDateInController(date);
+  const char* start_time_string = "22 Nov 2021 09:00 GMT";
+  const char* end_time_string = "22 Nov 2021 10:00 GMT";
+  const auto event = CreateEvent(start_time_string, end_time_string);
+
+  // If we don't set `max_width`, it should default to 0 (which the
+  // `views::Label`) will ignore).
+  CreateEventListItemView(date, event.get(), /*round_top_corners*/ true,
+                          /*round_bottom_corners*/ true);
+
+  EXPECT_EQ(GetSummaryLabel()->GetMaximumWidth(), 0);
+
+  // If we set a `max_width`, it should exist on the Summary Label.
+  const auto max_width = 200;
+  CreateEventListItemView(date, event.get(), /*round_top_corners*/ true,
+                          /*round_bottom_corners*/ true,
+                          /*max_width=*/max_width);
+
+  EXPECT_EQ(GetSummaryLabel()->GetMaximumWidth(), 200);
+}
+
 }  // namespace ash
diff --git a/ash/system/time/calendar_event_list_view.cc b/ash/system/time/calendar_event_list_view.cc
index dce29b05..e8cbe75 100644
--- a/ash/system/time/calendar_event_list_view.cc
+++ b/ash/system/time/calendar_event_list_view.cc
@@ -232,7 +232,12 @@
        ++it) {
     container->AddChildView(std::make_unique<CalendarEventListItemViewJelly>(
         /*calendar_view_controller=*/calendar_view_controller_,
-        /*event=*/*it,
+        /*selected_date_params=*/
+        SelectedDateParams{
+            calendar_view_controller_->selected_date().value(),
+            calendar_view_controller_->selected_date_midnight(),
+            calendar_view_controller_->selected_date_midnight_utc()}, /*event=*/
+        *it,
         /*round_top_corners=*/it == events.begin(),
         /*round_bottom_corners=*/it->id() == events.rbegin()->id()));
   }
diff --git a/ash/system/time/calendar_model.cc b/ash/system/time/calendar_model.cc
index 695dec7..81c1122 100644
--- a/ash/system/time/calendar_model.cc
+++ b/ash/system/time/calendar_model.cc
@@ -89,6 +89,45 @@
   });
 }
 
+bool EventStartsInTenMins(const CalendarEvent& event,
+                          const base::Time& now_local) {
+  const int start_time_difference_in_mins =
+      (ash::calendar_utils::GetStartTimeAdjusted(&event) - now_local)
+          .InMinutes();
+
+  return (0 <= start_time_difference_in_mins &&
+          start_time_difference_in_mins <= 10);
+}
+
+bool EventStartedLessThanOneHourAgo(const CalendarEvent& event,
+                                    const base::Time& now_local) {
+  const int start_time_difference_in_mins =
+      (ash::calendar_utils::GetStartTimeAdjusted(&event) - now_local)
+          .InMinutes();
+  const int end_time_difference_in_mins =
+      (ash::calendar_utils::GetEndTimeAdjusted(&event) - now_local).InMinutes();
+
+  return (0 <= end_time_difference_in_mins &&
+          0 > start_time_difference_in_mins &&
+          start_time_difference_in_mins >= -60);
+}
+
+// Returns events that start in 10 minutes time, or events that are in progress
+// and started less than one hour ago.
+auto FilterEventsStartingSoonOrRecentlyInProgress(
+    const ash::SingleDayEventList& list,
+    const base::Time& now_local) {
+  std::list<CalendarEvent> result;
+
+  for (const CalendarEvent& event : list) {
+    if (EventStartsInTenMins(event, now_local) ||
+        EventStartedLessThanOneHourAgo(event, now_local))
+      result.emplace_back(event);
+  }
+
+  return result;
+}
+
 }  // namespace
 
 namespace ash {
@@ -479,6 +518,12 @@
   return SplitEventsIntoMultiDayAndSameDay(FindEvents(day));
 }
 
+std::list<CalendarEvent> CalendarModel::FindUpcomingEvents(
+    base::Time now_local) const {
+  return FilterEventsStartingSoonOrRecentlyInProgress(FindEvents(now_local),
+                                                      now_local);
+}
+
 CalendarModel::FetchingStatus CalendarModel::FindFetchingStatus(
     base::Time start_time) const {
   if (!calendar_utils::ShouldFetchEvents())
diff --git a/ash/system/time/calendar_model.h b/ash/system/time/calendar_model.h
index b88ecf2f..f661d0d 100644
--- a/ash/system/time/calendar_model.h
+++ b/ash/system/time/calendar_model.h
@@ -121,6 +121,11 @@
   std::tuple<SingleDayEventList, SingleDayEventList>
   FindEventsSplitByMultiDayAndSameDay(base::Time day) const;
 
+  // Uses the `FindEvents` method to get events for that day and then filters
+  // the result into events that start or end in the next two hours.
+  std::list<google_apis::calendar::CalendarEvent> FindUpcomingEvents(
+      base::Time now_local) const;
+
   // Checks the `FetchingStatus` of a given start time.
   FetchingStatus FindFetchingStatus(base::Time start_time) const;
 
@@ -139,6 +144,8 @@
   friend class CalendarViewAnimationTest;
   friend class CalendarViewEventListViewTest;
   friend class CalendarViewTest;
+  friend class CalendarViewWithJellyEnabledTest;
+  friend class CalendarUpNextViewTest;
   friend class GlanceablesTest;
 
   // Checks if the event has allowed statuses and is eligible for insertion.
diff --git a/ash/system/time/calendar_model_unittest.cc b/ash/system/time/calendar_model_unittest.cc
index 46cb8b60..bbbcb58 100644
--- a/ash/system/time/calendar_model_unittest.cc
+++ b/ash/system/time/calendar_model_unittest.cc
@@ -1243,4 +1243,78 @@
   EXPECT_EQ(same_day_events.back().id(), kSameDayId);
 }
 
+TEST_F(CalendarModelTest, FindUpcomingEvents) {
+  // Set timezone and fake now.
+  const char* kNow = "10 Nov 2022 13:00 GMT";
+  ash::system::ScopedTimezoneSettings timezone_settings(u"GMT");
+  SetTodayFromStr(kNow);
+
+  const char* kSummary = "summary";
+  const char* kEventStartingInTenMinsId = "event_starting_in_ten_mins";
+  const char* kEventStartingInThirtyMinsId = "event_starting_in_thirty_mins";
+  const char* kEventStartingInTwoHoursId = "event_starting_in_two_hours";
+  const char* kEventInProgressStartedLessThanOneHourAgoId =
+      "event_in_progress_started_less_than_one_hour_ago";
+  const char* kEventInProgressStartedMoreThanOneHourAgoId =
+      "event_in_progress_started_more_than_one_hour_ago";
+  const char* kEventFinishedId = "event_finished";
+
+  auto event_starting_in_ten_mins = calendar_test_utils::CreateEvent(
+      kEventStartingInTenMinsId, kSummary, "10 Nov 2022 13:10 GMT",
+      "10 Nov 2022 15:00 GMT");
+  auto event_starting_in_thirty_mins = calendar_test_utils::CreateEvent(
+      kEventStartingInThirtyMinsId, kSummary, "10 Nov 2022 13:30 GMT",
+      "10 Nov 2022 15:00 GMT");
+  auto event_starting_in_two_hours = calendar_test_utils::CreateEvent(
+      kEventStartingInTwoHoursId, kSummary, "10 Nov 2022 15:00 GMT",
+      "10 Nov 2022 16:00 GMT");
+  auto event_in_progress_started_less_than_one_hour_ago =
+      calendar_test_utils::CreateEvent(
+          kEventInProgressStartedLessThanOneHourAgoId, kSummary,
+          "10 Nov 2022 12:01:00 GMT", "10 Nov 2022 17:00 GMT");
+  auto event_in_progress_started_more_than_one_hour_ago =
+      calendar_test_utils::CreateEvent(
+          kEventInProgressStartedMoreThanOneHourAgoId, kSummary,
+          "10 Nov 2022 11:00 GMT", "10 Nov 2022 17:00 GMT");
+  auto event_finished = calendar_test_utils::CreateEvent(
+      kEventFinishedId, kSummary, "10 Nov 2022 12:30 GMT",
+      "10 Nov 2022 12:59 GMT");
+
+  // Prepare mock events list.
+  std::unique_ptr<google_apis::calendar::EventList> event_list =
+      std::make_unique<google_apis::calendar::EventList>();
+  event_list->InjectItemForTesting(std::move(event_starting_in_ten_mins));
+  event_list->InjectItemForTesting(std::move(event_starting_in_thirty_mins));
+  event_list->InjectItemForTesting(std::move(event_starting_in_two_hours));
+  event_list->InjectItemForTesting(
+      std::move(event_in_progress_started_less_than_one_hour_ago));
+  event_list->InjectItemForTesting(
+      std::move(event_in_progress_started_more_than_one_hour_ago));
+  event_list->InjectItemForTesting(std::move(event_finished));
+
+  // Mock the events are fetched.
+  MockOnEventsFetched(calendar_utils::GetStartOfMonthUTC(
+                          calendar_test_utils::GetTimeFromString(kNow)),
+                      google_apis::ApiErrorCode::HTTP_SUCCESS,
+                      event_list.get());
+
+  auto events = calendar_model_->FindUpcomingEvents(now_);
+
+  auto event_list_contains = [](auto& event_list, auto& id) {
+    return base::Contains(event_list, id, &CalendarEvent::id);
+  };
+
+  // We should only get the 2 events back that start in 10 mins or were ongoing
+  // with < 60 mins passed.
+  EXPECT_EQ(events.size(), size_t(2));
+  EXPECT_TRUE(event_list_contains(events, kEventStartingInTenMinsId));
+  EXPECT_FALSE(event_list_contains(events, kEventStartingInThirtyMinsId));
+  EXPECT_FALSE(event_list_contains(events, kEventStartingInTwoHoursId));
+  EXPECT_TRUE(
+      event_list_contains(events, kEventInProgressStartedLessThanOneHourAgoId));
+  EXPECT_FALSE(
+      event_list_contains(events, kEventInProgressStartedMoreThanOneHourAgoId));
+  EXPECT_FALSE(event_list_contains(events, kEventFinishedId));
+}
+
 }  // namespace ash
diff --git a/ash/system/time/calendar_up_next_view.cc b/ash/system/time/calendar_up_next_view.cc
new file mode 100644
index 0000000..0ae4535
--- /dev/null
+++ b/ash/system/time/calendar_up_next_view.cc
@@ -0,0 +1,113 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/system/time/calendar_up_next_view.h"
+
+#include <memory>
+
+#include "ash/bubble/bubble_utils.h"
+#include "ash/strings/grit/ash_strings.h"
+#include "ash/system/time/calendar_event_list_item_view_jelly.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/metadata/metadata_impl_macros.h"
+#include "ui/chromeos/styles/cros_tokens_color_mappings.h"
+#include "ui/color/color_provider.h"
+#include "ui/views/background.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/controls/scroll_view.h"
+#include "ui/views/layout/box_layout.h"
+#include "ui/views/layout/flex_layout.h"
+#include "ui/views/metadata/view_factory_internal.h"
+
+namespace ash {
+namespace {
+
+constexpr int kContainerInsets = 12;
+constexpr int kBackgroundRadius = 12;
+constexpr int kBetweenChildSpacing = 8;
+constexpr int kMaxEventListItemWidth = 160;
+
+views::Builder<views::Label> CreateHeaderLabel() {
+  return views::Builder<views::Label>(bubble_utils::CreateLabel(
+      bubble_utils::TypographyStyle::kButton2,
+      l10n_util::GetStringUTF16(IDS_ASH_CALENDAR_UP_NEXT)));
+}
+
+}  // namespace
+
+CalendarUpNextView::CalendarUpNextView(
+    CalendarViewController* calendar_view_controller)
+    : calendar_view_controller_(calendar_view_controller),
+      header_view_(AddChildView(std::make_unique<views::View>())),
+      scroll_view_(AddChildView(std::make_unique<views::ScrollView>(
+          views::ScrollView::ScrollWithLayers::kEnabled))),
+      content_view_(
+          scroll_view_->SetContents(std::make_unique<views::View>())) {
+  SetLayoutManager(std::make_unique<views::BoxLayout>(
+      views::BoxLayout::Orientation::kVertical, gfx::Insets(kContainerInsets),
+      kBetweenChildSpacing));
+
+  header_view_->SetLayoutManager(std::make_unique<views::FlexLayout>());
+  header_view_->AddChildView(CreateHeaderLabel().Build());
+
+  scroll_view_->SetAllowKeyboardScrolling(false);
+  scroll_view_->SetBackgroundColor(absl::nullopt);
+  scroll_view_->SetDrawOverflowIndicator(false);
+  scroll_view_->SetHorizontalScrollBarMode(
+      views::ScrollView::ScrollBarMode::kHiddenButEnabled);
+  scroll_view_->SetTreatAllScrollEventsAsHorizontal(true);
+
+  content_view_->SetLayoutManager(std::make_unique<views::BoxLayout>(
+      views::BoxLayout::Orientation::kHorizontal, gfx::Insets(),
+      kBetweenChildSpacing));
+
+  UpdateEvents();
+}
+
+CalendarUpNextView::~CalendarUpNextView() = default;
+
+void CalendarUpNextView::Layout() {
+  // For some reason the `content_view_` is constrained to the `scroll_view_`
+  // width and so it isn't scrollable. This seems to be a problem with
+  // horizontal `ScrollView`s as this doesn't happen if you make this view
+  // vertically scrollable. To make the content scrollable, we need to set it's
+  // preferred size here so it's bigger than the `scroll_view_` and
+  // therefore scrolls.
+  if (content_view_)
+    content_view_->SizeToPreferredSize();
+
+  // `content_view_` is a child of this class so we need to Layout after
+  // changing its width.
+  views::View::Layout();
+}
+
+void CalendarUpNextView::OnThemeChanged() {
+  views::View::OnThemeChanged();
+  SetBackground(views::CreateRoundedRectBackground(
+      GetColorProvider()->GetColor(cros_tokens::kCrosSysSystemOnBase),
+      kBackgroundRadius));
+}
+
+void CalendarUpNextView::UpdateEvents() {
+  content_view_->RemoveAllChildViews();
+
+  std::list<google_apis::calendar::CalendarEvent> events =
+      calendar_view_controller_->UpcomingEvents();
+
+  auto now = base::Time::NowFromSystemTime();
+  for (auto& event : events) {
+    content_view_->AddChildView(
+        std::make_unique<CalendarEventListItemViewJelly>(
+            calendar_view_controller_,
+            SelectedDateParams{now, now.UTCMidnight(), now.LocalMidnight()},
+            /*event=*/event, /*round_top_corners=*/true,
+            /*round_bottom_corners=*/true,
+            /*max_width=*/kMaxEventListItemWidth));
+  }
+}
+
+BEGIN_METADATA(CalendarUpNextView, views::View);
+END_METADATA
+
+}  // namespace ash
diff --git a/ash/system/time/calendar_up_next_view.h b/ash/system/time/calendar_up_next_view.h
new file mode 100644
index 0000000..e228ce1
--- /dev/null
+++ b/ash/system/time/calendar_up_next_view.h
@@ -0,0 +1,48 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_SYSTEM_TIME_CALENDAR_UP_NEXT_VIEW_H_
+#define ASH_SYSTEM_TIME_CALENDAR_UP_NEXT_VIEW_H_
+
+#include "ash/ash_export.h"
+#include "ash/system/time/calendar_view_controller.h"
+#include "ui/views/view.h"
+
+namespace ash {
+
+// This view displays a scrollable list of `CalendarEventListItemView` for the
+// events that a user has coming up, either imminently or that are already in
+// progress but not yet finished.
+class ASH_EXPORT CalendarUpNextView : public views::View {
+ public:
+  METADATA_HEADER(CalendarUpNextView);
+
+  explicit CalendarUpNextView(CalendarViewController* calendar_view_controller);
+  CalendarUpNextView(const CalendarUpNextView& other) = delete;
+  CalendarUpNextView& operator=(const CalendarUpNextView& other) = delete;
+  ~CalendarUpNextView() override;
+
+  // views::View
+  void OnThemeChanged() override;
+  void Layout() override;
+
+ private:
+  friend class CalendarUpNextViewTest;
+
+  void UpdateEvents();
+
+  // Owned by `CalendarView`.
+  CalendarViewController* calendar_view_controller_;
+
+  // Owned by `CalendarUpNextView`.
+  views::View* const header_view_;
+  views::ScrollView* const scroll_view_;
+  // The content of the horizontal `scroll_view`, which carries a list of
+  // `CalendarEventListItemView`.
+  views::View* const content_view_;
+};
+
+}  // namespace ash
+
+#endif  // ASH_SYSTEM_TIME_CALENDAR_UP_NEXT_VIEW_H_
diff --git a/ash/system/time/calendar_up_next_view_unittest.cc b/ash/system/time/calendar_up_next_view_unittest.cc
new file mode 100644
index 0000000..9fd77f12
--- /dev/null
+++ b/ash/system/time/calendar_up_next_view_unittest.cc
@@ -0,0 +1,129 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/system/time/calendar_up_next_view.h"
+
+#include "ash/shell.h"
+#include "ash/system/model/system_tray_model.h"
+#include "ash/system/time/calendar_unittest_utils.h"
+#include "ash/system/time/calendar_view_controller.h"
+#include "ash/test/ash_test_base.h"
+#include "base/test/scoped_feature_list.h"
+#include "base/time/time.h"
+#include "ui/views/controls/label.h"
+
+namespace ash {
+
+namespace {
+
+std::unique_ptr<google_apis::calendar::CalendarEvent> CreateEvent(
+    const char* start_time,
+    const char* end_time,
+    bool all_day_event = false) {
+  return calendar_test_utils::CreateEvent(
+      "id_0", "summary_0", start_time, end_time,
+      google_apis::calendar::CalendarEvent::EventStatus::kConfirmed,
+      google_apis::calendar::CalendarEvent::ResponseStatus::kAccepted,
+      all_day_event);
+}
+
+std::unique_ptr<google_apis::calendar::EventList> CreateMockEventList(
+    std::list<std::unique_ptr<google_apis::calendar::CalendarEvent>>& events) {
+  auto event_list = std::make_unique<google_apis::calendar::EventList>();
+  event_list->set_time_zone("Greenwich Mean Time");
+
+  for (auto& event : events)
+    event_list->InjectItemForTesting(std::move(event));
+
+  return event_list;
+}
+
+}  // namespace
+
+class CalendarUpNextViewTest : public AshTestBase {
+ public:
+  CalendarUpNextViewTest() = default;
+  CalendarUpNextViewTest(const CalendarUpNextViewTest&) = delete;
+  CalendarUpNextViewTest& operator=(const CalendarUpNextViewTest&) = delete;
+  ~CalendarUpNextViewTest() override = default;
+
+  void SetUp() override {
+    AshTestBase::SetUp();
+    controller_ = std::make_unique<CalendarViewController>();
+  }
+
+  void TearDown() override {
+    up_next_view_.reset();
+    controller_.reset();
+    AshTestBase::TearDown();
+  }
+
+  void CreateUpNextView(
+      base::Time date,
+      std::list<std::unique_ptr<google_apis::calendar::CalendarEvent>>&
+          events) {
+    up_next_view_.reset();
+    Shell::Get()->system_tray_model()->calendar_model()->OnEventsFetched(
+        calendar_utils::GetStartOfMonthUTC(date),
+        google_apis::ApiErrorCode::HTTP_SUCCESS,
+        CreateMockEventList(events).get());
+    up_next_view_ = std::make_unique<CalendarUpNextView>(controller_.get());
+  }
+
+  const views::Label* GetHeaderLabel() {
+    return static_cast<views::Label*>(
+        up_next_view_->header_view_->children()[0]);
+  }
+
+  const views::View* GetContentsView() {
+    return static_cast<views::View*>(up_next_view_->content_view_);
+  }
+
+  static base::Time FakeTimeNow() { return fake_time_; }
+  static void SetFakeNow(base::Time fake_now) { fake_time_ = fake_now; }
+
+  CalendarViewController* controller() { return controller_.get(); }
+
+  CalendarUpNextView* up_next_view() { return up_next_view_.get(); }
+
+ private:
+  std::unique_ptr<CalendarUpNextView> up_next_view_;
+  std::unique_ptr<CalendarViewController> controller_;
+  base::test::ScopedFeatureList features_;
+  static base::Time fake_time_;
+};
+
+base::Time CalendarUpNextViewTest::fake_time_;
+
+TEST_F(CalendarUpNextViewTest,
+       GivenUpcomingEvents_WhenUpNextViewIsCreated_ThenShowEvents) {
+  base::Time date;
+  ASSERT_TRUE(base::Time::FromString("22 Nov 2021 09:00 GMT", &date));
+
+  // Set time override.
+  SetFakeNow(date);
+  base::subtle::ScopedTimeClockOverrides time_override(
+      &CalendarUpNextViewTest::FakeTimeNow, /*time_ticks_override=*/nullptr,
+      /*thread_ticks_override=*/nullptr);
+
+  // Event starts in 10 mins.
+  const char* event_in_ten_mins_start_time_string = "22 Nov 2021 09:10 GMT";
+  const char* event_in_ten_mins_end_time_string = "22 Nov 2021 10:00 GMT";
+  // Event in progress.
+  const char* event_in_progress_start_time_string = "22 Nov 2021 08:30 GMT";
+  const char* event_in_progress_end_time_string = "22 Nov 2021 09:30 GMT";
+
+  std::list<std::unique_ptr<google_apis::calendar::CalendarEvent>> events;
+  events.emplace_back(CreateEvent(event_in_ten_mins_start_time_string,
+                                  event_in_ten_mins_end_time_string));
+  events.emplace_back(CreateEvent(event_in_progress_start_time_string,
+                                  event_in_progress_end_time_string));
+
+  CreateUpNextView(date, events);
+
+  EXPECT_EQ(GetHeaderLabel()->GetText(), u"Up next");
+  EXPECT_EQ(GetContentsView()->children().size(), size_t(2));
+}
+
+}  // namespace ash
diff --git a/ash/system/time/calendar_view.cc b/ash/system/time/calendar_view.cc
index e120e43..1532940 100644
--- a/ash/system/time/calendar_view.cc
+++ b/ash/system/time/calendar_view.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "ash/constants/ash_features.h"
 #include "ash/public/cpp/ash_typography.h"
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/strings/grit/ash_strings.h"
@@ -89,6 +90,9 @@
 // The cool-down time for enabling animation.
 constexpr base::TimeDelta kAnimationDisablingTimeout = base::Milliseconds(500);
 
+// Periodic time delay for checking upcoming events.
+constexpr base::TimeDelta kCheckUpcomingEventsDelay = base::Seconds(15);
+
 // The multiplier used to reduce velocity of flings on the calendar view.
 // Without this, CalendarView will scroll a few years per fast swipe.
 constexpr float kCalendarScrollFlingMultiplier = 0.25f;
@@ -371,6 +375,8 @@
                 calendar_view->set_should_months_animate(true);
               },
               base::Unretained(this))) {
+  auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
+      views::BoxLayout::Orientation::kVertical));
   SetFocusBehavior(FocusBehavior::ALWAYS);
 
   // Focusable nodes must have an accessible name and valid role.
@@ -443,6 +449,8 @@
 
   // Add scroll view.
   scroll_view_ = AddChildView(std::make_unique<views::ScrollView>());
+  // Flex the scrollview around any sibling views that are added or removed.
+  layout->SetFlexForView(scroll_view_, 1);
   scroll_view_->SetAllowKeyboardScrolling(false);
   scroll_view_->SetBackgroundColor(absl::nullopt);
   scroll_view_->ClipHeightTo(0, INT_MAX);
@@ -483,6 +491,11 @@
   scoped_view_observer_.AddObservation(scroll_view_);
   scoped_view_observer_.AddObservation(content_view_);
   scoped_view_observer_.AddObservation(this);
+
+  check_upcoming_events_timer_.Start(
+      FROM_HERE, kCheckUpcomingEventsDelay,
+      base::BindRepeating(&CalendarView::MaybeShowUpNextView,
+                          base::Unretained(this)));
 }
 
 CalendarView::~CalendarView() {
@@ -497,6 +510,8 @@
     RemoveChildViewT(event_list_view_);
     event_list_view_ = nullptr;
   }
+  check_upcoming_events_timer_.Stop();
+  RemoveUpNextView();
   content_view_->RemoveAllChildViews();
 }
 
@@ -712,17 +727,20 @@
   MaybeUpdateLoadingBarVisibility();
 }
 
-void CalendarView::MaybeUpdateLoadingBarVisibility() {
+bool CalendarView::EventsFetchComplete() {
   for (auto& it : on_screen_month_) {
-    // If there's an on-screen month that hasn't finished fetching or
-    // re-fetching, the loading bar should be visible.
+    // Return false if there's an on-screen month that hasn't finished fetching
+    // or re-fetching.
     if (it.second == CalendarModel::kFetching ||
         it.second == CalendarModel::kRefetching) {
-      ShowProgress(-1, true);
-      return;
+      return false;
     }
   }
-  ShowProgress(-1, false);
+  return true;
+}
+
+void CalendarView::MaybeUpdateLoadingBarVisibility() {
+  ShowProgress(-1, !EventsFetchComplete());
 }
 
 void CalendarView::FadeInCurrentMonth() {
@@ -995,6 +1013,11 @@
     on_screen_month_[start_time] = status;
 
   MaybeUpdateLoadingBarVisibility();
+
+  // Only show up next for events that are the same month as `base::Time::Now`.
+  if (start_time == calendar_utils::GetStartOfMonthUTC(
+                        base::Time::NowFromSystemTime().UTCMidnight()))
+    MaybeShowUpNextView();
 }
 
 void CalendarView::OnTimeout(const base::Time start_time) {
@@ -1799,6 +1822,30 @@
           kEventListViewVerticalPadding);
 }
 
+void CalendarView::MaybeShowUpNextView() {
+  if (features::IsCalendarJellyEnabled() && EventsFetchComplete() &&
+      !calendar_view_controller_->UpcomingEvents().empty()) {
+    if (up_next_view_)
+      return;
+
+    up_next_view_ = AddChildView(
+        std::make_unique<CalendarUpNextView>(calendar_view_controller_.get()));
+  } else {
+    RemoveUpNextView();
+  }
+}
+
+void CalendarView::RemoveUpNextView() {
+  if (up_next_view_) {
+    RemoveChildViewT(up_next_view_);
+    up_next_view_ = nullptr;
+    // If the up next view is deleted whilst the calendar is still open, e.g.
+    // time has passed and an event no longer meets 'upcoming' criteria, then
+    // the calendar view needs to relayout after removing the upnext view.
+    InvalidateLayout();
+  }
+}
+
 BEGIN_METADATA(CalendarView, views::View)
 END_METADATA
 
diff --git a/ash/system/time/calendar_view.h b/ash/system/time/calendar_view.h
index 3d812af7..e619f366 100644
--- a/ash/system/time/calendar_view.h
+++ b/ash/system/time/calendar_view.h
@@ -12,6 +12,7 @@
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/model/system_tray_model.h"
 #include "ash/system/time/calendar_model.h"
+#include "ash/system/time/calendar_up_next_view.h"
 #include "ash/system/time/calendar_view_controller.h"
 #include "ash/system/tray/tray_detailed_view.h"
 #include "ash/system/unified/unified_system_tray_controller.h"
@@ -231,6 +232,9 @@
   // Updates the on-screen month map with the current months on screen.
   void UpdateOnScreenMonthMap();
 
+  // Returns whether or not we've finished fetching CalendarEvents.
+  bool EventsFetchComplete();
+
   // Checks if all months in the visible window have finished fetching. If so,
   // stop showing the loading bar.
   void MaybeUpdateLoadingBarVisibility();
@@ -324,6 +328,12 @@
   // bounds.
   void SetEventListViewBounds();
 
+  // Conditionally displays the "Up next" view.
+  void MaybeShowUpNextView();
+
+  // Removes the "Up next" view.
+  void RemoveUpNextView();
+
   // Setters for animation flags.
   void set_should_header_animate(bool should_animate) {
     should_header_animate_ = should_animate;
@@ -362,6 +372,7 @@
   IconButton* up_button_ = nullptr;
   IconButton* down_button_ = nullptr;
   CalendarEventListView* event_list_view_ = nullptr;
+  CalendarUpNextView* up_next_view_ = nullptr;
   std::map<base::Time, CalendarModel::FetchingStatus> on_screen_month_;
   CalendarModel* calendar_model_ =
       Shell::Get()->system_tray_model()->calendar_model();
@@ -399,6 +410,9 @@
   base::RetainingOneShotTimer header_animation_restart_timer_;
   base::RetainingOneShotTimer months_animation_restart_timer_;
 
+  // Timer that checks upcoming events periodically.
+  base::RepeatingTimer check_upcoming_events_timer_;
+
   base::CallbackListSubscription on_contents_scrolled_subscription_;
   base::ScopedObservation<CalendarModel, CalendarModel::Observer>
       scoped_calendar_model_observer_{this};
diff --git a/ash/system/time/calendar_view_controller.cc b/ash/system/time/calendar_view_controller.cc
index 843c3db..1f6fc57c 100644
--- a/ash/system/time/calendar_view_controller.cc
+++ b/ash/system/time/calendar_view_controller.cc
@@ -158,6 +158,14 @@
           ApplyTimeDifference(selected_date_.value()));
 }
 
+SingleDayEventList CalendarViewController::UpcomingEvents() {
+  return Shell::Get()
+      ->system_tray_model()
+      ->calendar_model()
+      ->FindUpcomingEvents(
+          ApplyTimeDifference(base::Time::NowFromSystemTime()));
+}
+
 int CalendarViewController::GetEventNumber(base::Time date) {
   return Shell::Get()->system_tray_model()->calendar_model()->EventsNumberOfDay(
       ApplyTimeDifference(date),
diff --git a/ash/system/time/calendar_view_controller.h b/ash/system/time/calendar_view_controller.h
index 3093bcb7..642ded5 100644
--- a/ash/system/time/calendar_view_controller.h
+++ b/ash/system/time/calendar_view_controller.h
@@ -116,6 +116,9 @@
   std::tuple<SingleDayEventList, SingleDayEventList>
   SelectedDateEventsSplitByMultiDayAndSameDay();
 
+  // Returns upcoming events for the "Up next" view.
+  SingleDayEventList UpcomingEvents();
+
   // The calendar events number of the `date`.
   int GetEventNumber(base::Time date);
 
diff --git a/ash/system/time/calendar_view_unittest.cc b/ash/system/time/calendar_view_unittest.cc
index 0e348663..174c8aa 100644
--- a/ash/system/time/calendar_view_unittest.cc
+++ b/ash/system/time/calendar_view_unittest.cc
@@ -189,6 +189,8 @@
   }
   views::View* event_list_view() { return calendar_view_->event_list_view_; }
 
+  views::View* up_next_view() { return calendar_view_->up_next_view_; }
+
   void ScrollUpOneMonth() {
     calendar_view_->ScrollOneMonthAndAutoScroll(/*scroll_up=*/true);
   }
@@ -2142,4 +2144,144 @@
   EXPECT_EQ(current_date_cell_view, calendar_focus_manager()->GetFocusedView());
 }
 
+class CalendarViewWithJellyEnabledTest : public CalendarViewTest {
+ public:
+  CalendarViewWithJellyEnabledTest() = default;
+  CalendarViewWithJellyEnabledTest(const CalendarViewWithJellyEnabledTest&) =
+      delete;
+  CalendarViewWithJellyEnabledTest& operator=(
+      const CalendarViewWithJellyEnabledTest&) = delete;
+  ~CalendarViewWithJellyEnabledTest() override = default;
+
+  void SetUp() override {
+    scoped_feature_list_ = std::make_unique<base::test::ScopedFeatureList>();
+    scoped_feature_list_->InitWithFeatures(
+        {features::kCalendarView, features::kCalendarJelly}, {});
+    CalendarViewTest::SetUp();
+  }
+
+  // Assumes current time is "18 Nov 2021 10:00 GMT".
+  std::unique_ptr<google_apis::calendar::EventList>
+  CreateMockEventListWithEventStartTimeMoreThanTwoHoursAway() {
+    auto event_list = std::make_unique<google_apis::calendar::EventList>();
+    event_list->set_time_zone("Greenwich Mean Time");
+    event_list->InjectItemForTesting(calendar_test_utils::CreateEvent(
+        "id_0", "summary_0", "18 Nov 2021 12:30 GMT", "18 Nov 2021 13:30 GMT"));
+
+    return event_list;
+  }
+
+  // Assumes current time is "18 Nov 2021 10:00 GMT".
+  std::unique_ptr<google_apis::calendar::EventList>
+  CreateMockEventListWithEventStartTimeTenMinsAway() {
+    auto event_list = std::make_unique<google_apis::calendar::EventList>();
+    event_list->set_time_zone("Greenwich Mean Time");
+    event_list->InjectItemForTesting(calendar_test_utils::CreateEvent(
+        "id_0", "summary_0", "18 Nov 2021 10:10 GMT", "18 Nov 2021 13:30 GMT"));
+
+    return event_list;
+  }
+
+  void MockEventsFetched(
+      base::Time date,
+      std::unique_ptr<google_apis::calendar::EventList> event_list) {
+    Shell::Get()->system_tray_model()->calendar_model()->OnEventsFetched(
+        calendar_utils::GetStartOfMonthUTC(date),
+        google_apis::ApiErrorCode::HTTP_SUCCESS, event_list.get());
+  }
+
+ private:
+  std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_;
+};
+
+TEST_F(CalendarViewWithJellyEnabledTest,
+       GivenNoEvents_WhenCalendarViewOpens_ThenUpNextViewShouldNotBeShown) {
+  base::Time date;
+  ASSERT_TRUE(base::Time::FromString("7 Jun 2021 10:00 GMT", &date));
+  // Set time override.
+  SetFakeNow(date);
+  base::subtle::ScopedTimeClockOverrides time_override(
+      &CalendarViewTest::FakeTimeNow, /*time_ticks_override=*/nullptr,
+      /*thread_ticks_override=*/nullptr);
+  Shell::Get()->session_controller()->GetActivePrefService()->SetBoolean(
+      ash::prefs::kCalendarIntegrationEnabled, false);
+  CreateCalendarView();
+
+  // When we've just created the calendar view and not fetched any events, then
+  // up next shouldn't have been created.
+  bool is_showing_up_next_view = up_next_view();
+  EXPECT_FALSE(is_showing_up_next_view);
+}
+
+TEST_F(
+    CalendarViewWithJellyEnabledTest,
+    GivenEventsStartingMoreThanTwoHoursAway_WhenCalendarViewOpens_ThenUpNextViewShouldNotBeShown) {
+  base::Time date;
+  ASSERT_TRUE(base::Time::FromString("18 Nov 2021 10:00 GMT", &date));
+  // Set time override.
+  SetFakeNow(date);
+  base::subtle::ScopedTimeClockOverrides time_override(
+      &CalendarViewTest::FakeTimeNow, /*time_ticks_override=*/nullptr,
+      /*thread_ticks_override=*/nullptr);
+
+  CreateCalendarView();
+  MockEventsFetched(
+      calendar_utils::GetStartOfMonthUTC(date),
+      CreateMockEventListWithEventStartTimeMoreThanTwoHoursAway());
+
+  // When fetched events are more than two hours away, then up next shouldn't
+  // have been created.
+  bool is_showing_up_next_view = up_next_view();
+  EXPECT_FALSE(is_showing_up_next_view);
+}
+
+TEST_F(
+    CalendarViewWithJellyEnabledTest,
+    GivenEventsStartingTenMinsAway_WhenCalendarViewOpens_ThenUpNextViewShouldBeShown) {
+  base::Time date;
+  ASSERT_TRUE(base::Time::FromString("18 Nov 2021 10:00 GMT", &date));
+  // Set time override.
+  SetFakeNow(date);
+  base::subtle::ScopedTimeClockOverrides time_override(
+      &CalendarViewTest::FakeTimeNow, /*time_ticks_override=*/nullptr,
+      /*thread_ticks_override=*/nullptr);
+
+  CreateCalendarView();
+  MockEventsFetched(calendar_utils::GetStartOfMonthUTC(date),
+                    CreateMockEventListWithEventStartTimeTenMinsAway());
+
+  // When fetched events are in the next 10 mins, then up next should have been
+  // created.
+  bool is_showing_up_next_view = up_next_view();
+  EXPECT_TRUE(is_showing_up_next_view);
+}
+
+TEST_F(
+    CalendarViewWithJellyEnabledTest,
+    GivenUpNextIsShown_WhenNewEventsMoreThanTwoHoursAwayAreFetched_ThenUpNextViewShouldNotBeShown) {
+  base::Time date;
+  ASSERT_TRUE(base::Time::FromString("18 Nov 2021 10:00 GMT", &date));
+  // Set time override.
+  SetFakeNow(date);
+  base::subtle::ScopedTimeClockOverrides time_override(
+      &CalendarViewTest::FakeTimeNow, /*time_ticks_override=*/nullptr,
+      /*thread_ticks_override=*/nullptr);
+
+  CreateCalendarView();
+  MockEventsFetched(calendar_utils::GetStartOfMonthUTC(date),
+                    CreateMockEventListWithEventStartTimeTenMinsAway());
+
+  // When fetched events are in the next 10 mins, then up next should have been
+  // created.
+  EXPECT_TRUE(up_next_view());
+
+  MockEventsFetched(
+      calendar_utils::GetStartOfMonthUTC(date),
+      CreateMockEventListWithEventStartTimeMoreThanTwoHoursAway());
+
+  // When fetched events are now more than two hours away, then up next
+  // should have been destroyed.
+  EXPECT_FALSE(up_next_view());
+}
+
 }  // namespace ash
diff --git a/ash/system/time/unified_calendar_view_controller.cc b/ash/system/time/unified_calendar_view_controller.cc
index b4bca0b..d2c27ca0 100644
--- a/ash/system/time/unified_calendar_view_controller.cc
+++ b/ash/system/time/unified_calendar_view_controller.cc
@@ -4,13 +4,14 @@
 
 #include "ash/system/time/unified_calendar_view_controller.h"
 
+#include <memory>
+
 #include "ash/strings/grit/ash_strings.h"
+#include "ash/system/time/calendar_utils.h"
 #include "ash/system/time/calendar_view.h"
 #include "ash/system/tray/detailed_view_delegate.h"
-#include "base/i18n/time_formatting.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/time/time.h"
-#include "calendar_utils.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace ash {
@@ -23,13 +24,15 @@
 
 UnifiedCalendarViewController::~UnifiedCalendarViewController() = default;
 
-views::View* UnifiedCalendarViewController::CreateView() {
+std::unique_ptr<views::View> UnifiedCalendarViewController::CreateView() {
   DCHECK(!view_);
   const base::Time start_time = base::Time::Now();
-  view_ = new CalendarView(detailed_view_delegate_.get(), tray_controller_);
+  auto view = std::make_unique<CalendarView>(detailed_view_delegate_.get(),
+                                             tray_controller_);
   base::UmaHistogramTimes("Ash.CalendarView.ConstructionTime",
                           base::Time::Now() - start_time);
-  return view_;
+  view_ = view.get();
+  return view;
 }
 
 std::u16string UnifiedCalendarViewController::GetAccessibleName() const {
diff --git a/ash/system/time/unified_calendar_view_controller.h b/ash/system/time/unified_calendar_view_controller.h
index a1464fa..b7e3b65 100644
--- a/ash/system/time/unified_calendar_view_controller.h
+++ b/ash/system/time/unified_calendar_view_controller.h
@@ -27,7 +27,7 @@
   ~UnifiedCalendarViewController() override;
 
   // DetailedViewController:
-  views::View* CreateView() override;
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
  private:
diff --git a/ash/system/unified/detailed_view_controller.h b/ash/system/unified/detailed_view_controller.h
index 1b94d9a..5cab304 100644
--- a/ash/system/unified/detailed_view_controller.h
+++ b/ash/system/unified/detailed_view_controller.h
@@ -5,9 +5,9 @@
 #ifndef ASH_SYSTEM_UNIFIED_DETAILED_VIEW_CONTROLLER_H_
 #define ASH_SYSTEM_UNIFIED_DETAILED_VIEW_CONTROLLER_H_
 
+#include <memory>
 #include <string>
 
-
 namespace views {
 class View;
 }  // namespace views
@@ -23,7 +23,8 @@
 
   // Create the detailed view. The view will be owned by views hierarchy. The
   // view will be always deleted after the controller is destructed.
-  virtual views::View* CreateView() = 0;
+  virtual std::unique_ptr<views::View> CreateView() = 0;
+
   virtual std::u16string GetAccessibleName() const = 0;
 };
 
diff --git a/ash/system/unified/quick_settings_view.cc b/ash/system/unified/quick_settings_view.cc
index 77d2451..0900b4f 100644
--- a/ash/system/unified/quick_settings_view.cc
+++ b/ash/system/unified/quick_settings_view.cc
@@ -186,9 +186,10 @@
     PreferredSizeChanged();
 }
 
-void QuickSettingsView::SetDetailedView(views::View* detailed_view) {
+void QuickSettingsView::SetDetailedView(
+    std::unique_ptr<views::View> detailed_view) {
   detailed_view_container_->RemoveAllChildViews();
-  detailed_view_container_->AddChildView(detailed_view);
+  detailed_view_container_->AddChildView(std::move(detailed_view));
   system_tray_container_->SetVisible(false);
   detailed_view_container_->SetVisible(true);
 
diff --git a/ash/system/unified/quick_settings_view.h b/ash/system/unified/quick_settings_view.h
index cd5b5a06..694feff 100644
--- a/ash/system/unified/quick_settings_view.h
+++ b/ash/system/unified/quick_settings_view.h
@@ -5,6 +5,8 @@
 #ifndef ASH_SYSTEM_UNIFIED_QUICK_SETTINGS_VIEW_H_
 #define ASH_SYSTEM_UNIFIED_QUICK_SETTINGS_VIEW_H_
 
+#include <memory>
+
 #include "ash/ash_export.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
@@ -46,7 +48,7 @@
   void AddMediaControlsView(views::View* media_controls);
 
   // Hides the main view and shows the given `detailed_view`.
-  void SetDetailedView(views::View* detailed_view);
+  void SetDetailedView(std::unique_ptr<views::View> detailed_view);
 
   // Removes the detailed view set by SetDetailedView, and shows the main view.
   // It deletes `detailed_view` and children.
diff --git a/ash/system/unified/unified_notifier_settings_controller.cc b/ash/system/unified/unified_notifier_settings_controller.cc
index cd59290..6b4b102 100644
--- a/ash/system/unified/unified_notifier_settings_controller.cc
+++ b/ash/system/unified/unified_notifier_settings_controller.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/unified/unified_notifier_settings_controller.h"
 
+#include <memory>
+
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/message_center/notifier_settings_view.h"
 #include "ash/system/tray/detailed_view_delegate.h"
@@ -61,8 +63,9 @@
 UnifiedNotifierSettingsController::~UnifiedNotifierSettingsController() =
     default;
 
-views::View* UnifiedNotifierSettingsController::CreateView() {
-  return new UnifiedNotifierSettingsView(detailed_view_delegate_.get());
+std::unique_ptr<views::View> UnifiedNotifierSettingsController::CreateView() {
+  return std::make_unique<UnifiedNotifierSettingsView>(
+      detailed_view_delegate_.get());
 }
 
 std::u16string UnifiedNotifierSettingsController::GetAccessibleName() const {
diff --git a/ash/system/unified/unified_notifier_settings_controller.h b/ash/system/unified/unified_notifier_settings_controller.h
index fc2561a7..54957924 100644
--- a/ash/system/unified/unified_notifier_settings_controller.h
+++ b/ash/system/unified/unified_notifier_settings_controller.h
@@ -27,8 +27,8 @@
 
   ~UnifiedNotifierSettingsController() override;
 
-  // DetailedViewControllerBase:
-  views::View* CreateView() override;
+  // DetailedViewController:
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
  private:
diff --git a/ash/system/unified/unified_system_tray_view.cc b/ash/system/unified/unified_system_tray_view.cc
index 481a1a5..ec10f4a 100644
--- a/ash/system/unified/unified_system_tray_view.cc
+++ b/ash/system/unified/unified_system_tray_view.cc
@@ -284,15 +284,17 @@
     PreferredSizeChanged();
 }
 
-void UnifiedSystemTrayView::SetDetailedView(views::View* detailed_view) {
+void UnifiedSystemTrayView::SetDetailedView(
+    std::unique_ptr<views::View> detailed_view) {
   auto system_tray_size = system_tray_container_->GetPreferredSize();
   system_tray_container_->SetVisible(false);
 
   detailed_view_container_->RemoveAllChildViews();
-  detailed_view_container_->AddChildView(detailed_view);
+  views::View* view =
+      detailed_view_container_->AddChildView(std::move(detailed_view));
   detailed_view_container_->SetVisible(true);
   detailed_view_container_->SetPreferredSize(system_tray_size);
-  detailed_view->InvalidateLayout();
+  view->InvalidateLayout();
   Layout();
 }
 
diff --git a/ash/system/unified/unified_system_tray_view.h b/ash/system/unified/unified_system_tray_view.h
index 7d367ba..3f81237 100644
--- a/ash/system/unified/unified_system_tray_view.h
+++ b/ash/system/unified/unified_system_tray_view.h
@@ -5,6 +5,8 @@
 #ifndef ASH_SYSTEM_UNIFIED_UNIFIED_SYSTEM_TRAY_VIEW_H_
 #define ASH_SYSTEM_UNIFIED_UNIFIED_SYSTEM_TRAY_VIEW_H_
 
+#include <memory>
+
 #include "ash/ash_export.h"
 #include "ui/views/focus/focus_manager.h"
 #include "ui/views/view.h"
@@ -84,7 +86,7 @@
   void AddMediaControlsView(views::View* media_controls);
 
   // Hide the main view and show the given |detailed_view|.
-  void SetDetailedView(views::View* detailed_view);
+  void SetDetailedView(std::unique_ptr<views::View> detailed_view);
 
   // Remove the detailed view set by SetDetailedView, and show the main view.
   // It deletes |detailed_view| and children.
diff --git a/ash/system/unified/user_chooser_detailed_view_controller.cc b/ash/system/unified/user_chooser_detailed_view_controller.cc
index 03ed666..9a36d2e 100644
--- a/ash/system/unified/user_chooser_detailed_view_controller.cc
+++ b/ash/system/unified/user_chooser_detailed_view_controller.cc
@@ -4,6 +4,8 @@
 
 #include "ash/system/unified/user_chooser_detailed_view_controller.h"
 
+#include <memory>
+
 #include "ash/multi_profile_uma.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/shell.h"
@@ -73,8 +75,8 @@
   // ShowMultiProfileLogin may delete us.
 }
 
-views::View* UserChooserDetailedViewController::CreateView() {
-  return new UserChooserView(this);
+std::unique_ptr<views::View> UserChooserDetailedViewController::CreateView() {
+  return std::make_unique<UserChooserView>(this);
 }
 
 std::u16string UserChooserDetailedViewController::GetAccessibleName() const {
diff --git a/ash/system/unified/user_chooser_detailed_view_controller.h b/ash/system/unified/user_chooser_detailed_view_controller.h
index 3d8f64f..ddae76f5 100644
--- a/ash/system/unified/user_chooser_detailed_view_controller.h
+++ b/ash/system/unified/user_chooser_detailed_view_controller.h
@@ -40,7 +40,7 @@
   void HandleAddUserAction();
 
   // DetailedViewController:
-  views::View* CreateView() override;
+  std::unique_ptr<views::View> CreateView() override;
   std::u16string GetAccessibleName() const override;
 
  private:
diff --git a/ash/webui/common/resources/BUILD.gn b/ash/webui/common/resources/BUILD.gn
index 478ba09..95fcdab 100644
--- a/ash/webui/common/resources/BUILD.gn
+++ b/ash/webui/common/resources/BUILD.gn
@@ -132,6 +132,7 @@
   "network_health/mojo_interface_provider.js",
   "network_health/network_diagnostics_types.js",
   "parse_html_subset.js",
+  "promise_resolver.js",
   "post_message_api/post_message_api_client.js",
   "post_message_api/post_message_api_request_handler.js",
   "post_message_api/post_message_api_server.js",
@@ -330,6 +331,7 @@
 
   "page_toolbar.d.ts",
   "parse_html_subset.d.ts",
+  "promise_resolver.d.ts",
   "navigation_view_panel.d.ts",
   "navigation_selector.d.ts",
   "web_ui_listener_behavior.d.ts",
@@ -431,6 +433,7 @@
     ":navigation_view_panel",
     ":page_toolbar",
     ":parse_html_subset",
+    ":promise_resolver",
     ":webui_resource_test",
   ]
 }
@@ -551,6 +554,10 @@
 js_library("parse_html_subset") {
 }
 
+js_library("promise_resolver") {
+  deps = [ "//ui/webui/resources/js:assert" ]
+}
+
 js_library("web_ui_listener_behavior") {
   deps = [ "//ui/webui/resources/js:cr.m" ]
 }
diff --git a/ash/webui/common/resources/fake_method_resolver.js b/ash/webui/common/resources/fake_method_resolver.js
index 07279f7b..da23f67 100644
--- a/ash/webui/common/resources/fake_method_resolver.js
+++ b/ash/webui/common/resources/fake_method_resolver.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {assert} from 'chrome://resources/js/assert.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from './promise_resolver.js';
 
 /**
  * @fileoverview
diff --git a/ui/webui/resources/js/promise_resolver.d.ts b/ash/webui/common/resources/promise_resolver.d.ts
similarity index 100%
rename from ui/webui/resources/js/promise_resolver.d.ts
rename to ash/webui/common/resources/promise_resolver.d.ts
diff --git a/ui/webui/resources/js/promise_resolver.js b/ash/webui/common/resources/promise_resolver.js
similarity index 88%
rename from ui/webui/resources/js/promise_resolver.js
rename to ash/webui/common/resources/promise_resolver.js
index 8554435..28ae56f 100644
--- a/ui/webui/resources/js/promise_resolver.js
+++ b/ash/webui/common/resources/promise_resolver.js
@@ -2,7 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {assertNotReached} from './assert.js';
+// This file is deprecated in favor of
+// ui/webui/resources/js/promise_resolver.ts, and is maintained only for
+// legacy Closure Compiler users.
+
+import {assertNotReached} from 'chrome://resources/js/assert.js';
 
 /**
  * @fileoverview PromiseResolver is a helper class that allows creating a
diff --git a/ash/webui/firmware_update_ui/resources/BUILD.gn b/ash/webui/firmware_update_ui/resources/BUILD.gn
index 64fe133..25d1dab 100644
--- a/ash/webui/firmware_update_ui/resources/BUILD.gn
+++ b/ash/webui/firmware_update_ui/resources/BUILD.gn
@@ -82,8 +82,8 @@
   deps = [
     ":firmware_update_types",
     "//ash/webui/common/resources:fake_observables",
+    "//ash/webui/common/resources:promise_resolver",
     "//ui/webui/resources/js:cr.m",
-    "//ui/webui/resources/js:promise_resolver",
   ]
 }
 
diff --git a/ash/webui/firmware_update_ui/resources/fake_update_controller.js b/ash/webui/firmware_update_ui/resources/fake_update_controller.js
index 24dabff0..ca024d6 100644
--- a/ash/webui/firmware_update_ui/resources/fake_update_controller.js
+++ b/ash/webui/firmware_update_ui/resources/fake_update_controller.js
@@ -4,7 +4,7 @@
 
 import {FakeObservables} from 'chrome://resources/ash/common/fake_observables.js';
 import {assert} from 'chrome://resources/js/assert.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 
 import {fakeFirmwareUpdates, fakeInstallationProgress, fakeInstallationProgressFailure} from './fake_data.js';
 import {FakeUpdateProviderInterface, FirmwareUpdate, InstallationProgress, InstallControllerInterface, UpdateProgressObserver, UpdateProviderInterface, UpdateState} from './firmware_update_types.js';
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc
index 79a819f..2fca209d 100644
--- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc
+++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.cc
@@ -47,6 +47,17 @@
         {ui::KeyboardCode::VKEY_VOLUME_UP, ui::KeyboardCode::VKEY_F10},
     });
 
+// A map between six-pack keys to system keys.
+constexpr auto kSixPackKeyToSystemKeyMap =
+    base::MakeFixedFlatMap<ui::KeyboardCode, ui::KeyboardCode>({
+        {ui::KeyboardCode::VKEY_DELETE, ui::KeyboardCode::VKEY_BACK},
+        {ui::KeyboardCode::VKEY_HOME, ui::KeyboardCode::VKEY_LEFT},
+        {ui::KeyboardCode::VKEY_UP, ui::KeyboardCode::VKEY_PRIOR},
+        {ui::KeyboardCode::VKEY_END, ui::KeyboardCode::VKEY_RIGHT},
+        {ui::KeyboardCode::VKEY_NEXT, ui::KeyboardCode::VKEY_DOWN},
+        {ui::KeyboardCode::VKEY_INSERT, ui::KeyboardCode::VKEY_BACK},
+    });
+
 mojom::AcceleratorInfoPtr CreateAcceleratorInfo(
     const ui::Accelerator& accelerator,
     bool locked,
@@ -108,27 +119,12 @@
   return base::Contains(*top_row_action_keys, accelerator_keycode);
 }
 
-ui::Accelerator CreateTopRowRemappedAccelerator(ui::Accelerator accelerator) {
-  if (TopRowKeysAreFunctionKeys() &&
-      kLayout2TopRowKeyToFKeyMap.contains(accelerator.key_code())) {
-    // If top row keys are function keys, top row shortcut will become
-    // [Fkey] + [search] + [modifiers]
-    ui::Accelerator new_accelerator(
-        kLayout2TopRowKeyToFKeyMap.at(accelerator.key_code()),
-        accelerator.modifiers() | ui::EF_COMMAND_DOWN, accelerator.key_state());
-    return new_accelerator;
-  }
-
-  return accelerator;
+bool IsSixPackKey(const ui::KeyboardCode& accelerator_keycode) {
+  return base::Contains(kSixPackKeyToSystemKeyMap, accelerator_keycode);
 }
 
-ui::Accelerator CreateRemappedAccelerator(ui::Accelerator accelerator) {
-  // TODO(longbowei): Add six-pack remapping in the next CL.
-  if (IsTopRowKey(accelerator.key_code())) {
-    return CreateTopRowRemappedAccelerator(accelerator);
-  }
-
-  return accelerator;
+bool IsModifierSet(const ui::Accelerator accelerator, int modifier) {
+  return accelerator.modifiers() & modifier;
 }
 
 }  // namespace
@@ -206,7 +202,7 @@
 }
 
 mojom::AcceleratorType AcceleratorConfigurationProvider::GetAcceleratorType(
-    ui::Accelerator accelerator) {
+    ui::Accelerator accelerator) const {
   // TODO(longbowei): Add and handle more Accelerator types in the future.
   if (ash_accelerator_configuration_->IsDeprecated(accelerator)) {
     return mojom::AcceleratorType::kDeprecated;
@@ -237,6 +233,99 @@
   }
 }
 
+mojom::AcceleratorInfoPtr
+AcceleratorConfigurationProvider::CreateBaseAcceleratorInfo(
+    ui::Accelerator accelerator) const {
+  // TODO(longbowei): |locked| and and |has_key_event| are both default to
+  // true now. For |locked|, ash accelerators should not be locked when
+  // customization is allowed. For |has_key_event|, we need to determine
+  // its state based off of a keyboard device id.
+  return CreateAcceleratorInfo(accelerator, /*locked=*/true,
+                               /*has_key_event=*/true,
+                               GetAcceleratorType(accelerator),
+                               mojom::AcceleratorState::kEnabled);
+}
+
+mojom::AcceleratorInfoPtr
+AcceleratorConfigurationProvider::CreateRemappedTopRowAcceleratorInfo(
+    ui::Accelerator accelerator) const {
+  if (!TopRowKeysAreFunctionKeys() ||
+      !kLayout2TopRowKeyToFKeyMap.contains(accelerator.key_code())) {
+    // No remapping is done.
+    return nullptr;
+  }
+  // If top row keys are function keys, top row shortcut will become
+  // [Fkey] + [search] + [modifiers]
+  ui::Accelerator updated_accelerator(
+      kLayout2TopRowKeyToFKeyMap.at(accelerator.key_code()),
+      accelerator.modifiers() | ui::EF_COMMAND_DOWN, accelerator.key_state());
+  return CreateBaseAcceleratorInfo(updated_accelerator);
+}
+
+mojom::AcceleratorInfoPtr
+AcceleratorConfigurationProvider::CreateRemappedSixPackAcceleratorInfo(
+    ui::Accelerator accelerator) const {
+  // For all six-pack-keys, avoid remapping if [Search] is part of
+  // original accelerator.
+  if (IsModifierSet(accelerator, ui::EF_COMMAND_DOWN) ||
+      !::features::IsImprovedKeyboardShortcutsEnabled() ||
+      !kSixPackKeyToSystemKeyMap.contains(accelerator.key_code())) {
+    return nullptr;
+  }
+  // Edge cases:
+  // 1. [Shift] + [Delete] should not be remapped to [Shift] + [Search] +
+  // [Back] (aka, Insert).
+  // 2. For [Insert], avoid remapping if [Shift] is part of original
+  // accelerator.
+  if (IsModifierSet(accelerator, ui::EF_SHIFT_DOWN) &&
+      (accelerator.key_code() == ui::KeyboardCode::VKEY_DELETE ||
+       accelerator.key_code() == ui::KeyboardCode::VKEY_INSERT)) {
+    return nullptr;
+  }
+  // For Insert: [modifiers] = [Search] + [Shift] + [original_modifiers].
+  // For other six-pack-keys: [modifiers] = [Search] + [original_modifiers].
+  int updated_modifiers =
+      accelerator.key_code() == ui::KeyboardCode::VKEY_INSERT
+          ? accelerator.modifiers() | ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN
+          : accelerator.modifiers() | ui::EF_COMMAND_DOWN;
+  ui::Accelerator updated_accelerator =
+      ui::Accelerator(kSixPackKeyToSystemKeyMap.at(accelerator.key_code()),
+                      updated_modifiers, accelerator.key_state());
+
+  return CreateBaseAcceleratorInfo(updated_accelerator);
+}
+
+std::vector<mojom::AcceleratorInfoPtr>
+AcceleratorConfigurationProvider::CreateAcceleratorInfoVariants(
+    ui::Accelerator accelerator) const {
+  std::vector<mojom::AcceleratorInfoPtr> alias_infos;
+
+  if (IsTopRowKey(accelerator.key_code())) {
+    // For |top_row_key|, replace the base accelerator info with top-row
+    // remapped accelerator info if remapping is done. Otherwise, only show base
+    // accelerator info.
+    if (auto result_ptr = CreateRemappedTopRowAcceleratorInfo(accelerator);
+        result_ptr) {
+      alias_infos.push_back(std::move(result_ptr));
+      return alias_infos;
+    }
+  }
+
+  if (IsSixPackKey(accelerator.key_code())) {
+    // For |six_pack_key|, show both the base accelerator info and the six-pack
+    // remapped accelerator info if remapping is done. Otherwise, only show base
+    // accelerator info.
+    if (auto result_ptr = CreateRemappedSixPackAcceleratorInfo(accelerator);
+        result_ptr) {
+      alias_infos.push_back(std::move(result_ptr));
+    }
+  }
+
+  // Add base accelerator info.
+  alias_infos.push_back(CreateBaseAcceleratorInfo(accelerator));
+  return alias_infos;
+}
+
 AcceleratorConfigurationProvider::AcceleratorConfigurationMap
 AcceleratorConfigurationProvider::CreateConfigurationMap() {
   AcceleratorConfigurationMap accelerator_config;
@@ -247,20 +336,13 @@
     for (const auto& [action_id, accelerators] : id_to_accelerators) {
       std::vector<mojom::AcceleratorInfoPtr> infos_mojom;
       for (const auto& accelerator : accelerators) {
-        // Update the accelerator by doing F-keys remapping
-        // TODO(longbowei): Add six-pack remapping in next CL.
-        ui::Accelerator updated_accelerator =
-            CreateRemappedAccelerator(accelerator);
-
-        // |locked| and and |has_key_event| are both default to true now.
-        // For |locked|, ash accelerators should not be locked when
-        // customization is allowed. For |has_key_event|, we need to determine
-        // its state based off of a keyboard device id.
-        mojom::AcceleratorInfoPtr info = CreateAcceleratorInfo(
-            updated_accelerator, /*locked=*/true,
-            /*has_key_event=*/true, GetAcceleratorType(accelerator),
-            mojom::AcceleratorState::kEnabled);
-        infos_mojom.push_back(std::move(info));
+        // Get the alias acceleratorInfos by doing F-keys remapping and
+        // six-pack-keys remapping if applicable.
+        std::vector<mojom::AcceleratorInfoPtr> infos =
+            CreateAcceleratorInfoVariants(accelerator);
+        for (auto& info : infos) {
+          infos_mojom.push_back(std::move(info));
+        }
       }
       accelerators_mojom.emplace(action_id, std::move(infos_mojom));
     }
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.h b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.h
index 698192a1..dd48c24c 100644
--- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.h
+++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider.h
@@ -62,7 +62,7 @@
   void OnAcceleratorsUpdated(mojom::AcceleratorSource source,
                              const ActionIdToAcceleratorsMap& mapping);
 
-  mojom::AcceleratorType GetAcceleratorType(ui::Accelerator accelerator);
+  mojom::AcceleratorType GetAcceleratorType(ui::Accelerator accelerator) const;
 
   void UpdateKeyboards();
 
@@ -70,6 +70,27 @@
 
   void NotifyAcceleratorsUpdated();
 
+  // Create base accelerator info using accelerator.
+  mojom::AcceleratorInfoPtr CreateBaseAcceleratorInfo(
+      ui::Accelerator accelerator) const;
+
+  // Create alias accelerator info for top row key if applicable.
+  mojom::AcceleratorInfoPtr CreateRemappedTopRowAcceleratorInfo(
+      ui::Accelerator accelerator) const;
+
+  // Create alias accelerator info for six pack key if applicable.
+  mojom::AcceleratorInfoPtr CreateRemappedSixPackAcceleratorInfo(
+      ui::Accelerator accelerator) const;
+
+  // Create alias accelerator infos when the accelerator contains a top row key
+  // or six pack key. For |top_row_key|, replace the base accelerator with
+  // top-row remapped accelerator, For |six_pack_key|, show both the base
+  // accelerator and the six-pack remapped accelerator. Therefore, return a
+  // vector here since it may display two accelerator infos for six pack
+  // remapping case.
+  std::vector<mojom::AcceleratorInfoPtr> CreateAcceleratorInfoVariants(
+      ui::Accelerator accelerator) const;
+
   std::vector<mojom::AcceleratorLayoutInfoPtr> layout_infos_;
 
   std::map<AcceleratorActionId, std::vector<mojom::AcceleratorInfoPtr>>
diff --git a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc
index 13e74c4..a892881 100644
--- a/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc
+++ b/ash/webui/shortcut_customization_ui/backend/accelerator_configuration_provider_unittest.cc
@@ -22,6 +22,7 @@
 #include "base/callback_forward.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
+#include "base/test/scoped_feature_list.h"
 #include "chromeos/ash/components/test/ash_test_suite.h"
 #include "content/public/test/browser_task_environment.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -165,6 +166,8 @@
 
   // AshTestBase:
   void SetUp() override {
+    scoped_feature_list_.InitWithFeatures(
+        {::features::kImprovedKeyboardShortcuts}, {});
     // ui::ScopedKeyboardLayout keyboard_layout(ui::KEYBOARD_LAYOUT_ENGLISH_US);
 
     ui::ResourceBundle::CleanupSharedInstance();
@@ -188,6 +191,7 @@
   }
 
   std::unique_ptr<AcceleratorConfigurationProvider> provider_;
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 TEST_F(AcceleratorConfigurationProviderTest, ResetReceiverOnBindInterface) {
@@ -389,6 +393,102 @@
                                expected_test_data, observer.config());
 }
 
+TEST_F(AcceleratorConfigurationProviderTest, SixPackKeyAcceleratorRemapped) {
+  FakeAcceleratorsUpdatedObserver observer;
+  SetUpObserver(&observer);
+  EXPECT_EQ(0, observer.num_times_notified());
+
+  // kImprovedKeyboardShortcuts is enabled.
+  EXPECT_TRUE(::features::IsImprovedKeyboardShortcutsEnabled());
+
+  const AcceleratorData test_data[] = {
+      {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN,
+       CYCLE_FORWARD_MRU},
+      // Below are fake shortcuts, only used for testing.
+      {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_NONE,
+       CYCLE_BACKWARD_MRU},
+      {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_NONE,
+       TAKE_WINDOW_SCREENSHOT},
+      {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_ALT_DOWN,
+       KEYBOARD_BRIGHTNESS_UP},
+      {/*trigger_on_press=*/true, ui::VKEY_END, ui::EF_SHIFT_DOWN,
+       DISABLE_CAPS_LOCK},
+      {/*trigger_on_press=*/true, ui::VKEY_NEXT, ui::EF_ALT_DOWN, NEW_TAB},
+      {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_NONE, NEW_TAB},
+      {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_ALT_DOWN, NEW_TAB},
+      // When [search] is part of the original accelerator.
+      {/*trigger_on_press=*/true, ui::VKEY_HOME,
+       ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, KEYBOARD_BRIGHTNESS_UP},
+      {/*trigger_on_press=*/true, ui::VKEY_END,
+       ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, DISABLE_CAPS_LOCK},
+      //  Edge case: [Shift] + [Delete].
+      {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_SHIFT_DOWN,
+       DESKS_NEW_DESK},
+  };
+
+  const AcceleratorData expected_data[] = {
+      {/*trigger_on_press=*/true, ui::VKEY_TAB, ui::EF_ALT_DOWN,
+       CYCLE_FORWARD_MRU},
+      // Below are fake shortcuts, only used for testing.
+      {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_NONE,
+       CYCLE_BACKWARD_MRU},
+      {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_NONE,
+       TAKE_WINDOW_SCREENSHOT},
+      {/*trigger_on_press=*/true, ui::VKEY_HOME, ui::EF_ALT_DOWN,
+       KEYBOARD_BRIGHTNESS_UP},
+      {/*trigger_on_press=*/true, ui::VKEY_END, ui::EF_SHIFT_DOWN,
+       DISABLE_CAPS_LOCK},
+      {/*trigger_on_press=*/true, ui::VKEY_NEXT, ui::EF_ALT_DOWN, NEW_TAB},
+      {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_NONE, NEW_TAB},
+      {/*trigger_on_press=*/true, ui::VKEY_INSERT, ui::EF_ALT_DOWN, NEW_TAB},
+
+      // When [search] is part of the original accelerator. No remapping is
+      // done. Search+Alt+Home -> Search+Alt+Home.
+      {/*trigger_on_press=*/true, ui::VKEY_HOME,
+       ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, KEYBOARD_BRIGHTNESS_UP},
+      // Search+Shift+End -> Search+Shift+End.
+      {/*trigger_on_press=*/true, ui::VKEY_END,
+       ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, DISABLE_CAPS_LOCK},
+
+      // Edge case: [Shift] + [Delete]. It should not remapped to
+      // [Shift]+[Search]+[Back](aka, Insert).
+      //  Shift+Delete -> Shift+Delete
+      {/*trigger_on_press=*/true, ui::VKEY_DELETE, ui::EF_SHIFT_DOWN,
+       DESKS_NEW_DESK},
+
+      // Additional six-pack remapped accelerators.
+      // Delete -> Search+Backspace
+      {/*trigger_on_press=*/true, ui::VKEY_BACK, ui::EF_COMMAND_DOWN,
+       CYCLE_BACKWARD_MRU},
+      // Home -> Search+Left
+      {/*trigger_on_press=*/true, ui::VKEY_LEFT, ui::EF_COMMAND_DOWN,
+       TAKE_WINDOW_SCREENSHOT},
+      // Alt+Home -> Search+Alt+Left
+      {/*trigger_on_press=*/true, ui::VKEY_LEFT,
+       ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, KEYBOARD_BRIGHTNESS_UP},
+      // Shift+End -> Search+Shift+Right
+      {/*trigger_on_press=*/true, ui::VKEY_RIGHT,
+       ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, DISABLE_CAPS_LOCK},
+      // Alt+Next -> Search+Alt+Down
+      {/*trigger_on_press=*/true, ui::VKEY_DOWN,
+       ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, NEW_TAB},
+      // Insert -> Search+Shift+Backspace
+      {/*trigger_on_press=*/true, ui::VKEY_BACK,
+       ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, NEW_TAB},
+      // Alt+Insert -> Search+Shift+Alt+Backspace
+      {/*trigger_on_press=*/true, ui::VKEY_BACK,
+       ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, NEW_TAB},
+  };
+
+  Shell::Get()->ash_accelerator_configuration()->Initialize(test_data);
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(1, observer.num_times_notified());
+  // Verify observer received the correct remapped accelerators.
+  ExpectMojomAcceleratorsEqual(mojom::AcceleratorSource::kAsh, expected_data,
+                               observer.config());
+}
+
 }  // namespace shortcut_ui
 
 }  // namespace ash
diff --git a/base/android/java/src/org/chromium/base/BundleUtils.java b/base/android/java/src/org/chromium/base/BundleUtils.java
index f0a71fa6..75ef2bb8 100644
--- a/base/android/java/src/org/chromium/base/BundleUtils.java
+++ b/base/android/java/src/org/chromium/base/BundleUtils.java
@@ -9,12 +9,15 @@
 import android.content.Context;
 import android.content.ContextWrapper;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Build;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 import androidx.collection.ArrayMap;
 import androidx.collection.SimpleArrayMap;
 
@@ -55,6 +58,7 @@
     private static Boolean sIsBundle;
     private static final Object sSplitLock = new Object();
 
+    private static ApplicationInfo sAppInfo;
     // This cache is needed to support the workaround for b/172602571, see
     // createIsolatedSplitContext() for more info.
     private static final SimpleArrayMap<String, ClassLoader> sCachedClassLoaders =
@@ -68,6 +72,15 @@
     // restoring from recents.
     private static ArrayList<String> sSplitsToRestore;
 
+    public static void resetForTesting() {
+        sIsBundle = null;
+        sAppInfo = null;
+        sCachedClassLoaders.clear();
+        sInflationClassLoaders.clear();
+        sSplitCompatClassLoaderInstance = null;
+        sSplitsToRestore = null;
+    }
+
     /**
      * {@link BundleUtils#isBundle()}  is not called directly by native because
      * {@link CalledByNative} prevents inlining, causing the bundle support lib to not be
@@ -100,6 +113,48 @@
     }
 
     /**
+     * Updates the ApplicationInfo used to know what splits are installed.
+     */
+    public static void invalidateListOfInstalledSplits() {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            Context c = ContextUtils.getApplicationContext();
+            try {
+                // Re-query list of installed split from package manager rather than from
+                // Context.getApplicationInfo(), because the latter is not updated yet.
+                // b/258453540
+                PackageInfo pi = c.getPackageManager().getPackageInfo(c.getPackageName(), 0);
+                synchronized (sSplitLock) {
+                    sAppInfo = pi.applicationInfo;
+                }
+            } catch (NameNotFoundException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    private static String getSplitApkPath(Context context, String splitName) {
+        ApplicationInfo appInfo;
+        synchronized (sSplitLock) {
+            appInfo = sAppInfo;
+            if (appInfo == null) {
+                // For the initial initialization, use the readily available ApplicationInfo from
+                // the application Context. When modules are installed on-the-fly,
+                // setInstalledSplits() is used to set them from the potentially more up-to-date
+                // PackageManager results.
+                appInfo = context.getApplicationInfo();
+                sAppInfo = appInfo;
+            }
+        }
+        String[] splitNames = appInfo.splitNames;
+        if (splitNames == null) {
+            return null;
+        }
+        int idx = Arrays.binarySearch(splitNames, splitName);
+        return idx < 0 ? null : appInfo.splitSourceDirs[idx];
+    }
+
+    /**
      * Returns whether splitName is installed. Note, this will return false on Android versions
      * below O, where isolated splits are not supported.
      */
@@ -107,9 +162,7 @@
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
             return false;
         }
-
-        String[] splitNames = ApiHelperForO.getSplitNames(context.getApplicationInfo());
-        return splitNames != null && Arrays.asList(splitNames).contains(splitName);
+        return getSplitApkPath(context, splitName) != null;
     }
 
     /**
@@ -160,14 +213,11 @@
                     && !parent.equals(appContext.getClassLoader());
             synchronized (sCachedClassLoaders) {
                 if (shouldReplaceClassLoader && !sCachedClassLoaders.containsKey(splitName)) {
-                    String[] splitNames = ApiHelperForO.getSplitNames(context.getApplicationInfo());
-                    int idx = Arrays.binarySearch(splitNames, splitName);
-                    assert idx >= 0;
+                    String apkPath = getSplitApkPath(base, splitName);
                     // The librarySearchPath argument to PathClassLoader is not needed here
                     // because the framework doesn't pass it either, see b/171269960.
-                    sCachedClassLoaders.put(splitName,
-                            new PathClassLoader(context.getApplicationInfo().splitSourceDirs[idx],
-                                    appContext.getClassLoader()));
+                    sCachedClassLoaders.put(
+                            splitName, new PathClassLoader(apkPath, appContext.getClassLoader()));
                 }
                 // Always replace the ClassLoader if we have a cached version to make sure all
                 // ClassLoaders are consistent.
@@ -403,22 +453,16 @@
             return null;
         }
 
-        ApplicationInfo info = ContextUtils.getApplicationContext().getApplicationInfo();
-        String[] splitNames = ApiHelperForO.getSplitNames(info);
-        if (splitNames == null) {
-            return null;
-        }
-
-        int idx = Arrays.binarySearch(splitNames, splitName);
-        if (idx < 0) {
+        String apkPath = getSplitApkPath(ContextUtils.getApplicationContext(), splitName);
+        if (apkPath == null) {
             return null;
         }
 
         try {
+            ApplicationInfo info = ContextUtils.getApplicationContext().getApplicationInfo();
             String primaryCpuAbi = (String) info.getClass().getField("primaryCpuAbi").get(info);
             // This matches the logic LoadedApk.java uses to construct library paths.
-            return info.splitSourceDirs[idx] + "!/lib/" + primaryCpuAbi + "/"
-                    + System.mapLibraryName(libraryName);
+            return apkPath + "!/lib/" + primaryCpuAbi + "/" + System.mapLibraryName(libraryName);
         } catch (ReflectiveOperationException e) {
             throw new RuntimeException(e);
         }
diff --git a/base/rand_util_posix.cc b/base/rand_util_posix.cc
index ac0ca9a..15e8b62be 100644
--- a/base/rand_util_posix.cc
+++ b/base/rand_util_posix.cc
@@ -126,7 +126,7 @@
 // both are enabled.
 BASE_FEATURE(kUseGetrandomForRandBytes,
              "UseGetrandomForRandBytes",
-             FEATURE_DISABLED_BY_DEFAULT);
+             FEATURE_ENABLED_BY_DEFAULT);
 
 bool UseGetrandom() {
   return g_use_getrandom.load(std::memory_order_relaxed);
diff --git a/base/task/thread_pool/sequence.cc b/base/task/thread_pool/sequence.cc
index 0730f702..0e59b84f 100644
--- a/base/task/thread_pool/sequence.cc
+++ b/base/task/thread_pool/sequence.cc
@@ -17,6 +17,28 @@
 namespace base {
 namespace internal {
 
+namespace {
+
+// Asserts that a lock is acquired and annotates the scope such that
+// base/thread_annotations.h can recognize that the lock is acquired.
+class SCOPED_LOCKABLE AnnotateLockAcquired {
+ public:
+  explicit AnnotateLockAcquired(const CheckedLock& lock)
+      EXCLUSIVE_LOCK_FUNCTION(lock)
+      : acquired_lock_(lock) {
+    acquired_lock_->AssertAcquired();
+  }
+
+  ~AnnotateLockAcquired() UNLOCK_FUNCTION() {
+    acquired_lock_->AssertAcquired();
+  }
+
+ private:
+  const raw_ref<const CheckedLock> acquired_lock_;
+};
+
+}  // namespace
+
 Sequence::Transaction::Transaction(Sequence* sequence)
     : TaskSource::Transaction(sequence) {}
 
@@ -25,6 +47,7 @@
 Sequence::Transaction::~Transaction() = default;
 
 bool Sequence::Transaction::ShouldBeQueued() const {
+  AnnotateLockAcquired annotate(sequence()->lock_);
   // A sequence should be queued to the immediate queue after receiving a new
   // immediate Task, or queued to or updated in the delayed queue after
   // receiving a new delayed Task, if it's not already in the immediate queue
@@ -49,6 +72,7 @@
 }
 
 bool Sequence::Transaction::TopDelayedTaskWillChange(Task& delayed_task) const {
+  AnnotateLockAcquired annotate(sequence()->lock_);
   if (sequence()->IsEmpty())
     return true;
   return delayed_task.latest_delayed_run_time() <
@@ -56,6 +80,7 @@
 }
 
 void Sequence::Transaction::PushImmediateTask(Task task) {
+  AnnotateLockAcquired annotate(sequence()->lock_);
   // Use CHECK instead of DCHECK to crash earlier. See http://crbug.com/711167
   // for details.
   CHECK(task.task);
@@ -95,6 +120,7 @@
 }
 
 void Sequence::Transaction::PushDelayedTask(Task task) {
+  AnnotateLockAcquired annotate(sequence()->lock_);
   // Use CHECK instead of DCHECK to crash earlier. See http://crbug.com/711167
   // for details.
   CHECK(task.task);
@@ -215,6 +241,7 @@
 
 Task Sequence::TakeTask(TaskSource::Transaction* transaction) {
   CheckedAutoLockMaybe auto_lock(transaction ? nullptr : &lock_);
+  AnnotateLockAcquired annotate(lock_);
 
   DCHECK(current_location_.load(std::memory_order_relaxed) ==
          Sequence::SequenceLocation::kInWorker);
@@ -230,6 +257,8 @@
 
 bool Sequence::DidProcessTask(TaskSource::Transaction* transaction) {
   CheckedAutoLockMaybe auto_lock(transaction ? nullptr : &lock_);
+  AnnotateLockAcquired annotate(lock_);
+
   // There should never be a call to DidProcessTask without an associated
   // WillRunTask().
   DCHECK(current_location_.load(std::memory_order_relaxed) ==
@@ -252,6 +281,8 @@
 bool Sequence::WillReEnqueue(TimeTicks now,
                              TaskSource::Transaction* transaction) {
   CheckedAutoLockMaybe auto_lock(transaction ? nullptr : &lock_);
+  AnnotateLockAcquired annotate(lock_);
+
   // This should always be called from a worker thread and it will be
   // called after DidProcessTask().
   DCHECK(current_location_.load(std::memory_order_relaxed) ==
@@ -298,6 +329,8 @@
 
 Task Sequence::Clear(TaskSource::Transaction* transaction) {
   CheckedAutoLockMaybe auto_lock(transaction ? nullptr : &lock_);
+  AnnotateLockAcquired annotate(lock_);
+
   // See comment on TaskSource::task_runner_ for lifetime management details.
   if (!IsEmpty() && current_location_.load(std::memory_order_relaxed) !=
                         Sequence::SequenceLocation::kInWorker) {
diff --git a/base/task/thread_pool/sequence.h b/base/task/thread_pool/sequence.h
index 7f0f3032..8b41094 100644
--- a/base/task/thread_pool/sequence.h
+++ b/base/task/thread_pool/sequence.h
@@ -16,6 +16,7 @@
 #include "base/task/thread_pool/task.h"
 #include "base/task/thread_pool/task_source.h"
 #include "base/task/thread_pool/task_source_sort_key.h"
+#include "base/thread_annotations.h"
 #include "base/threading/sequence_local_storage_map.h"
 
 namespace base {
@@ -151,24 +152,24 @@
   // delayed queue and return it.
   // Expects this sequence to have at least one task that can run
   // immediately.
-  Task TakeEarliestTask();
+  Task TakeEarliestTask() EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
   // Get and return next task from immediate queue
-  Task TakeNextImmediateTask();
+  Task TakeNextImmediateTask() EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
   // Determine next ready time and set ready time to it
-  TimeTicks GetNextReadyTime();
+  TimeTicks GetNextReadyTime() EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
   // Returns true if there are immediate tasks
-  bool HasImmediateTasks() const;
+  bool HasImmediateTasks() const EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
   // Returns true if there are tasks ripe for execution in the delayed queue
-  bool HasRipeDelayedTasks(TimeTicks now) const;
+  bool HasRipeDelayedTasks(TimeTicks now) const EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
   // Returns true if tasks ready to be executed
-  bool HasReadyTasks(TimeTicks now) const;
+  bool HasReadyTasks(TimeTicks now) const EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
-  bool IsEmpty() const;
+  bool IsEmpty() const EXCLUSIVE_LOCKS_REQUIRED(lock_);
 
   TimeTicks GetReadyTime() const;
 
@@ -178,8 +179,9 @@
   const SequenceToken token_ = SequenceToken::Create();
 
   // Queues of tasks to execute.
-  base::queue<Task> queue_;
-  base::IntrusiveHeap<Task, DelayedTaskGreater> delayed_queue_;
+  base::queue<Task> queue_ GUARDED_BY(lock_);
+  base::IntrusiveHeap<Task, DelayedTaskGreater> delayed_queue_
+      GUARDED_BY(lock_);
 
   std::atomic<TimeTicks> ready_time_{TimeTicks()};
 
diff --git a/base/test/android/junit/src/org/chromium/base/test/BaseRobolectricTestRunner.java b/base/test/android/junit/src/org/chromium/base/test/BaseRobolectricTestRunner.java
index 5871e3f..8235d5e1 100644
--- a/base/test/android/junit/src/org/chromium/base/test/BaseRobolectricTestRunner.java
+++ b/base/test/android/junit/src/org/chromium/base/test/BaseRobolectricTestRunner.java
@@ -12,6 +12,7 @@
 import org.robolectric.TestLifecycle;
 
 import org.chromium.base.ApplicationStatus;
+import org.chromium.base.BundleUtils;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.LifetimeAssert;
 import org.chromium.base.PathUtils;
@@ -44,6 +45,7 @@
             UmaRecorderHolder.resetForTesting();
             CommandLineFlags.setUpClass(method.getDeclaringClass());
             CommandLineFlags.setUpMethod(method);
+            BundleUtils.resetForTesting();
             super.beforeTest(method);
         }
 
diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni
index 17c7d03a..e84f326 100644
--- a/build/config/compiler/compiler.gni
+++ b/build/config/compiler/compiler.gni
@@ -145,6 +145,8 @@
 }
 
 assert(!is_cfi || use_thin_lto, "CFI requires ThinLTO")
+assert(!enable_profiling || !is_component_build,
+       "Cannot profile component builds (crbug.com/1199271).")
 
 if (use_thin_lto && is_debug) {
   print("WARNING: ThinLTO (use_thin_lto=true) doesn't work with debug" +
diff --git a/build/toolchain/android/BUILD.gn b/build/toolchain/android/BUILD.gn
index a3c7e89e..20257d9 100644
--- a/build/toolchain/android/BUILD.gn
+++ b/build/toolchain/android/BUILD.gn
@@ -61,6 +61,12 @@
     # Don't use .cr.so for loadable_modules since they are always loaded via
     # absolute path.
     loadable_module_extension = ".so"
+
+    # We propagate configs to allow cross-toolchain JNI include directories to
+    # work. This flag does not otherwise affect our build, but if applied to
+    # non-android toolchains, it causes unwanted configs from perfetto to
+    # propagate from host_toolchain deps.
+    propagates_configs = true
   }
 }
 
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
index 1af282f..7abfd87 100644
--- a/build/toolchain/gcc_toolchain.gni
+++ b/build/toolchain/gcc_toolchain.gni
@@ -786,7 +786,11 @@
       }
     }
 
-    forward_variables_from(invoker, [ "deps" ])
+    forward_variables_from(invoker,
+                           [
+                             "deps",
+                             "propagates_configs",
+                           ])
   }
 }
 
@@ -823,6 +827,7 @@
                              "dwp",
                              "enable_linker_map",
                              "loadable_module_extension",
+                             "propagates_configs",
                              "use_unstripped_as_runtime_outputs",
                            ])
 
diff --git a/chrome/VERSION b/chrome/VERSION
index 138f8add..ccb49eed3 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=110
 MINOR=0
-BUILD=5423
+BUILD=5424
 PATCH=0
diff --git a/chrome/android/features/keyboard_accessory/internal/BUILD.gn b/chrome/android/features/keyboard_accessory/internal/BUILD.gn
index 1cbd129..7982089 100644
--- a/chrome/android/features/keyboard_accessory/internal/BUILD.gn
+++ b/chrome/android/features/keyboard_accessory/internal/BUILD.gn
@@ -66,6 +66,7 @@
     "java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewBinder.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewHolder.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/Credential.java",
+    "java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/CredentialFillRequest.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryCoordinator.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryIPHUtils.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryMediator.java",
@@ -112,6 +113,7 @@
     "java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutProperties.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutView.java",
     "java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutViewBinder.java",
+    "java/src/org/chromium/chrome/browser/keyboard_accessory/utils/InsecureFillingDialogUtils.java",
   ]
   annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
   resources_package = "org.chromium.chrome.browser.keyboard_accessory"
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetBridge.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetBridge.java
index 52e0cfb..8b3b2f0 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetBridge.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetBridge.java
@@ -58,10 +58,12 @@
     }
 
     @Override
-    public void onCredentialSelected(Credential credential) {
+    public void onCredentialSelected(CredentialFillRequest credentialFillRequest) {
         assert mNativeView != 0 : "The native side is already dismissed";
-        AllPasswordsBottomSheetBridgeJni.get().onCredentialSelected(
-                mNativeView, credential.getUsername(), credential.getPassword());
+        AllPasswordsBottomSheetBridgeJni.get().onCredentialSelected(mNativeView,
+                credentialFillRequest.getCredential().getUsername(),
+                credentialFillRequest.getCredential().getPassword(),
+                credentialFillRequest.getRequestsToFillPassword());
     }
 
     @Override
@@ -73,8 +75,8 @@
 
     @NativeMethods
     interface Natives {
-        void onCredentialSelected(
-                long nativeAllPasswordsBottomSheetViewImpl, String username, String password);
+        void onCredentialSelected(long nativeAllPasswordsBottomSheetViewImpl, String username,
+                String password, boolean requestsToFillPassword);
         void onDismiss(long nativeAllPasswordsBottomSheetViewImpl);
     }
-}
\ No newline at end of file
+}
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetCoordinator.java
index 31db160..9c3977f 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetCoordinator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetCoordinator.java
@@ -27,7 +27,7 @@
         /**
          * Called when the user selects one of the credentials shown in the AllPasswordsBottomSheet.
          */
-        void onCredentialSelected(Credential credential);
+        void onCredentialSelected(CredentialFillRequest credentialFillRequest);
 
         /**
          * Called when the user dismisses the AllPasswordsBottomSheet or if the bottom sheet content
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetMediator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetMediator.java
index b3bf88f1f..ca527f2 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetMediator.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetMediator.java
@@ -92,9 +92,9 @@
                             .contains(searchQuery.toLowerCase(Locale.getDefault()));
     }
 
-    void onCredentialSelected(Credential credential) {
+    void onCredentialSelected(CredentialFillRequest credentialFillRequest) {
         mModel.set(VISIBLE, false);
-        mDelegate.onCredentialSelected(credential);
+        mDelegate.onCredentialSelected(credentialFillRequest);
     }
 
     void onDismissed(@StateChangeReason Integer reason) {
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetProperties.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetProperties.java
index 77b80022..2632f4e 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetProperties.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetProperties.java
@@ -49,7 +49,7 @@
         static final PropertyModel.ReadableObjectPropertyKey<Credential> CREDENTIAL =
                 new PropertyModel.ReadableObjectPropertyKey<>("credential");
         static final PropertyModel
-                .ReadableObjectPropertyKey<Callback<Credential>> ON_CLICK_LISTENER =
+                .ReadableObjectPropertyKey<Callback<CredentialFillRequest>> ON_CLICK_LISTENER =
                 new PropertyModel.ReadableObjectPropertyKey<>("on_click_listener");
         static final PropertyModel.ReadableBooleanPropertyKey IS_PASSWORD_FIELD =
                 new PropertyModel.ReadableBooleanPropertyKey("is_password_field");
@@ -58,7 +58,7 @@
         private CredentialProperties() {}
 
         static PropertyModel createCredentialModel(Credential credential,
-                Callback<Credential> clickListener, boolean isPasswordField) {
+                Callback<CredentialFillRequest> clickListener, boolean isPasswordField) {
             return new PropertyModel
                     .Builder(AllPasswordsBottomSheetProperties.CredentialProperties.ALL_KEYS)
                     .with(CREDENTIAL, credential)
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewBinder.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewBinder.java
index f529f5a..b5b1476 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewBinder.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewBinder.java
@@ -24,9 +24,11 @@
 
 import androidx.annotation.Nullable;
 
+import org.chromium.base.Callback;
 import org.chromium.chrome.browser.keyboard_accessory.R;
 import org.chromium.chrome.browser.keyboard_accessory.all_passwords_bottom_sheet.AllPasswordsBottomSheetProperties.ItemType;
 import org.chromium.chrome.browser.keyboard_accessory.helper.FaviconHelper;
+import org.chromium.chrome.browser.keyboard_accessory.utils.InsecureFillingDialogUtils;
 import org.chromium.components.browser_ui.widget.chips.ChipView;
 import org.chromium.components.url_formatter.SchemeDisplay;
 import org.chromium.components.url_formatter.UrlFormatter;
@@ -109,36 +111,17 @@
     private static void bindCredentialView(
             PropertyModel model, View view, PropertyKey propertyKey) {
         Credential credential = model.get(CREDENTIAL);
-        if (propertyKey == ON_CLICK_LISTENER) {
+        ChipView usernameChip = view.findViewById(R.id.suggestion_text);
+        ChipView passwordChip = view.findViewById(R.id.password_text);
+
+        if (propertyKey == ON_CLICK_LISTENER || propertyKey == IS_PASSWORD_FIELD) {
             boolean isPasswordField = model.get(IS_PASSWORD_FIELD);
-            ChipView usernameView = view.findViewById(R.id.suggestion_text);
-            ChipView passwordView = view.findViewById(R.id.password_text);
+            Callback<CredentialFillRequest> callback = model.get(ON_CLICK_LISTENER);
+            updateUsernameChipListener(usernameChip, credential, callback);
+            updatePasswordChipListener(passwordChip, credential, isPasswordField, callback);
 
-            if (isPasswordField) {
-                passwordView.setOnClickListener(
-                        src -> model.get(ON_CLICK_LISTENER).onResult(credential));
-                usernameView.setOnClickListener(null);
-                usernameView.setClickable(false);
-            } else {
-                String username = credential.getUsername();
-                usernameView.setOnClickListener(username.isEmpty()
-                                ? null
-                                : src -> model.get(ON_CLICK_LISTENER).onResult(credential));
-                usernameView.setClickable(!username.isEmpty());
-                passwordView.setOnClickListener(null);
-                passwordView.setClickable(false);
-            }
-        } else if (propertyKey == IS_PASSWORD_FIELD) {
-            boolean isPasswordField = model.get(IS_PASSWORD_FIELD);
-
-            ChipView usernameView = view.findViewById(R.id.suggestion_text);
-            String username = credential.getUsername();
-            usernameView.setEnabled(!isPasswordField && !username.isEmpty());
-            usernameView.setClickable(!isPasswordField && !username.isEmpty());
-
-            ChipView passwordView = view.findViewById(R.id.password_text);
-            passwordView.setEnabled(isPasswordField);
-            passwordView.setClickable(isPasswordField);
+            updateChipViewVisibility(usernameChip);
+            updateChipViewVisibility(passwordChip);
         } else if (propertyKey == CREDENTIAL) {
             TextView passwordTitleView = view.findViewById(R.id.password_info_title);
             String title = credential.isAndroidCredential()
@@ -147,16 +130,14 @@
                             new GURL(credential.getOriginUrl()), SchemeDisplay.OMIT_CRYPTOGRAPHIC);
             passwordTitleView.setText(title);
 
-            ChipView usernameView = view.findViewById(R.id.suggestion_text);
-            usernameView.getPrimaryTextView().setText(credential.getFormattedUsername());
+            usernameChip.getPrimaryTextView().setText(credential.getFormattedUsername());
 
-            ChipView passwordView = view.findViewById(R.id.password_text);
             boolean isEmptyPassword = credential.getPassword().isEmpty();
             if (!isEmptyPassword) {
-                passwordView.getPrimaryTextView().setTransformationMethod(
+                passwordChip.getPrimaryTextView().setTransformationMethod(
                         new PasswordTransformationMethod());
             }
-            passwordView.getPrimaryTextView().setText(isEmptyPassword
+            passwordChip.getPrimaryTextView().setText(isEmptyPassword
                             ? view.getContext().getString(
                                     R.string.all_passwords_bottom_sheet_no_password)
                             : credential.getPassword());
@@ -195,4 +176,30 @@
                                 : R.string.all_passwords_bottom_sheet_warning_dialog_message_first),
                 formattedOrigin);
     }
+
+    private static void updatePasswordChipListener(View view, Credential credential,
+            boolean isPasswordField, Callback<CredentialFillRequest> callback) {
+        if (isPasswordField) {
+            view.setOnClickListener(
+                    src -> callback.onResult(new CredentialFillRequest(credential, true)));
+            return;
+        }
+        view.setOnClickListener(
+                src -> InsecureFillingDialogUtils.showWarningDialog(view.getContext()));
+    }
+
+    private static void updateUsernameChipListener(
+            View view, Credential credential, Callback<CredentialFillRequest> callback) {
+        if (credential.getUsername().isEmpty()) {
+            view.setOnClickListener(null);
+            return;
+        }
+        view.setOnClickListener(
+                src -> callback.onResult(new CredentialFillRequest(credential, false)));
+    }
+
+    private static void updateChipViewVisibility(ChipView chip) {
+        chip.setEnabled(chip.hasOnClickListeners());
+        chip.setClickable(chip.hasOnClickListeners());
+    }
 }
\ No newline at end of file
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/CredentialFillRequest.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/CredentialFillRequest.java
new file mode 100644
index 0000000..a194ff64
--- /dev/null
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/CredentialFillRequest.java
@@ -0,0 +1,26 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.keyboard_accessory.all_passwords_bottom_sheet;
+
+/**
+ * This class holds the data used to pass a fill request.
+ */
+class CredentialFillRequest {
+    private final Credential mCredential;
+    private final boolean mRequestsToFillPassword;
+
+    CredentialFillRequest(Credential credential, boolean requestsToFillPassword) {
+        mCredential = credential;
+        mRequestsToFillPassword = requestsToFillPassword;
+    }
+
+    Credential getCredential() {
+        return mCredential;
+    }
+
+    boolean getRequestsToFillPassword() {
+        return mRequestsToFillPassword;
+    }
+}
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryInfoView.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryInfoView.java
index 0df963e..ae29f89 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryInfoView.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryInfoView.java
@@ -4,21 +4,15 @@
 
 package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs;
 
-import android.app.Activity;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import androidx.annotation.Nullable;
-import androidx.appcompat.app.AlertDialog;
 
-import org.chromium.base.ContextUtils;
-import org.chromium.chrome.browser.ActivityUtils;
 import org.chromium.chrome.browser.keyboard_accessory.R;
 import org.chromium.components.browser_ui.widget.chips.ChipView;
 
@@ -66,22 +60,4 @@
     ChipView getPassword() {
         return mPassword;
     }
-
-    static void showWarningDialog(Context context) {
-        Activity activity = ContextUtils.activityFromContext(context);
-        if (ActivityUtils.isActivityFinishingOrDestroyed(activity)) return;
-        AlertDialog.Builder builder =
-                new AlertDialog.Builder(context, R.style.ThemeOverlay_BrowserUI_AlertDialog);
-        LayoutInflater inflater = LayoutInflater.from(builder.getContext());
-
-        View dialogBody = inflater.inflate(R.layout.confirmation_dialog_view, null);
-
-        TextView titleView = dialogBody.findViewById(R.id.confirmation_dialog_title);
-        titleView.setText(R.string.passwords_not_secure_filling);
-
-        TextView messageView = dialogBody.findViewById(R.id.confirmation_dialog_message);
-        messageView.setText(R.string.passwords_not_secure_filling_details);
-
-        builder.setView(dialogBody).setPositiveButton(R.string.ok, null).create().show();
-    };
 }
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetModernViewBinder.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetModernViewBinder.java
index 6a26712d..5b37bfbe 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetModernViewBinder.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetModernViewBinder.java
@@ -20,6 +20,7 @@
 import org.chromium.chrome.browser.keyboard_accessory.helper.FaviconHelper;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece;
 import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabViewBinder.ElementViewHolder;
+import org.chromium.chrome.browser.keyboard_accessory.utils.InsecureFillingDialogUtils;
 import org.chromium.components.browser_ui.widget.chips.ChipView;
 import org.chromium.ui.modelutil.ListModel;
 
@@ -86,7 +87,7 @@
             if (field.isSelectable()) {
                 listener = src -> field.triggerSelection();
             } else if (field.isObfuscated()) {
-                listener = src -> PasswordAccessoryInfoView.showWarningDialog(context);
+                listener = src -> InsecureFillingDialogUtils.showWarningDialog(context);
             }
             chip.setOnClickListener(listener);
             chip.setClickable(listener != null);
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/utils/InsecureFillingDialogUtils.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/utils/InsecureFillingDialogUtils.java
new file mode 100644
index 0000000..b5b1cf1
--- /dev/null
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/utils/InsecureFillingDialogUtils.java
@@ -0,0 +1,48 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.keyboard_accessory.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AlertDialog;
+
+import org.chromium.base.ContextUtils;
+import org.chromium.chrome.browser.ActivityUtils;
+import org.chromium.chrome.browser.keyboard_accessory.R;
+
+/**
+ * Provides a method to display a warning dialog when filling a password is requested in a
+ * non-secure text field.
+ */
+public class InsecureFillingDialogUtils {
+    /**
+     * Displays an alert dialog to warn user that the filling is insecure. May not be displayed if
+     * {@param context} is not valid.
+     * @param context: The Android Context used to display the dialog.
+     */
+    public static void showWarningDialog(Context context) {
+        Activity activity = ContextUtils.activityFromContext(context);
+        if (ActivityUtils.isActivityFinishingOrDestroyed(activity)) return;
+        AlertDialog.Builder builder =
+                new AlertDialog.Builder(context, R.style.ThemeOverlay_BrowserUI_AlertDialog);
+        LayoutInflater inflater = LayoutInflater.from(builder.getContext());
+
+        View dialogBody = inflater.inflate(R.layout.confirmation_dialog_view, null);
+
+        TextView titleView = dialogBody.findViewById(R.id.confirmation_dialog_title);
+        titleView.setText(R.string.passwords_not_secure_filling);
+
+        TextView messageView = dialogBody.findViewById(R.id.confirmation_dialog_message);
+        messageView.setText(R.string.passwords_not_secure_filling_details);
+
+        builder.setView(dialogBody).setPositiveButton(R.string.ok, null).create().show();
+    };
+
+    private InsecureFillingDialogUtils() {}
+}
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_en-GB.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_en-GB.xtb
index 189372d0..f156803 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_en-GB.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_en-GB.xtb
@@ -27,5 +27,6 @@
 <translation id="8037472847879765671">Show payment methods</translation>
 <translation id="8507520749471379845">Passwords available</translation>
 <translation id="8705308553596171387">No password</translation>
+<translation id="879180780857354295">Alternative filling options available above the keyboard</translation>
 <translation id="8849262850971482943">Use your virtual card for added security</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
index 4f75fbc..17bf91b9 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_th.xtb
@@ -27,5 +27,6 @@
 <translation id="8037472847879765671">แสดงวิธีการชำระเงิน</translation>
 <translation id="8507520749471379845">รหัสผ่านที่มีอยู่</translation>
 <translation id="8705308553596171387">ไม่มีรหัสผ่าน</translation>
+<translation id="879180780857354295">ตัวเลือกการกรอกอื่นๆ แสดงอยู่เหนือแป้นพิมพ์</translation>
 <translation id="8849262850971482943">ใช้บัตรเสมือนเพื่อเพิ่มความปลอดภัย</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetIntegrationTest.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetIntegrationTest.java
index 999d0db..f0ab8857 100644
--- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetIntegrationTest.java
+++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetIntegrationTest.java
@@ -4,6 +4,9 @@
 
 package org.chromium.chrome.browser.keyboard_accessory.all_passwords_bottom_sheet;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 
 import static org.chromium.base.test.util.CriteriaHelper.pollUiThread;
@@ -17,6 +20,7 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -90,7 +94,7 @@
 
     @Test
     @MediumTest
-    public void testClickingUseOtherUsernameAndSelectCredential() {
+    public void testClickingUseOtherUsernameAndSelectCredentialInUsernameField() {
         runOnUiThreadBlocking(
                 () -> { mCoordinator.showCredentials(TEST_CREDENTIALS, !IS_PASSWORD_FIELD); });
         pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
@@ -99,12 +103,39 @@
         TouchCommon.singleClickView(getCredentialNameAt(1));
 
         pollUiThread(() -> getBottomSheetState() == BottomSheetController.SheetState.HIDDEN);
-        verify(mDelegate).onCredentialSelected(BOB);
+        verify(mDelegate).onCredentialSelected(argThat(matchesCredentialFillRequest(BOB, false)));
     }
 
     @Test
     @MediumTest
-    public void testClickingUseOtherPasswordAndSelectCredential() {
+    public void testClickingUseOtherUsernameAndSelectCredentialInPasswordField() {
+        runOnUiThreadBlocking(
+                () -> { mCoordinator.showCredentials(TEST_CREDENTIALS, IS_PASSWORD_FIELD); });
+        pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
+
+        pollUiThread(() -> getCredentialNameAt(1) != null);
+        TouchCommon.singleClickView(getCredentialNameAt(1));
+
+        pollUiThread(() -> getBottomSheetState() == BottomSheetController.SheetState.HIDDEN);
+        verify(mDelegate).onCredentialSelected(argThat(matchesCredentialFillRequest(BOB, false)));
+    }
+
+    @Test
+    @MediumTest
+    public void testClickingUseOtherPasswordAndSelectCredentialInUsernameField() {
+        runOnUiThreadBlocking(
+                () -> { mCoordinator.showCredentials(TEST_CREDENTIALS, !IS_PASSWORD_FIELD); });
+        pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
+
+        pollUiThread(() -> getCredentialPasswordAt(1) != null);
+        TouchCommon.singleClickView(getCredentialPasswordAt(1));
+
+        verify(mDelegate, never()).onCredentialSelected(any());
+    }
+
+    @Test
+    @MediumTest
+    public void testClickingUseOtherPasswordAndSelectCredentialInPasswordField() {
         runOnUiThreadBlocking(
                 () -> { mCoordinator.showCredentials(TEST_CREDENTIALS, IS_PASSWORD_FIELD); });
         pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
@@ -113,7 +144,7 @@
         TouchCommon.singleClickView(getCredentialPasswordAt(1));
 
         pollUiThread(() -> getBottomSheetState() == BottomSheetController.SheetState.HIDDEN);
-        verify(mDelegate).onCredentialSelected(BOB);
+        verify(mDelegate).onCredentialSelected(argThat(matchesCredentialFillRequest(BOB, true)));
     }
 
     private RecyclerView getCredentials() {
@@ -133,4 +164,11 @@
     private @SheetState int getBottomSheetState() {
         return mBottomSheetController.getSheetState();
     }
+
+    private ArgumentMatcher<CredentialFillRequest> matchesCredentialFillRequest(
+            Credential expectedCredential, boolean expectedIsPasswordFillRequest) {
+        return actual
+                -> expectedCredential.equals(actual.getCredential())
+                && expectedIsPasswordFillRequest == actual.getRequestsToFillPassword();
+    }
 }
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewTest.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewTest.java
index 095d6b8..86786ff 100644
--- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewTest.java
+++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetViewTest.java
@@ -4,17 +4,30 @@
 
 package org.chromium.chrome.browser.keyboard_accessory.all_passwords_bottom_sheet;
 
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.assertion.ViewAssertions.matches;
+import static androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition;
+import static androidx.test.espresso.matcher.RootMatchers.isDialog;
+import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
+
+import static org.hamcrest.Matchers.allOf;
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.verify;
 
+import static org.chromium.base.test.util.CriteriaHelper.pollInstrumentationThread;
 import static org.chromium.base.test.util.CriteriaHelper.pollUiThread;
 import static org.chromium.chrome.browser.keyboard_accessory.all_passwords_bottom_sheet.AllPasswordsBottomSheetProperties.SHEET_ITEMS;
 import static org.chromium.chrome.browser.keyboard_accessory.all_passwords_bottom_sheet.AllPasswordsBottomSheetProperties.VISIBLE;
 
 import android.text.method.PasswordTransformationMethod;
+import android.view.View;
 import android.widget.TextView;
 
 import androidx.annotation.StringRes;
@@ -30,7 +43,6 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.DisabledTest;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.flags.ChromeSwitches;
@@ -45,6 +57,8 @@
 import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
 import org.chromium.ui.modelutil.PropertyModel;
 
+import java.util.concurrent.ExecutionException;
+
 /**
  * View tests for the AllPasswordsBottomSheet ensure that model changes are reflected in the sheet.
  */
@@ -64,7 +78,7 @@
     @Mock
     private Callback<Integer> mDismissHandler;
     @Mock
-    private Callback<Credential> mCredentialCallback;
+    private Callback<CredentialFillRequest> mCredentialFillRequestCallback;
     @Mock
     private Callback<String> mSearchQueryCallback;
 
@@ -135,47 +149,79 @@
 
     @Test
     @MediumTest
-    @DisabledTest(message = "https://crbug.com/1157497")
     public void testCredentialsChangedByModel() {
         addDefaultCredentialsToTheModel();
 
         pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
-        assertThat(getCredentials().getChildCount(), is(3));
-        assertThat(getCredentialOriginAt(0).getText(), is("example.com"));
-        assertThat(getCredentialNameAt(0).getPrimaryTextView().getText(),
-                is(ANA.getFormattedUsername()));
-        assertThat(
-                getCredentialPasswordAt(0).getPrimaryTextView().getText(), is(ANA.getPassword()));
-        assertThat(getCredentialPasswordAt(0).getPrimaryTextView().getTransformationMethod(),
-                instanceOf(PasswordTransformationMethod.class));
-        assertThat(getCredentialNameAt(0).isEnabled(), is(false));
-        assertThat(getCredentialNameAt(0).isClickable(), is(false));
-        assertThat(getCredentialPasswordAt(0).isEnabled(), is(true));
-        assertThat(getCredentialPasswordAt(0).isClickable(), is(true));
+        onView(withId(R.id.sheet_item_list)).perform(scrollToPosition(0)).check((view, e) -> {
+            View child = ((RecyclerView) view).findViewHolderForAdapterPosition(0).itemView;
+            assertThat(getCredentialOrigin(child).getText(), is("example.com"));
+            assertThat(getCredentialName(child).getPrimaryTextView().getText(),
+                    is(ANA.getFormattedUsername()));
+            assertThat(getCredentialPassword(child).getPrimaryTextView().getText(),
+                    is(ANA.getPassword()));
+            assertThat(getCredentialPassword(child).getPrimaryTextView().getTransformationMethod(),
+                    instanceOf(PasswordTransformationMethod.class));
+            assertThat(getCredentialName(child).isEnabled(), is(true));
+            assertThat(getCredentialName(child).isClickable(), is(true));
+            assertThat(getCredentialPassword(child).isEnabled(), is(true));
+            assertThat(getCredentialPassword(child).isClickable(), is(true));
+        });
 
-        assertThat(getCredentialOriginAt(1).getText(), is("m.example.xyz"));
-        assertThat(getCredentialNameAt(1).getPrimaryTextView().getText(),
-                is(NO_ONE.getFormattedUsername()));
-        assertThat(getCredentialPasswordAt(1).getPrimaryTextView().getText(),
-                is(NO_ONE.getPassword()));
-        assertThat(getCredentialPasswordAt(1).getPrimaryTextView().getTransformationMethod(),
-                instanceOf(PasswordTransformationMethod.class));
-        assertThat(getCredentialNameAt(1).isEnabled(), is(false));
-        assertThat(getCredentialNameAt(1).isClickable(), is(false));
-        assertThat(getCredentialPasswordAt(1).isEnabled(), is(true));
-        assertThat(getCredentialPasswordAt(1).isClickable(), is(true));
+        onView(withId(R.id.sheet_item_list)).perform(scrollToPosition(1)).check((view, e) -> {
+            View child = ((RecyclerView) view).findViewHolderForAdapterPosition(1).itemView;
+            assertThat(getCredentialOrigin(child).getText(), is("m.example.xyz"));
+            assertThat(getCredentialName(child).getPrimaryTextView().getText(),
+                    is(NO_ONE.getFormattedUsername()));
+            assertThat(getCredentialPassword(child).getPrimaryTextView().getText(),
+                    is(NO_ONE.getPassword()));
+            assertThat(getCredentialPassword(child).getPrimaryTextView().getTransformationMethod(),
+                    instanceOf(PasswordTransformationMethod.class));
+            assertThat(getCredentialName(child).isEnabled(), is(false));
+            assertThat(getCredentialName(child).isClickable(), is(false));
+            assertThat(getCredentialPassword(child).isEnabled(), is(true));
+            assertThat(getCredentialPassword(child).isClickable(), is(true));
+        });
 
-        assertThat(getCredentialOriginAt(2).getText(), is("facebook"));
-        assertThat(getCredentialNameAt(2).getPrimaryTextView().getText(),
-                is(BOB.getFormattedUsername()));
-        assertThat(
-                getCredentialPasswordAt(2).getPrimaryTextView().getText(), is(BOB.getPassword()));
-        assertThat(getCredentialPasswordAt(2).getPrimaryTextView().getTransformationMethod(),
-                instanceOf(PasswordTransformationMethod.class));
-        assertThat(getCredentialNameAt(2).isEnabled(), is(false));
-        assertThat(getCredentialNameAt(2).isClickable(), is(false));
-        assertThat(getCredentialPasswordAt(2).isEnabled(), is(true));
-        assertThat(getCredentialPasswordAt(2).isClickable(), is(true));
+        onView(withId(R.id.sheet_item_list)).perform(scrollToPosition(2)).check((view, e) -> {
+            View child = ((RecyclerView) view).findViewHolderForAdapterPosition(2).itemView;
+            assertThat(getCredentialOrigin(child).getText(), is("facebook"));
+            assertThat(getCredentialName(child).getPrimaryTextView().getText(),
+                    is(BOB.getFormattedUsername()));
+            assertThat(getCredentialPassword(child).getPrimaryTextView().getText(),
+                    is(BOB.getPassword()));
+            assertThat(getCredentialPassword(child).getPrimaryTextView().getTransformationMethod(),
+                    instanceOf(PasswordTransformationMethod.class));
+            assertThat(getCredentialName(child).isEnabled(), is(true));
+            assertThat(getCredentialName(child).isClickable(), is(true));
+            assertThat(getCredentialPassword(child).isEnabled(), is(true));
+            assertThat(getCredentialPassword(child).isClickable(), is(true));
+        });
+    }
+
+    @Test
+    @MediumTest
+    public void testFillingPasswordInNonPasswordFieldShowsWarningDialog()
+            throws ExecutionException {
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mAllPasswordsBottomSheetView.setVisible(true);
+            mModel.get(SHEET_ITEMS)
+                    .add(new ListItem(AllPasswordsBottomSheetProperties.ItemType.CREDENTIAL,
+                            AllPasswordsBottomSheetProperties.CredentialProperties
+                                    .createCredentialModel(
+                                            ANA, mCredentialFillRequestCallback, false)));
+        });
+
+        pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
+
+        onView(allOf(withId(R.id.password_text), isDescendantOfA(withId(R.id.sheet_item_list))))
+                .perform(click());
+
+        pollInstrumentationThread(() -> {
+            onView(withText(R.string.passwords_not_secure_filling))
+                    .inRoot(isDialog())
+                    .check(matches(isDisplayed()));
+        });
     }
 
     @Test
@@ -198,25 +244,25 @@
         verify(mSearchQueryCallback).onResult("a");
     }
 
-    // Adds three credentials items to the model.
+    // Adds three credential items to the model.
     private void addDefaultCredentialsToTheModel() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             mAllPasswordsBottomSheetView.setVisible(true);
             mModel.get(SHEET_ITEMS)
                     .add(new ListItem(AllPasswordsBottomSheetProperties.ItemType.CREDENTIAL,
                             AllPasswordsBottomSheetProperties.CredentialProperties
-                                    .createCredentialModel(
-                                            ANA, mCredentialCallback, IS_PASSWORD_FIELD)));
+                                    .createCredentialModel(ANA, mCredentialFillRequestCallback,
+                                            IS_PASSWORD_FIELD)));
             mModel.get(SHEET_ITEMS)
                     .add(new ListItem(AllPasswordsBottomSheetProperties.ItemType.CREDENTIAL,
                             AllPasswordsBottomSheetProperties.CredentialProperties
-                                    .createCredentialModel(
-                                            NO_ONE, mCredentialCallback, IS_PASSWORD_FIELD)));
+                                    .createCredentialModel(NO_ONE, mCredentialFillRequestCallback,
+                                            IS_PASSWORD_FIELD)));
             mModel.get(SHEET_ITEMS)
                     .add(new ListItem(AllPasswordsBottomSheetProperties.ItemType.CREDENTIAL,
                             AllPasswordsBottomSheetProperties.CredentialProperties
-                                    .createCredentialModel(
-                                            BOB, mCredentialCallback, IS_PASSWORD_FIELD)));
+                                    .createCredentialModel(BOB, mCredentialFillRequestCallback,
+                                            IS_PASSWORD_FIELD)));
         });
     }
     private ChromeActivity getActivity() {
@@ -236,15 +282,15 @@
                 R.id.sheet_item_list);
     }
 
-    private TextView getCredentialOriginAt(int index) {
-        return getCredentials().getChildAt(index).findViewById(R.id.password_info_title);
+    private TextView getCredentialOrigin(View parent) {
+        return parent.findViewById(R.id.password_info_title);
     }
 
-    private ChipView getCredentialNameAt(int index) {
-        return ((ChipView) getCredentials().getChildAt(index).findViewById(R.id.suggestion_text));
+    private ChipView getCredentialName(View parent) {
+        return ((ChipView) parent.findViewById(R.id.suggestion_text));
     }
 
-    private ChipView getCredentialPasswordAt(int index) {
-        return ((ChipView) getCredentials().getChildAt(index).findViewById(R.id.password_text));
+    private ChipView getCredentialPassword(View parent) {
+        return ((ChipView) parent.findViewById(R.id.password_text));
     }
 }
diff --git a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetControllerTest.java b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetControllerTest.java
index b16a9d7..94d6716 100644
--- a/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetControllerTest.java
+++ b/chrome/android/features/keyboard_accessory/junit/src/org/chromium/chrome/browser/keyboard_accessory/all_passwords_bottom_sheet/AllPasswordsBottomSheetControllerTest.java
@@ -104,9 +104,10 @@
     @Test
     public void testOnCredentialSelected() {
         mMediator.showCredentials(TEST_CREDENTIALS, IS_PASSWORD_FIELD);
-        mMediator.onCredentialSelected(TEST_CREDENTIALS[1]);
+        CredentialFillRequest request = new CredentialFillRequest(TEST_CREDENTIALS[1], true);
+        mMediator.onCredentialSelected(request);
         assertThat(mModel.get(VISIBLE), is(false));
-        verify(mMockDelegate).onCredentialSelected(TEST_CREDENTIALS[1]);
+        verify(mMockDelegate).onCredentialSelected(request);
     }
 
     @Test
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_am.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_am.xtb
index 3cdf315e..10df8bf3 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_am.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_am.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">በክፍት ትር ውስጥ ዝቅተኛ ዋጋ ሲኖር ማንቂያ ይደርስዎታል</translation>
 <translation id="3328308545011660196">የአስተያየት ጥቆማ፦ <ph name="NUMBER_OF_TABS" /> ትሮች የሚዛመዱ ይመስላሉ። ይቦደኑ?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">ለሉህ ቅድመ ዕይታን አጋራ ጥፍር አከል</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> ትርን ሰብስብ።}one{የ<ph name="TITLE_OF_GROUP" /> ትር ቡድንን ከ<ph name="TABS_COUNT_MANY" /> ትሮች ጋር ሰብስብ።}other{የ<ph name="TITLE_OF_GROUP" /> ትር ቡድንን ከ<ph name="TABS_COUNT_MANY" /> ትሮች ጋር ሰብስብ።}}</translation>
 <translation id="3882834874697329510">በክፍት ትር ውስጥ ዝቅተኛ ዋጋ ሲኖር ማንቂያ ለማግኘት በቅንብሮች ውስጥ ማሳወቂያዎችን ያብሩ።</translation>
 <translation id="3940195383040445971">በትሮች ላይ ዋጋዎችን ይከታተሉ</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">የመደብር መረጃን ይመልከቱ፣ አማራጩ ከማያ ገጹ አናት አጠገብ ይገኛል</translation>
 <translation id="5558362125926932819">የትር ቡድንን ከ<ph name="NUMBER_OF_TABS" /> ትሮች ጋር ይዝጉ</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> ትሮች ተሰብስበዋል</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> አገናኝ ከChrome}one{<ph name="TABS_COUNT_MANY" /> አገናኝ ከChrome}other{<ph name="TABS_COUNT_MANY" /> አገናኞች ከChrome}}</translation>
 <translation id="575494663145460764">ለዋጋ ቅነሳዎች ማንቂያዎችን ያግኙ?</translation>
 <translation id="58326064309361797">ለመቦደን ትሮችን ይጎትቱ</translation>
 <translation id="5846292395804797011">የ<ph name="TITLE_OF_GROUP" /> ቡድንን ከ<ph name="NUMBER_OF_TABS" /> ትሮች ጋር ይዝጉ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb
index d842cab..c4931760 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">سيصلك تنبيه عندما يتم رصد انخفاض في سعر أحد المنتجات ضِمن علامة تبويب مفتوحة.</translation>
 <translation id="3328308545011660196">اقتراح: يبدو أن هناك <ph name="NUMBER_OF_TABS" /> من علامات التبويب متشابهة. هل تريد تجميعها؟</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">صورة مصغّرة لمعاينة صفحة المشاركة</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{تصغير علامة تبويب واحدة (<ph name="TABS_COUNT_ONE" />)}zero{تصغير مجموعة علامات التبويب "<ph name="TITLE_OF_GROUP" />" التي تحتوي على <ph name="TABS_COUNT_MANY" /> علامة تبويب}two{تصغير مجموعة علامات التبويب "<ph name="TITLE_OF_GROUP" />" التي تحتوي على علامتَي تبويب (<ph name="TABS_COUNT_MANY" />)}few{تصغير مجموعة علامات التبويب "<ph name="TITLE_OF_GROUP" />" التي تحتوي على <ph name="TABS_COUNT_MANY" /> علامات تبويب}many{تصغير مجموعة علامات التبويب "<ph name="TITLE_OF_GROUP" />" التي تحتوي على <ph name="TABS_COUNT_MANY" /> علامة تبويب}other{تصغير مجموعة علامات التبويب "<ph name="TITLE_OF_GROUP" />" التي تحتوي على <ph name="TABS_COUNT_MANY" /> علامة تبويب}}</translation>
 <translation id="3882834874697329510">لتلقِّي تنبيه عندما يتم رصد انخفاض في سعر أحد المنتجات ضِمن علامة تبويب مفتوحة، فعِّل الإشعارات في الإعدادات.</translation>
 <translation id="3940195383040445971">تتبُّع الأسعار في علامات التبويب</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">عرض معلومات المتجر، وهو خيار متاح بالقرب من أعلى الشاشة</translation>
 <translation id="5558362125926932819">إغلاق مجموعة علامات التبويب التي تحتوي على <ph name="NUMBER_OF_TABS" /> علامة تبويب</translation>
 <translation id="5580090775658607195">تم جمع <ph name="TAB_COUNT" /> علامة تبويب</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{‏رابط واحد (<ph name="TABS_COUNT_ONE" />) من Chrome}zero{‏<ph name="TABS_COUNT_MANY" /> رابط من Chrome}two{‏رابطان (<ph name="TABS_COUNT_MANY" />) من Chrome}few{‏<ph name="TABS_COUNT_MANY" /> روابط من Chrome}many{‏<ph name="TABS_COUNT_MANY" /> رابطًا من Chrome}other{‏<ph name="TABS_COUNT_MANY" /> رابط من Chrome}}</translation>
 <translation id="575494663145460764">هل تريد الحصول على تنبيهات عن الأسعار المنخفضة؟</translation>
 <translation id="58326064309361797">اسحب علامات التبويب لجمعها.</translation>
 <translation id="5846292395804797011">إغلاق المجموعة "<ph name="TITLE_OF_GROUP" />" التي تحتوي على <ph name="NUMBER_OF_TABS" /> علامة تبويب</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_az.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_az.xtb
index b68c42d..7f8116b9 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_az.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_az.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Qiymət endirildikdə açıq tabda bildiriş alacaqsınız</translation>
 <translation id="3328308545011660196">Təklif: <ph name="NUMBER_OF_TABS" /> tab əlaqəli görünür. Onlar qruplaşdırılsın?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Paylaşım vərəqi önizləməsi üçün miniatür.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> tabını yığcamlaşdırın.}other{<ph name="TABS_COUNT_MANY" /> tab olan <ph name="TITLE_OF_GROUP" /> tab qrupunu yığcamlaşdırın.}}</translation>
 <translation id="3882834874697329510">Qiymət endirildikdə açıq tabda bildiriş almaq üçün Ayarlarda bildirişləri aktiv edin.</translation>
 <translation id="3940195383040445971">Tablarda qiymətləri izləyin</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Mağaza məlumatlarına baxın, seçim ekranın yuxarı hissəsində əlçatandır</translation>
 <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> tab olan tab qrupunu bağlayın</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> tab qruplaşdırıldı</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{Chrome'dan <ph name="TABS_COUNT_ONE" /> keçid}other{Chrome'dan <ph name="TABS_COUNT_MANY" /> keçid}}</translation>
 <translation id="575494663145460764">Qiymət endirimləri üçün xəbərdarlıq alınsın?</translation>
 <translation id="58326064309361797">Tabları qruplaşdırmaq üçün sürüşdürün</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> tab olan <ph name="TITLE_OF_GROUP" /> qrupunu bağlayın</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb
index 9e43c38..b36ed44 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Du får en notifikation, når der er en lavere pris på en åben fane</translation>
 <translation id="3328308545011660196">Forslag: <ph name="NUMBER_OF_TABS" /> faner ser ud til at være relateret. Vil du gruppere dem?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Miniature med forhåndsvisning af deleark.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Skjul <ph name="TABS_COUNT_ONE" /> fane.}one{Skjul fanegruppen <ph name="TITLE_OF_GROUP" /> med <ph name="TABS_COUNT_MANY" /> fane.}other{Skjul fanegruppen <ph name="TITLE_OF_GROUP" /> med <ph name="TABS_COUNT_MANY" /> faner.}}</translation>
 <translation id="3882834874697329510">Slå notifikationer til i indstillingerne for at få en underretning, når der er en lavere pris på en åben fane.</translation>
 <translation id="3940195383040445971">Følg prisudvikling på faner</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Se butiksoplysninger. Valgmuligheden findes øverst på skærmen</translation>
 <translation id="5558362125926932819">Luk fanegruppe med <ph name="NUMBER_OF_TABS" /> faner</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> faner blev grupperet</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link fra Chrome}one{<ph name="TABS_COUNT_MANY" /> link fra Chrome}other{<ph name="TABS_COUNT_MANY" /> links fra Chrome}}</translation>
 <translation id="575494663145460764">Vil du have underretninger om prisfald?</translation>
 <translation id="58326064309361797">Træk og slip faner for at gruppere dem</translation>
 <translation id="5846292395804797011">Luk gruppen <ph name="TITLE_OF_GROUP" /> med <ph name="NUMBER_OF_TABS" /> faner</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
index 603101e0..5ef2093 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Értesítést kap, ha alacsonyabb ár áll rendelkezésre az egyik megnyitott lapon.</translation>
 <translation id="3328308545011660196">Javaslat: Úgy tűnik, <ph name="NUMBER_OF_TABS" /> lap kapcsolódik egymáshoz. Csoportosítja őket?</translation>
 <translation id="3652027618765638838"><ph name="RATING_BASELINE" />/<ph name="CURRENT_RATING" /></translation>
+<translation id="374923079891132274">Megosztási lap előnézeti indexképe.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> lap összecsukása.}other{A következő, <ph name="TABS_COUNT_MANY" /> lapot tartalmazó lapcsoport összecsukása: <ph name="TITLE_OF_GROUP" />.}}</translation>
 <translation id="3882834874697329510">Ha értesítést szeretne kapni, amikor alacsonyabb ár áll rendelkezésre az egyik megnyitott lapon, kapcsolja be az értesítéseket a Beállításokban.</translation>
 <translation id="3940195383040445971">Árkövetés a megnyitott lapokon</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Az üzlet adatainak megtekintése; a lehetőség a képernyő tetején található</translation>
 <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> lapot tartalmazó lapcsoport bezárása</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> lap csoportosítva</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link a Chrome-ból}other{<ph name="TABS_COUNT_MANY" /> link a Chrome-ból}}</translation>
 <translation id="575494663145460764">Szeretne értesítéseket kapni az árcsökkenésekről?</translation>
 <translation id="58326064309361797">A lapokat húzással csoportosíthatja</translation>
 <translation id="5846292395804797011">A következő, <ph name="NUMBER_OF_TABS" /> lapot tartalmazó csoport bezárása: <ph name="TITLE_OF_GROUP" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
index 8ffa62389..592a4e09 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Anda akan mendapatkan notifikasi saat terdapat harga lebih rendah di tab yang terbuka</translation>
 <translation id="3328308545011660196">Saran: <ph name="NUMBER_OF_TABS" /> tab sepertinya berkaitan. Masukkan ke grup?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Thumbnail untuk pratinjau sheet berbagi.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Ciutkan <ph name="TABS_COUNT_ONE" /> tab.}other{Ciutkan grup tab <ph name="TITLE_OF_GROUP" /> yang berisi <ph name="TABS_COUNT_MANY" /> tab.}}</translation>
 <translation id="3882834874697329510">Untuk mendapatkan notifikasi saat terdapat harga lebih rendah di tab yang terbuka, aktifkan notifikasi di Setelan.</translation>
 <translation id="3940195383040445971">Pantau harga di tab</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Lihat info toko, opsi tersedia di dekat bagian atas layar</translation>
 <translation id="5558362125926932819">Tutup grup tab yang berisi <ph name="NUMBER_OF_TABS" /> tab</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> tab dikelompokkan</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link dari Chrome}other{<ph name="TABS_COUNT_MANY" /> link dari Chrome}}</translation>
 <translation id="575494663145460764">Dapatkan notifikasi untuk diskon?</translation>
 <translation id="58326064309361797">Tarik tab untuk mengelompokkannya</translation>
 <translation id="5846292395804797011">Tutup grup <ph name="TITLE_OF_GROUP" /> yang berisi <ph name="NUMBER_OF_TABS" /> tab</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb
index 1bdd1269..d43e1b5 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Þú færð tilkynningu þegar vara á opnum flipa lækkar í verði</translation>
 <translation id="3328308545011660196">Tillaga: <ph name="NUMBER_OF_TABS" /> flipar virðast vera tengdir. Viltu setja þá í hóp?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Smámynd til að deila forskoðun blaðs</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Draga saman <ph name="TABS_COUNT_ONE" /> flipa.}one{Draga saman <ph name="TITLE_OF_GROUP" />-flipahóp með <ph name="TABS_COUNT_MANY" /> flipa.}other{Draga saman <ph name="TITLE_OF_GROUP" />-flipahóp með <ph name="TABS_COUNT_MANY" /> flipum.}}</translation>
 <translation id="3882834874697329510">Kveiktu á tilkynningum í stillingunum til að fá tilkynningu þegar lægra verð er í boði á opnum flipa.</translation>
 <translation id="3940195383040445971">Fylgjast með verði á flipum</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Skoða upplýsingar um verslun, valkostir eru ofarlega á skjánum</translation>
 <translation id="5558362125926932819">Loka flipahópi með <ph name="NUMBER_OF_TABS" /> flipum</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> flipar sameinaðir.</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> tengill frá Chrome}one{<ph name="TABS_COUNT_MANY" /> tengill frá Chrome}other{<ph name="TABS_COUNT_MANY" /> tenglar frá Chrome}}</translation>
 <translation id="575494663145460764">Fá tilkynningar um verðlækkanir?</translation>
 <translation id="58326064309361797">Dragðu flipa til að sameina þá</translation>
 <translation id="5846292395804797011">Loka <ph name="TITLE_OF_GROUP" />-hópi með <ph name="NUMBER_OF_TABS" /> flipum</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb
index 4a6a059..719fce1 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">អ្នកនឹងទទួលបាន​ការជូនដំណឹង នៅពេលមានតម្លៃទាបជាងមុននៅក្នុងផ្ទាំងដែលកំពុងបើក</translation>
 <translation id="3328308545011660196">ការណែនាំ៖ ផ្ទាំង <ph name="NUMBER_OF_TABS" /> ហាក់ដូចជាពាក់ព័ន្ធគ្នា។ បញ្ចូលផ្ទាំងទាំងនេះទៅក្នុងក្រុមឬ?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">រូបក្របតំណាងការមើលសាកល្បងនៃបញ្ជីដែលបានចែករំលែក។</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{បង្រួមផ្ទាំង <ph name="TABS_COUNT_ONE" />។}other{បង្រួមក្រុមផ្ទាំង <ph name="TITLE_OF_GROUP" /> ដែលមាន <ph name="TABS_COUNT_MANY" />ផ្ទាំង។}}</translation>
 <translation id="3882834874697329510">ដើម្បី​ទទួលបាន​ការជូនដំណឹង នៅពេល​មានតម្លៃទាបជាងមុន​នៅក្នុងផ្ទាំងដែល​កំពុងបើក សូមបើក​ការជូនដំណឹង​នៅក្នុងការកំណត់។</translation>
 <translation id="3940195383040445971">តាមដានតម្លៃនៅក្នុងផ្ទាំង</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">មើលព័ត៌មានអំពីហាង ជម្រើសមាននៅជិតផ្នែកខាងលើអេក្រង់</translation>
 <translation id="5558362125926932819">បិទក្រុមផ្ទាំង​ដែលមាន <ph name="NUMBER_OF_TABS" />ផ្ទាំង</translation>
 <translation id="5580090775658607195">បានដាក់ផ្ទាំង <ph name="TAB_COUNT" /> ជាក្រុម</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{តំណ <ph name="TABS_COUNT_ONE" /> ពី Chrome}other{តំណ <ph name="TABS_COUNT_MANY" /> ពី Chrome}}</translation>
 <translation id="575494663145460764">ទទួលបានការជូនដំណឹងអំពីការធ្លាក់ថ្លៃឬ?</translation>
 <translation id="58326064309361797">អូសផ្ទាំង​នានា ដើម្បី​ដាក់ផ្ទាំង​ទាំងនោះ​ជាក្រុម</translation>
 <translation id="5846292395804797011">បិទក្រុម <ph name="TITLE_OF_GROUP" /> ដែលមាន <ph name="NUMBER_OF_TABS" />ផ្ទាំង</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb
index 8fd48b32..bb9cdf9 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">열려 있는 탭에 더 낮은 가격이 있으면 알림이 전송됩니다.</translation>
 <translation id="3328308545011660196">제안: 탭 <ph name="NUMBER_OF_TABS" />개가 서로 관련된 것으로 보입니다. 그룹화할까요?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">공유 시트 미리보기 썸네일</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{탭 <ph name="TABS_COUNT_ONE" />개를 접습니다.}other{탭 <ph name="TABS_COUNT_MANY" />개가 포함된 <ph name="TITLE_OF_GROUP" /> 탭 그룹을 접습니다.}}</translation>
 <translation id="3882834874697329510">열린 탭에서 더 낮은 가격이 발견되었을 때 알림을 받으려면 설정에서 알림을 사용 설정하세요.</translation>
 <translation id="3940195383040445971">탭에서 가격 추적</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">스토어 정보 보기, 화면 상단에 옵션 있음</translation>
 <translation id="5558362125926932819">탭 <ph name="NUMBER_OF_TABS" />개가 포함된 탭 그룹 닫기</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" />개의 탭 그룹화됨</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{Chrome 링크 <ph name="TABS_COUNT_ONE" />개}other{Chrome 링크 <ph name="TABS_COUNT_MANY" />개}}</translation>
 <translation id="575494663145460764">가격 인하 알림을 받으시겠습니까?</translation>
 <translation id="58326064309361797">탭을 드래그하여 그룹화하세요.</translation>
 <translation id="5846292395804797011">탭 <ph name="NUMBER_OF_TABS" />개가 포함된 <ph name="TITLE_OF_GROUP" /> 그룹 닫기</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
index 01157d9..d1c5c60 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">ທ່ານຈະໄດ້ຮັບແຈ້ງເຕືອນເມື່ອມີລາຄາຕໍ່າກວ່າໃນແຖບທີ່ເປີດຢູ່</translation>
 <translation id="3328308545011660196">ຄຳແນະນຳ: ເບິ່ງຄືວ່າມີ <ph name="NUMBER_OF_TABS" /> ແຖບທີ່ກ່ຽວຂ້ອງກັນ. ຈັດກຸ່ມພວກມັນບໍ?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">ຮູບຫຍໍ້ຕົວຢ່າງຊີດທີ່ແບ່ງປັນ.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{ຫຍໍ້ <ph name="TABS_COUNT_ONE" /> ແຖບລົງ.}other{ຫຍໍ້ກຸ່ມແຖບ <ph name="TITLE_OF_GROUP" /> ທີ່ມີ <ph name="TABS_COUNT_MANY" /> ແຖບລົງ.}}</translation>
 <translation id="3882834874697329510">ໃຫ້ເປີດໃຊ້ການແຈ້ງເຕືອນໃນການຕັ້ງຄ່າເພື່ອຮັບການແຈ້ງເຕືອນເມື່ອມີລາຄາທີ່ຕ່ຳກວ່າໃນແຖບໃດໜຶ່ງທີ່ເປີດໄວ້.</translation>
 <translation id="3940195383040445971">ຕິດຕາມລາຄາໃນແຖບ</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">ເບິ່ງຂໍ້ມູນຮ້ານຄ້າ, ມີຕົວເລືອກຢູ່ເທິງສຸດຂອງໜ້າຈໍ</translation>
 <translation id="5558362125926932819">ປິດກຸ່ມແຖບທີ່ມີ <ph name="NUMBER_OF_TABS" /> ແຖບ</translation>
 <translation id="5580090775658607195">ຈັດກຸ່ມ <ph name="TAB_COUNT" /> ແຖບແລ້ວ</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> ລິ້ງຈາກ Chrome}other{<ph name="TABS_COUNT_MANY" /> ລິ້ງຈາກ Chrome}}</translation>
 <translation id="575494663145460764">ຮັບແຈ້ງເຕືອນການຫຼຸດລາຄາບໍ?</translation>
 <translation id="58326064309361797">ລາກແຖບເພື່ອຈັດກຸ່ມພວກມັນ</translation>
 <translation id="5846292395804797011">ປິດກຸ່ມ <ph name="TITLE_OF_GROUP" /> ທີ່ມີ <ph name="NUMBER_OF_TABS" /> ແຖບ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb
index 3da1c2a..0450488e 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Gausite įspėjimą, kai atidarytame skirtuke bus sumažinta kaina</translation>
 <translation id="3328308545011660196">Pasiūlymas: skirtukai (iš viso: <ph name="NUMBER_OF_TABS" />) atrodo susiję. Grupuoti juos?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" /> iš <ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Bendrinimo lapo peržiūros miniatiūra.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Sutraukti <ph name="TABS_COUNT_ONE" /> skirtuką.}one{Sutraukti skirtukų grupę „<ph name="TITLE_OF_GROUP" />“, kurioje yra <ph name="TABS_COUNT_MANY" /> skirtukas.}few{Sutraukti skirtukų grupę „<ph name="TITLE_OF_GROUP" />“, kurioje yra <ph name="TABS_COUNT_MANY" /> skirtukai.}many{Sutraukti skirtukų grupę „<ph name="TITLE_OF_GROUP" />“, kurioje yra <ph name="TABS_COUNT_MANY" /> skirtuko.}other{Sutraukti skirtukų grupę „<ph name="TITLE_OF_GROUP" />“, kurioje yra <ph name="TABS_COUNT_MANY" /> skirtukų.}}</translation>
 <translation id="3882834874697329510">Norėdami gauti įspėjimą, kai atidarytame skirtuke bus sumažinta kaina, įjunkite pranešimus Nustatymų skiltyje.</translation>
 <translation id="3940195383040445971">Stebėti kainas skirtukuose</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Peržiūrėkite parduotuvės informaciją; parinktis pasiekiama ekrano viršuje</translation>
 <translation id="5558362125926932819">Uždaryti skirtukų grupę, kurioje yra tiek skirtukų: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="5580090775658607195">Sugrupuota tiek skirtukų: <ph name="TAB_COUNT" /></translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> nuoroda iš „Chrome“}one{<ph name="TABS_COUNT_MANY" /> nuoroda iš „Chrome“}few{<ph name="TABS_COUNT_MANY" /> nuorodos iš „Chrome“}many{<ph name="TABS_COUNT_MANY" /> nuorodos iš „Chrome“}other{<ph name="TABS_COUNT_MANY" /> nuorodų iš „Chrome“}}</translation>
 <translation id="575494663145460764">Norite gauti įspėjimus apie sumažintas kainas?</translation>
 <translation id="58326064309361797">Vilkite skirtukus, kad juos sugrupuotumėte</translation>
 <translation id="5846292395804797011">Uždaryti grupę „<ph name="TITLE_OF_GROUP" />“, kurioje yra tiek skirtukų: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lv.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lv.xtb
index 6e2d631..21be989 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lv.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lv.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Jūs saņemsiet brīdinājumu, kad kādā atvērtajā cilnē būs pieejama zemāka cena.</translation>
 <translation id="3328308545011660196">Ieteikums: šķiet, ka <ph name="NUMBER_OF_TABS" /> cilnes ir saistītas. Vai grupēt tās?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Kopīgošanas sīktēls</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Sakļaut <ph name="TABS_COUNT_ONE" /> cilni.}zero{Sakļaut ciļņu grupu “<ph name="TITLE_OF_GROUP" />”, kurā ir <ph name="TABS_COUNT_MANY" /> cilnes.}one{Sakļaut ciļņu grupu “<ph name="TITLE_OF_GROUP" />”, kurā ir <ph name="TABS_COUNT_MANY" /> cilne.}other{Sakļaut ciļņu grupu “<ph name="TITLE_OF_GROUP" />”, kurā ir <ph name="TABS_COUNT_MANY" /> cilnes.}}</translation>
 <translation id="3882834874697329510">Lai saņemtu brīdinājumu, kad kādā atvērtajā cilnē būs pieejama zemāka cena, ieslēdziet paziņojumu saņemšanu sadaļā Iestatījumi.</translation>
 <translation id="3940195383040445971">Cenu izsekošana cilnēs</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Skatiet veikala informāciju; opcija ir pieejama ekrāna augšdaļā</translation>
 <translation id="5558362125926932819">Aizvērt ciļņu grupu. Ciļņu skaits šajā grupā ir <ph name="NUMBER_OF_TABS" />.</translation>
 <translation id="5580090775658607195">Grupētas <ph name="TAB_COUNT" /> cilnes</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> saite no pārlūka Chrome}zero{<ph name="TABS_COUNT_MANY" /> saišu no pārlūka Chrome}one{<ph name="TABS_COUNT_MANY" /> saite no pārlūka Chrome}other{<ph name="TABS_COUNT_MANY" /> saites no pārlūka Chrome}}</translation>
 <translation id="575494663145460764">Vai saņemt brīdinājumus par cenu kritumu?</translation>
 <translation id="58326064309361797">Velciet cilnes, lai tās sagrupētu</translation>
 <translation id="5846292395804797011">Aizvērt ciļņu grupu “<ph name="TITLE_OF_GROUP" />”. Ciļņu skaits šajā grupā ir <ph name="NUMBER_OF_TABS" />.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb
index 79a887e..7fc8aa86 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Та нээлттэй табд илүү хямд үнэ байгаа тохиолдолд сэрэмжлүүлэг авна</translation>
 <translation id="3328308545011660196">Зөвлөмж: <ph name="NUMBER_OF_TABS" /> таб холбоотой бололтой. Эдгээрийг бүлэглэх үү?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Хуваалцах хүснэгтийн урьдчилсан үзэлтийн өнгөц зураг.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> табыг хураах.}other{<ph name="TABS_COUNT_MANY" /> таб бүхий <ph name="TITLE_OF_GROUP" /> бүлэг табыг хураах.}}</translation>
 <translation id="3882834874697329510">Та нээлттэй табд илүү хямд үнэ байгаа тохиолдолд сэрэмжлүүлэг авахын тулд Тохиргоо хэсэгт мэдэгдлийг асаана уу.</translation>
 <translation id="3940195383040445971">Табууд дээрх үнийг хянах</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Дэлгэцийн дээд хэсгийн ойролцоо боломжтой дэлгүүрийн мэдээллийг үзэх сонголт</translation>
 <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> таб бүхий бүлэг табыг хаах.</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> табыг бүлэглэсэн</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{Chrome-н <ph name="TABS_COUNT_ONE" /> холбоос}other{Chrome-н <ph name="TABS_COUNT_MANY" /> холбоос}}</translation>
 <translation id="575494663145460764">Үнэ бууралтын сэрэмжлүүлэг авах уу?</translation>
 <translation id="58326064309361797">Бүлэглэхийн тулд табыг чирж зөөнө үү</translation>
 <translation id="5846292395804797011"><ph name="NUMBER_OF_TABS" /> таб бүхий <ph name="TITLE_OF_GROUP" /> бүлгийг хаах</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb
index 6fdc6a1..8f37bd7 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">ဖွင့်ထားသောတဘ်တွင် ဈေးကျသွားသည့်အခါ သတိပေးချက် ရရှိပါမည်</translation>
 <translation id="3328308545011660196">အကြံပြုချက်- တဘ် <ph name="NUMBER_OF_TABS" /> ခုက ဆက်စပ်ပုံပေါ်သည်။ ၎င်းတို့ကို အုပ်စုဖွဲ့မလား။</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">စာမျက်နှာအစမ်းကြည့်ရှုမှု မျှဝေရန်ပုံသေး။</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> တဘ်ကို ခေါက်ပါ။}other{တဘ် <ph name="TABS_COUNT_MANY" /> ခုဖြင့် အုပ်စုဖွဲ့ထားသည့် <ph name="TITLE_OF_GROUP" /> တဘ်ကို ပြန်ခေါက်ပါ။}}</translation>
 <translation id="3882834874697329510">ဖွင့်ထားသောတဘ်တွင် ဈေးကျသွားသည့်အခါ သတိပေးချက်ရရှိရန် ‘ဆက်တင်များ’ တွင် အကြောင်းကြားချက်များကို ဖွင့်ပါ။</translation>
 <translation id="3940195383040445971">တဘ်များတွင် ဈေးနှုန်းများစောင့်ကြည့်ရန်</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">ဆိုင်အချက်အလက် ကြည့်ရန် ရွေးချယ်စရာကို ဖန်သားပြင်ထိပ်ပိုင်းအနီးတွင် ရနိုင်သည်</translation>
 <translation id="5558362125926932819">တဘ် <ph name="NUMBER_OF_TABS" /> ခုပါသော တဘ်အုပ်စုကို ပိတ်ရန်</translation>
 <translation id="5580090775658607195">တဘ် <ph name="TAB_COUNT" /> ခုကို အုပ်စုဖွဲ့ထားသည်</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{Chrome ထံမှ လင့်ခ် <ph name="TABS_COUNT_ONE" /> ခု}other{Chrome ထံမှ လင့်ခ် <ph name="TABS_COUNT_MANY" /> ခု}}</translation>
 <translation id="575494663145460764">ဈေးကျသွားသည်များအတွက် သတိပေးချက် ရယူမလား။</translation>
 <translation id="58326064309361797">တဘ်များကို အုပ်စုဖွဲ့ရန် ၎င်းတို့ကို ဖိဆွဲပါ</translation>
 <translation id="5846292395804797011">တဘ် <ph name="NUMBER_OF_TABS" /> ခုဖြင့် <ph name="TITLE_OF_GROUP" /> အုပ်စုကို ပိတ်ရန်</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb
index c1407c1..1f449bd8 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Você receberá um alerta quando houver um preço menor em uma guia aberta</translation>
 <translation id="3328308545011660196">Sugestão: <ph name="NUMBER_OF_TABS" /> guias parecem ser relacionadas. Agrupá-las?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Miniatura da página de compartilhamento.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Recolher <ph name="TABS_COUNT_ONE" /> guia.}one{Recolher <ph name="TITLE_OF_GROUP" /> grupo de guias com <ph name="TABS_COUNT_MANY" /> guia.}other{Recolher <ph name="TITLE_OF_GROUP" /> grupo de guias com <ph name="TABS_COUNT_MANY" /> guias.}}</translation>
 <translation id="3882834874697329510">Para receber um alerta quando houver um preço menor em uma guia aberta, ative as notificações nas configurações.</translation>
 <translation id="3940195383040445971">Monitorar preço nas guias</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Ver informações da loja, opção disponível perto da parte superior da tela</translation>
 <translation id="5558362125926932819">Fechar grupo de guias com <ph name="NUMBER_OF_TABS" /> guias</translation>
 <translation id="5580090775658607195">Guias agrupadas: <ph name="TAB_COUNT" /></translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link do Chrome}one{<ph name="TABS_COUNT_MANY" /> link do Chrome}other{<ph name="TABS_COUNT_MANY" /> links do Chrome}}</translation>
 <translation id="575494663145460764">Receber alertas de reduções no preço?</translation>
 <translation id="58326064309361797">Arraste as guias para agrupá-las</translation>
 <translation id="5846292395804797011">Fechar grupo "<ph name="TITLE_OF_GROUP" />" com <ph name="NUMBER_OF_TABS" /> guias</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb
index 80f50878..5e461c6 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Если цена на открытой вкладке снизится, вы получите оповещение.</translation>
 <translation id="3328308545011660196">Подсказка: обнаружены похожие вкладки (<ph name="NUMBER_OF_TABS" />). Сгруппировать их?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Значок для отпр. предпросм. листа</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Свернуть <ph name="TABS_COUNT_ONE" /> вкладку.}one{Свернуть группу из <ph name="TABS_COUNT_MANY" /> вкладки под названием "<ph name="TITLE_OF_GROUP" />".}few{Свернуть группу из <ph name="TABS_COUNT_MANY" /> вкладок под названием "<ph name="TITLE_OF_GROUP" />".}many{Свернуть группу из <ph name="TABS_COUNT_MANY" /> вкладок под названием "<ph name="TITLE_OF_GROUP" />".}other{Свернуть группу из <ph name="TABS_COUNT_MANY" /> вкладки под названием "<ph name="TITLE_OF_GROUP" />".}}</translation>
 <translation id="3882834874697329510">Чтобы получать оповещения о снижении цены на открытой вкладке, включите уведомления в настройках.</translation>
 <translation id="3940195383040445971">Отслеживать цены на вкладках</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Просмотр сведений о магазине, параметр вверху экрана</translation>
 <translation id="5558362125926932819">Закрыть группу вкладок. Количество вкладок в ней – <ph name="NUMBER_OF_TABS" />.</translation>
 <translation id="5580090775658607195">Вкладки сгруппированы (всего <ph name="TAB_COUNT" />).</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> ссылка из Chrome}one{<ph name="TABS_COUNT_MANY" /> ссылка из Chrome}few{<ph name="TABS_COUNT_MANY" /> ссылки из Chrome}many{<ph name="TABS_COUNT_MANY" /> ссылок из Chrome}other{<ph name="TABS_COUNT_MANY" /> ссылки из Chrome}}</translation>
 <translation id="575494663145460764">Получать оповещения о скидках?</translation>
 <translation id="58326064309361797">Перетаскивайте вкладки, чтобы группировать их</translation>
 <translation id="5846292395804797011">Закрыть группу вкладок "<ph name="TITLE_OF_GROUP" />". Количество вкладок в ней – <ph name="NUMBER_OF_TABS" />.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
index d1ad745f..977d62b 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">විවෘත ටැබයක අඩු මිලක් ඇති විට ඔබට ඇඟවීමක් ලැබෙනු ඇත</translation>
 <translation id="3328308545011660196">යෝජනාව: පටිති <ph name="NUMBER_OF_TABS" /> ක් අදාළ බව පෙනේ. ඒවා සමූහ කරන්නද?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">පත්‍රය බෙදා ගැනීමේ පෙරදසුන සඳහා සිඟිති රුව.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{ටැබ <ph name="TABS_COUNT_ONE" />ක් හකුළන්න.}one{<ph name="TITLE_OF_GROUP" /> ටැබ සමූහය ටැබ <ph name="TABS_COUNT_MANY" />ක් සමග හකුළන්න.}other{<ph name="TITLE_OF_GROUP" /> ටැබ සමූහය ටැබ <ph name="TABS_COUNT_MANY" />ක් සමග හකුළන්න.}}</translation>
 <translation id="3882834874697329510">විවෘත ටැබ් එකක අඩු මිලක් ඇති විට ඇඟවීමක් ලබා ගැනීමට, සැකසීම්වල දැනුම්දීම් ක්‍රියාත්මක කරන්න.</translation>
 <translation id="3940195383040445971">ටැබවල මිල ගණන් හඹා යන්න</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">අලෙවිසැල් තොරතුරු බලන්න, තිරයේ ඉහළින්ම ඇති විකල්පය</translation>
 <translation id="5558362125926932819">ටැබ සමූහය ටැබ <ph name="NUMBER_OF_TABS" />ක් සමග වසන්න</translation>
 <translation id="5580090775658607195">පටිති <ph name="TAB_COUNT" /> සමූහගත කළා</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{Chrome වෙතින් <ph name="TABS_COUNT_ONE" /> සබැඳියක්}one{Chrome වෙතින් සබැඳි <ph name="TABS_COUNT_MANY" />ක්}other{Chrome වෙතින් සබැඳි <ph name="TABS_COUNT_MANY" />ක්}}</translation>
 <translation id="575494663145460764">මිල පහත වැටීම් සඳහා ඇඟවීම් ලබා ගන්නද?</translation>
 <translation id="58326064309361797">පටිති කණ්ඩායම් කිරීමට ඒවා අදින්න</translation>
 <translation id="5846292395804797011"><ph name="TITLE_OF_GROUP" /> සමූහය ටැබ <ph name="NUMBER_OF_TABS" />ක් සමග දිග හරින්න</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sl.xtb
index 12479e88..83db64c 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sl.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sl.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Ko bo na odprtem zavihku nižja cena, boste prejeli opozorilo.</translation>
 <translation id="3328308545011660196">Predlog: Videti je, da je toliko sorodnih zavihkov: <ph name="NUMBER_OF_TABS" />. Jih želite uvrstiti v skupino?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Sličica za predogled deljenega lista.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Strni <ph name="TABS_COUNT_ONE" /> zavihek.}one{Strni skupino zavihkov <ph name="TITLE_OF_GROUP" /> s/z <ph name="TABS_COUNT_MANY" /> zavihkom.}two{Strni skupino zavihkov <ph name="TITLE_OF_GROUP" /> s/z <ph name="TABS_COUNT_MANY" /> zavihkoma.}few{Strni skupino zavihkov <ph name="TITLE_OF_GROUP" /> s/z <ph name="TABS_COUNT_MANY" /> zavihki.}other{Strni skupino zavihkov <ph name="TITLE_OF_GROUP" /> s/z <ph name="TABS_COUNT_MANY" /> zavihki.}}</translation>
 <translation id="3882834874697329510">Če želite prejeti opozorilo, ko bo na odprtem zavihku nižja cena, v nastavitvah vklopite obvestila.</translation>
 <translation id="3940195383040445971">Spremljanje cen na zavihkih</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Ogled podatkov o trgovini, možnosti so na voljo pri vrhu zaslona</translation>
 <translation id="5558362125926932819">Zapri skupino zavihkov s toliko zavihki: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="5580090775658607195">Št. združenih zavihkov: <ph name="TAB_COUNT" /></translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> povezava iz Chroma}one{<ph name="TABS_COUNT_MANY" /> povezava iz Chroma}two{<ph name="TABS_COUNT_MANY" /> povezavi iz Chroma}few{<ph name="TABS_COUNT_MANY" /> povezave iz Chroma}other{<ph name="TABS_COUNT_MANY" /> povezav iz Chroma}}</translation>
 <translation id="575494663145460764">Želite prejemati opozorila za znižanja cen?</translation>
 <translation id="58326064309361797">Povlecite zavihke, če jih želite združiti v skupino</translation>
 <translation id="5846292395804797011">Zapri skupino <ph name="TITLE_OF_GROUP" /> s toliko zavihki: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr-Latn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr-Latn.xtb
index f25bbfd..d01560dd 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr-Latn.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr-Latn.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Dobićete obaveštenje kada postoji niža cena na otvorenoj kartici</translation>
 <translation id="3328308545011660196">Predlog: Kartice (<ph name="NUMBER_OF_TABS" />) deluju povezano. Želite li da ih grupišete?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" /> od <ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Sličica, pregled tabele za deljenje.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Skupite <ph name="TABS_COUNT_ONE" /> karticu.}one{Skupite grupu <ph name="TITLE_OF_GROUP" /> sa <ph name="TABS_COUNT_MANY" /> karticom.}few{Skupite grupu <ph name="TITLE_OF_GROUP" /> sa <ph name="TABS_COUNT_MANY" /> kartice.}other{Skupite grupu <ph name="TITLE_OF_GROUP" /> sa <ph name="TABS_COUNT_MANY" /> kartica.}}</translation>
 <translation id="3882834874697329510">Da biste dobili obaveštenje kada postoji niža cena na otvorenoj kartici, uključite obaveštenja u Podešavanjima.</translation>
 <translation id="3940195383040445971">Prati cene na karticama</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Pregledajte informacije o prodavnici, opciju koja je dostupna u vrhu ekrana</translation>
 <translation id="5558362125926932819">Zatvorite grupu od kartica: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="5580090775658607195">Kartice su grupisane (<ph name="TAB_COUNT" />)</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> link iz Chrome-a}one{<ph name="TABS_COUNT_MANY" /> link iz Chrome-a}few{<ph name="TABS_COUNT_MANY" /> linka iz Chrome-a}other{<ph name="TABS_COUNT_MANY" /> linkova iz Chrome-a}}</translation>
 <translation id="575494663145460764">Želite da dobijate obaveštenja za sniženja?</translation>
 <translation id="58326064309361797">Prevucite kartice da biste ih grupisali</translation>
 <translation id="5846292395804797011">Zatvorite grupu <ph name="TITLE_OF_GROUP" /> sa kartica: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr.xtb
index 08bd419..9494f502 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Добићете обавештење када постоји нижа цена на отвореној картици</translation>
 <translation id="3328308545011660196">Предлог: Картице (<ph name="NUMBER_OF_TABS" />) делују повезано. Желите ли да их групишете?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" /> од <ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Сличица, преглед табеле за дељење.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Скупите <ph name="TABS_COUNT_ONE" /> картицу.}one{Скупите групу <ph name="TITLE_OF_GROUP" /> са <ph name="TABS_COUNT_MANY" /> картицом.}few{Скупите групу <ph name="TITLE_OF_GROUP" /> са <ph name="TABS_COUNT_MANY" /> картице.}other{Скупите групу <ph name="TITLE_OF_GROUP" /> са <ph name="TABS_COUNT_MANY" /> картица.}}</translation>
 <translation id="3882834874697329510">Да бисте добили обавештење када постоји нижа цена на отвореној картици, укључите обавештења у Подешавањима.</translation>
 <translation id="3940195383040445971">Прати цене на картицама</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Прегледајте информације о продавници, опцију која је доступна у врху екрана</translation>
 <translation id="5558362125926932819">Затворите групу од картица: <ph name="NUMBER_OF_TABS" /></translation>
 <translation id="5580090775658607195">Картице су груписане (<ph name="TAB_COUNT" />)</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> линк из Chrome-а}one{<ph name="TABS_COUNT_MANY" /> линк из Chrome-а}few{<ph name="TABS_COUNT_MANY" /> линкa из Chrome-а}other{<ph name="TABS_COUNT_MANY" /> линковa из Chrome-а}}</translation>
 <translation id="575494663145460764">Желите да добијате обавештења за снижења?</translation>
 <translation id="58326064309361797">Превуците картице да бисте их груписали</translation>
 <translation id="5846292395804797011">Затворите групу <ph name="TITLE_OF_GROUP" /> са картица: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb
index 93ffccb..a9ae3731 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">کھلے ہوئے ٹیب میں قیمت کم ہونے پر آپ کو الرٹ کیا جائے گا</translation>
 <translation id="3328308545011660196">تجویز: <ph name="NUMBER_OF_TABS" /> ٹیبز متعلقہ معلوم ہوتے ہیں۔ ان کی گروپ بندی کریں؟</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">شیٹ پیش منظر شیئر کریں کیلئے تھمب نیل</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> ٹیب کو سکیڑیں۔}other{<ph name="TITLE_OF_GROUP" /> ٹیب گروپ کو <ph name="TABS_COUNT_MANY" /> ٹیبز کے ساتھ سکیڑیں۔}}</translation>
 <translation id="3882834874697329510">کھلے ہوئے ٹیب میں کم قیمت ہونے پر الرٹ حاصل کرنے کے لئے، ترتیبات میں موجود اطلاعات آن کریں۔</translation>
 <translation id="3940195383040445971">ٹیبز پر قیمتیں ٹریک کریں</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">اسٹور کی معلومات دیکھنے کا اختیار اسکرین کے اوپری حصے کے قریپ دستیاب ہے</translation>
 <translation id="5558362125926932819">ٹیب گروپ کو <ph name="NUMBER_OF_TABS" /> ٹیبز کے ساتھ بند کریں</translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> ٹیبز کا گروپ بن گیا</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{‏Chrome سے <ph name="TABS_COUNT_ONE" /> لنک}other{‏Chrome سے <ph name="TABS_COUNT_MANY" /> لنکس}}</translation>
 <translation id="575494663145460764">قیمتوں میں کمی کے لیے الرٹس حاصل کریں؟</translation>
 <translation id="58326064309361797">ان کی گروپ بندی کرنے کے لیے ٹیبز کو گھسیٹیں</translation>
 <translation id="5846292395804797011"><ph name="TITLE_OF_GROUP" /> گروپ کو <ph name="NUMBER_OF_TABS" /> ٹیبز کے ساتھ بند کریں</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_vi.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_vi.xtb
index 5fed3410..bd7aa3fb 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_vi.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_vi.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Bạn sẽ nhận được thông báo khi có ưu đãi giảm giá trong một thẻ đang mở</translation>
 <translation id="3328308545011660196">Đề xuất: <ph name="NUMBER_OF_TABS" /> thẻ có vẻ liên quan đến nhau. Bạn có muốn nhóm các thẻ đó lại không?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Hình thu nhỏ để xem trước trang tính chia sẻ.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Thu gọn <ph name="TABS_COUNT_ONE" /> thẻ.}other{Thu gọn nhóm thẻ <ph name="TITLE_OF_GROUP" /> có <ph name="TABS_COUNT_MANY" /> thẻ.}}</translation>
 <translation id="3882834874697329510">Để nhận thông báo khi có ưu đãi giảm giá trong một thẻ đang mở, hãy bật thông báo trong phần Cài đặt.</translation>
 <translation id="3940195383040445971">Theo dõi giá trên thẻ</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Xem thông tin cửa hàng, tùy chọn này nằm ở gần đầu màn hình</translation>
 <translation id="5558362125926932819">Đóng nhóm thẻ có <ph name="NUMBER_OF_TABS" /> thẻ</translation>
 <translation id="5580090775658607195">Đã nhóm <ph name="TAB_COUNT" /> thẻ</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> đường liên kết từ Chrome}other{<ph name="TABS_COUNT_MANY" /> đường liên kết từ Chrome}}</translation>
 <translation id="575494663145460764">Nhận thông báo khi có mặt hàng giảm giá?</translation>
 <translation id="58326064309361797">Kéo các thẻ để nhóm lại với nhau</translation>
 <translation id="5846292395804797011">Đóng nhóm <ph name="TITLE_OF_GROUP" /> có <ph name="NUMBER_OF_TABS" /> thẻ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb
index 2e1cf55..7f024cd 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb
@@ -32,7 +32,7 @@
 <translation id="3291470810748040983">當開啟的分頁中有產品降價,您就會收到通知</translation>
 <translation id="3328308545011660196">建議:似乎有 <ph name="NUMBER_OF_TABS" /> 個相關嘅分頁。要唔要將佢哋分組?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
-<translation id="374923079891132274">分享功能表預覽畫面縮圖。</translation>
+<translation id="374923079891132274">分享表單預覽畫面縮圖。</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{收合 <ph name="TABS_COUNT_ONE" /> 個分頁。}other{收合有 <ph name="TABS_COUNT_MANY" /> 個分頁嘅「<ph name="TITLE_OF_GROUP" />」分頁群組。}}</translation>
 <translation id="3882834874697329510">如要在開啟的分頁有降價產品時收到通知,請在「設定」中啟用通知功能。</translation>
 <translation id="3940195383040445971">在分頁上追蹤價格</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb
index 7b08a65..235cbcb 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb
@@ -32,6 +32,7 @@
 <translation id="3291470810748040983">Uzothola isexwayiso lapho kukhona intengo ephansi kuthebhu evuliwe</translation>
 <translation id="3328308545011660196">Isiphakamiso: amathebhu a-<ph name="NUMBER_OF_TABS" /> abonakala ahlobene. Wenze iqembu?</translation>
 <translation id="3652027618765638838"><ph name="CURRENT_RATING" />/<ph name="RATING_BASELINE" /></translation>
+<translation id="374923079891132274">Isithonjana sokwabelana ngokuhlola kuqala kweshidi.</translation>
 <translation id="3819916404117584598">{TABS_COUNT,plural, =1{Goqa ithebhu engu-<ph name="TABS_COUNT_ONE" />.}one{Goqa iqembu lethebhu engu-<ph name="TITLE_OF_GROUP" /> enamathebhu angu-<ph name="TABS_COUNT_MANY" />.}other{Goqa iqembu lethebhu engu-<ph name="TITLE_OF_GROUP" /> enamathebhu angu-<ph name="TABS_COUNT_MANY" />.}}</translation>
 <translation id="3882834874697329510">Ukuze uthole isexwayiso lapho kukhona intengo ephansi kuthebhu evuliwe, vula izaziso kokuthi Amasethingi.</translation>
 <translation id="3940195383040445971">Landelela izintengo kumathebhu</translation>
@@ -56,6 +57,7 @@
 <translation id="5556417849629758491">Buka ulwazi lwesitoreji, inketho itholakala eduze naphezulu kwesikrini</translation>
 <translation id="5558362125926932819">Vala iqembu lethebhu ngamathebhu angu-<ph name="NUMBER_OF_TABS" /></translation>
 <translation id="5580090775658607195"><ph name="TAB_COUNT" /> amathebhu aqoqiwe</translation>
+<translation id="5656738671621697952">{TABS_COUNT,plural, =1{Ilinki engu-<ph name="TABS_COUNT_ONE" /> esuka ku-Chrome}one{Amalinki angu-<ph name="TABS_COUNT_MANY" /> asuka ku-Chrome}other{Amalinki angu-<ph name="TABS_COUNT_MANY" /> asuka ku-Chrome}}</translation>
 <translation id="575494663145460764">Thola izexwayiso zokwehla kwentengo?</translation>
 <translation id="58326064309361797">Hudula amathebhu ukuze uwafake eqenjini</translation>
 <translation id="5846292395804797011">Vala iqembu elingu-<ph name="TITLE_OF_GROUP" /> lamathebhu angu-<ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
index 170e719..ac0c4cf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunFlowSequencer.java
@@ -98,7 +98,7 @@
             SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(
                     Profile.getLastUsedRegularProfile());
             return FirstRunUtils.canAllowSync() && !signinManager.isSigninDisabledByPolicy()
-                    && signinManager.isSigninSupported();
+                    && signinManager.isSigninSupported(/*requireUpdatedPlayServices=*/false);
         }
 
         /** @return true if first use hints should be skipped. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
index a1f1cc2..7af5f3b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
@@ -115,7 +115,8 @@
         final boolean isAccountsCachePopulated =
                 AccountManagerFacadeProvider.getInstance().getAccounts().isFulfilled();
         boolean canShowPersonalizedSigninPromo = mSigninManager.isSigninAllowed()
-                && mCanShowPersonalizedSuggestions && isAccountsCachePopulated;
+                && mCanShowPersonalizedSuggestions && isAccountsCachePopulated
+                && mSigninManager.isSigninSupported(/*requireUpdatedPlayServices=*/true);
         boolean canShowPersonalizedSyncPromo = mSigninManager.isSyncOptInAllowed()
                 && isUserSignedInButNotSyncing() && mCanShowPersonalizedSuggestions
                 && isAccountsCachePopulated;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
index c72bed9..e2027bb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
@@ -143,7 +143,7 @@
         super.onStart();
         SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(
                 Profile.getLastUsedRegularProfile());
-        if (signinManager.isSigninSupported()) {
+        if (signinManager.isSigninSupported(/*requireUpdatedPlayServices=*/false)) {
             signinManager.addSignInStateObserver(this);
         }
         SyncService syncService = SyncService.get();
@@ -157,7 +157,7 @@
         super.onStop();
         SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(
                 Profile.getLastUsedRegularProfile());
-        if (signinManager.isSigninSupported()) {
+        if (signinManager.isSigninSupported(/*requireUpdatedPlayServices=*/false)) {
             signinManager.removeSignInStateObserver(this);
         }
         SyncService syncService = SyncService.get();
@@ -246,7 +246,7 @@
     private void updatePreferences() {
         if (IdentityServicesProvider.get()
                         .getSigninManager(Profile.getLastUsedRegularProfile())
-                        .isSigninSupported()) {
+                        .isSigninSupported(/*requireUpdatedPlayServices=*/false)) {
             addPreferenceIfAbsent(PREF_SIGN_IN);
         } else {
             removePreferenceIfPresent(PREF_SIGN_IN);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
index bd062822..1836849 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
@@ -168,7 +168,7 @@
     public boolean isSigninAllowed() {
         return mSignInState == null && mSigninAllowedByPolicy
                 && mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN) == null
-                && isSigninSupported();
+                && isSigninSupported(/*requireUpdatedPlayServices=*/false);
     }
 
     /**
@@ -178,7 +178,7 @@
     public boolean isSyncOptInAllowed() {
         return mSignInState == null && mSigninAllowedByPolicy
                 && mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SYNC) == null
-                && isSigninSupported();
+                && isSigninSupported(/*requireUpdatedPlayServices=*/false);
     }
 
     /** Returns true if sign out can be started now. */
@@ -198,12 +198,20 @@
     }
 
     /**
-     * @return Whether true if the current user is not demo user and the user has a reasonable
-     *         Google Play Services installed.
+     * Returns whether the user can sign-in (maybe after an update to Google Play services).
+     * @param requireUpdatedPlayServices Indicates whether an updated version of play services is
+     *         required or not.
      */
     @Override
-    public boolean isSigninSupported() {
-        return !ApiCompatibilityUtils.isDemoUser() && isGooglePlayServicesPresent();
+    public boolean isSigninSupported(boolean requireUpdatedPlayServices) {
+        if (ApiCompatibilityUtils.isDemoUser()) {
+            return false;
+        }
+        if (requireUpdatedPlayServices) {
+            return ExternalAuthUtils.getInstance().canUseGooglePlayServices();
+        }
+        return !ExternalAuthUtils.getInstance().isGooglePlayServicesMissing(
+                ContextUtils.getApplicationContext());
     }
 
     /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcherTest.java
index feec042..cf3f7052 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcherTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcherTest.java
@@ -25,6 +25,7 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
+import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
 import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
 import org.chromium.chrome.test.util.browser.webapps.WebApkIntentDataProviderBuilder;
 import org.chromium.chrome.test.util.browser.webapps.WebappTestPage;
@@ -193,6 +194,7 @@
     @Test
     @MediumTest
     @Feature({"Webapps"})
+    @DisableFeatures(ChromeFeatureList.WEB_APK_UNIQUE_ID)
     public void testLaunchWithDifferentManifestUrl() throws Exception {
         WebappTestPage.navigateToServiceWorkerPageWithManifest(
                 mTestServerRule.getServer(), mTab, WEB_MANIFEST_URL1);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/base/SplitPreloaderTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/base/SplitPreloaderTest.java
index 145f0c9..fecca641 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/base/SplitPreloaderTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/base/SplitPreloaderTest.java
@@ -120,12 +120,18 @@
     @Before
     public void setUp() {
         mContext = new MainContext(ContextUtils.getApplicationContext());
+        ContextUtils.initApplicationContextForTests(mContext);
         mPreloader = new SplitPreloader(mContext);
     }
 
+    private void initSplits(String... names) {
+        mContext.getApplicationInfo().splitNames = names;
+        mContext.getApplicationInfo().splitSourceDirs = names;
+    }
+
     @Test
     public void testPreload_splitInstalled() {
-        mContext.getApplicationInfo().splitNames = new String[] {SPLIT_A};
+        initSplits(SPLIT_A);
 
         mPreloader.preload(SPLIT_A, null);
         mPreloader.wait(SPLIT_A);
@@ -136,7 +142,7 @@
 
     @Test
     public void testPreload_withOnComplete_splitInstalled() {
-        mContext.getApplicationInfo().splitNames = new String[] {SPLIT_A};
+        initSplits(SPLIT_A);
 
         OnCompleteTracker tracker = new OnCompleteTracker();
         mPreloader.preload(SPLIT_A, tracker);
@@ -152,7 +158,7 @@
 
     @Test
     public void testPreload_multipleWaitCalls() {
-        mContext.getApplicationInfo().splitNames = new String[] {SPLIT_A};
+        initSplits(SPLIT_A);
 
         OnCompleteTracker tracker = new OnCompleteTracker();
         mPreloader.preload(SPLIT_A, tracker);
@@ -168,7 +174,7 @@
 
     @Test
     public void testPreload_withOnComplete_multipleSplitsInstalled() {
-        mContext.getApplicationInfo().splitNames = new String[] {SPLIT_A, SPLIT_B};
+        initSplits(SPLIT_A, SPLIT_B);
 
         OnCompleteTracker trackerA = new OnCompleteTracker();
         mPreloader.preload(SPLIT_A, trackerA);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
index 4b565f10..f737637 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
@@ -19,6 +19,9 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.content.Context;
+import android.os.UserManager;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -28,11 +31,13 @@
 import org.mockito.ArgumentCaptor;
 import org.mockito.InOrder;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 import org.mockito.quality.Strictness;
 import org.mockito.stubbing.Answer;
 import org.robolectric.annotation.LooperMode;
+import org.robolectric.shadows.ShadowApplication;
 import org.robolectric.shadows.ShadowLooper;
 
 import org.chromium.base.test.BaseRobolectricTestRunner;
@@ -127,6 +132,7 @@
         when(mNativeMock.isSigninAllowedByPolicy(NATIVE_SIGNIN_MANAGER)).thenReturn(true);
         // Pretend Google Play services are available as it is required for the sign-in
         when(mExternalAuthUtils.isGooglePlayServicesMissing(any())).thenReturn(false);
+        when(mExternalAuthUtils.canUseGooglePlayServices()).thenReturn(true);
         when(mProfile.isChild()).thenReturn(false);
         doAnswer(invocation -> {
             Runnable runnable = invocation.getArgument(0);
@@ -524,4 +530,16 @@
 
         assertFalse(mSigninManager.isSignOutAllowed());
     }
+
+    @Test
+    public void signInShouldBeSupportedForNonDemoUsers() {
+        // Make sure that the user is not a demo user.
+        ShadowApplication shadowApplication = ShadowApplication.getInstance();
+        UserManager userManager = Mockito.mock(UserManager.class);
+        Mockito.when(userManager.isDemoUser()).thenReturn(false);
+        shadowApplication.setSystemService(Context.USER_SERVICE, userManager);
+
+        assertTrue(mSigninManager.isSigninSupported(true));
+        assertTrue(mSigninManager.isSigninSupported(false));
+    }
 }
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 61053a5c..f8edcba 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1466,7 +1466,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Let wel:<ph name="END_BOLD" /> Die stelsel sal tydens die proses herselflaai.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" het bykomende toestemmings versoek.</translation>
-<translation id="23055578400314116">Kies 'n gebruikernaam</translation>
 <translation id="2307462900900812319">Stel netwerk op</translation>
 <translation id="2307553512430195144">As jy instem, sal Google Assistent in bystandmodus wag om "Ok Google" te bespeur en kan dit met Voice Match herken dat dit <ph name="SUPERVISED_USER_NAME" /> is wat praat.
     <ph name="BR" />
@@ -3454,6 +3453,7 @@
 <translation id="4147911968024186208">Herprobeer asseblief. Kontak jou steundiensverteenwoordiger as jy weer hierdie fout sien.</translation>
 <translation id="4150201353443180367">Vertoon</translation>
 <translation id="4150569944729499860">Skermkonteks</translation>
+<translation id="4152011295694446843">Jy sal jou boekmerke hier kry</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 oortjie}other{# oortjies}}</translation>
 <translation id="4154664944169082762">Vingerafdrukke</translation>
 <translation id="4157869833395312646">Microsoft-bediener hek-kriptografie</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 045a84e..f3f5c93 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -1460,7 +1460,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />ማስታወሻ፦<ph name="END_BOLD" />  ስርዓቱ በሂደቱ ጊዜ ዳግም ይነሳል።</translation>
 <translation id="23030561267973084">«<ph name="EXTENSION_NAME" />» ተጨማሪ ፍቃዶችን ጠይቋል።</translation>
-<translation id="23055578400314116">የተጠቃሚ ስም ይምረጡ</translation>
 <translation id="2307462900900812319">አውታረ መረብ አዋቅር</translation>
 <translation id="2307553512430195144">ከተስማሙ የGoogle ረዳቱ «Hey Google»ን ለመለየት በተጠባባቂ ሁነታ ይጠብቃል እና ከድምጽ ማዛመጃ ጋር እየተናገረ <ph name="SUPERVISED_USER_NAME" /> መሆኑን መገንዘብ ይችላል።
     <ph name="BR" />
@@ -2381,6 +2380,7 @@
 <translation id="3143515551205905069">ስምረትን ሰርዝ</translation>
 <translation id="3143754809889689516">ከመጀመሪያው አጫውት</translation>
 <translation id="3144647712221361880">አገናኙን ክፈት እንደ</translation>
+<translation id="3144896554017119333">ቅጥያዎች እና ሌሎችም</translation>
 <translation id="3149510190863420837">Chrome መተግበሪያዎች</translation>
 <translation id="3150693969729403281">የደህንነት ፍተሻን አሁን አሂድ</translation>
 <translation id="3150927491400159470">ከባድ ዳግም መጫን</translation>
@@ -2489,6 +2489,7 @@
 <translation id="3268451620468152448">ክፍት ትሮች</translation>
 <translation id="3269093882174072735">ምስል ጫን</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" />ን አታሳይ</translation>
+<translation id="3269175001434213183">የእርስዎን ነገሮች ምትኬ ለማስቀመጥ እና በማንኛውም መሣሪያ ላይ ለመጠቀም አስምርን ያብሩ</translation>
 <translation id="3269612321104318480">ፈካ ያለ መካከለኛ አረንጓዴ እና ነጭ</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ፋይል}one{# ፋይሎች}other{# ፋይሎች}}</translation>
 <translation id="326999365752735949">የማውረድ ችግር</translation>
@@ -3444,6 +3445,7 @@
 <translation id="4147911968024186208">እባክዎ እንደገና ይሞክሩ። ይህን ስህተት በድጋሚ ከተመለከቱ እባክዎ የድጋፍ ተወካይዎን ያነጋግሩ።</translation>
 <translation id="4150201353443180367">ማሳያ</translation>
 <translation id="4150569944729499860">የማያ ገጽ አውድ</translation>
+<translation id="4152011295694446843">የእርስዎን እልባቶች እዚህ ያገኛሉ</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ትር}one{# ትሮች}other{# ትሮች}}</translation>
 <translation id="4154664944169082762">የጣት አሻራዎች</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4283,6 +4285,7 @@
 <translation id="4950993567860689081">ክፍለ ጊዜዎ የሚተዳደረው በድርጅትዎ ነው። አስተዳዳሪዎች የእርስዎን መገለጫ መሰረዝ እና እንዲሁም የእርስዎን የአውታረ መረብ ትራፊክ መቆጣጠር ይችላሉ።</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{አንድ ፋይል}one{# ፋይሎች}other{# ፋይሎች}}</translation>
 <translation id="495170559598752135">እርምጃዎች</translation>
+<translation id="4951966678293618079">ለዚህ ጣቢያ መቼም የይለፍ ቃሎችን አታስቀምጥ</translation>
 <translation id="4953808748584563296">ነባሪ ብርቱካናማ አምሳያ</translation>
 <translation id="4955710816792587366">የእርስዎን ፒን ይምረጡ</translation>
 <translation id="4959262764292427323">በማናቸውም መሣሪያ ላይ እርስዎ ሊጠቀሙባቸው እንዲችሉ የይለፍ ቃላት በእርስዎ Google መለያ ውስጥ ይቀመጣሉ</translation>
@@ -4312,6 +4315,7 @@
 <translation id="4981449534399733132">ከሁሉም የእርስዎ የተመሳሰሉ መሣሪያዎች እና የእርስዎ የGoogle መለያ ላይ የአሰሳ ውሂብን ለማጽዳት፣ <ph name="BEGIN_LINK" />በመለያ ይግቡ<ph name="END_LINK" />።</translation>
 <translation id="4982111327868342436">በማንኛውም መሣሪያ ላይ ካቋረጡበት ይቀጥሉ</translation>
 <translation id="4982236238228587209">የመሣሪያ ሶፍትዌር</translation>
+<translation id="4986706507552097681">በማንኛውም ጊዜ በቅንብሮች ውስጥ ምን እንደሚያሰምሩ መምረጥ ይችላሉ። Google በእርስዎ ታሪክ ላይ በመመሥረት ፍለጋን እና ሌሎች አገልግሎቶችን ግላዊነት ሊያላብስ ይችላል።</translation>
 <translation id="4986728572522335985">ይህ ፒኑን ጨምሮ በደህንነቱ ቁልፉ ላይ ያለው ሁሉምን ውሂብ ይሰርዛል</translation>
 <translation id="4988526792673242964">ገፆች</translation>
 <translation id="49896407730300355">በሰዓት መዞሪያ አቅጣጫ &amp;ተቃራኒ አሽከርክር</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 7c2b33f..f2d88fc 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1453,7 +1453,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />ملاحظة:<ph name="END_BOLD" /> ستتم إعادة تشغيل النظام أثناء تنفيذ العملية.</translation>
 <translation id="23030561267973084">تتطلب الإضافة "<ph name="EXTENSION_NAME" />" أذونات إضافية.</translation>
-<translation id="23055578400314116">اختيار اسم مستخدم</translation>
 <translation id="2307462900900812319">إعداد الشبكة</translation>
 <translation id="2307553512430195144">‏في حال موافقتك، ستظل خدمة "مساعد Google" في وضع الاستعداد إلى أنّ يتم رصد عبارة Ok Google، وسيكون بإمكانها التعرّف على صوت <ph name="SUPERVISED_USER_NAME" /> من خلال ميزة Voice Match.
     <ph name="BR" />
@@ -2376,6 +2375,7 @@
 <translation id="3143515551205905069">إلغاء المزامنة</translation>
 <translation id="3143754809889689516">التشغيل من البداية</translation>
 <translation id="3144647712221361880">فتح الرابط كـ</translation>
+<translation id="3144896554017119333">الإضافات والمزيد</translation>
 <translation id="3149510190863420837">‏تطبيقات Chrome</translation>
 <translation id="3150693969729403281">بدء التحقق من الأمان الآن</translation>
 <translation id="3150927491400159470">تحديث بشكل كامل</translation>
@@ -2484,6 +2484,7 @@
 <translation id="3268451620468152448">علامات التبويب المفتوحة</translation>
 <translation id="3269093882174072735">تحميل الصورة</translation>
 <translation id="326911502853238749">عدم عرض <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">تفعيل المزامنة للاحتفاظ بنسخة احتياطية من بياناتك واستخدامها على أي جهاز</translation>
 <translation id="3269612321104318480">الأزرق المخضر الفاتح والأبيض</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ملف واحد}zero{# ملف}two{ملفّان}few{# ملفّات}many{# ملفًّا}other{# ملف}}</translation>
 <translation id="326999365752735949">تنزيل الاختلافات</translation>
@@ -3438,6 +3439,7 @@
 <translation id="4147911968024186208">يُرجى إعادة المحاولة. وإذا ظهر هذا الخطأ مرة أخرى، يُرجى التواصل مع ممثِّل الدعم.</translation>
 <translation id="4150201353443180367">عرض</translation>
 <translation id="4150569944729499860">سياق الشاشة</translation>
+<translation id="4152011295694446843">ستظهر الإشارات المرجعية هنا</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{علامة تبويب واحدة}zero{# من علامات التبويب}two{علامتا تبويب (#)}few{# علامات تبويب}many{# علامة تبويب}other{# من علامات التبويب}}</translation>
 <translation id="4154664944169082762">بصمات الأصابع</translation>
 <translation id="4157869833395312646">‏ترميز عن طريق بوابة خادم Microsoft</translation>
@@ -4278,6 +4280,7 @@
 <translation id="4950993567860689081">تتم إدارة الجلسة من خلال مؤسستك. ويمكن للمشرفين حذف ملفك الشخصي وتتبّع حركة بيانات الشبكة أيضًا.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ملفّ واحد}zero{# ملفّ}two{ملفّان}few{# ملفّات}many{# ملفًّا}other{# ملف}}</translation>
 <translation id="495170559598752135">إجراءات</translation>
+<translation id="4951966678293618079">عدم حفظ كلمات مرور لهذا الموقع الإلكتروني مطلقًا</translation>
 <translation id="4953808748584563296">الصورة الرمزية التلقائية البرتقالية</translation>
 <translation id="4955710816792587366">اختيار رقم التعريف الشخصي</translation>
 <translation id="4959262764292427323">‏يتم حفظ كلمات المرور في حسابك على Google حتى تتمكَّن من استخدامها على أي جهاز.</translation>
@@ -4307,6 +4310,7 @@
 <translation id="4981449534399733132">‏لمحو بيانات التصفُّح من جميع أجهزتك التي تمت مزامنتها ومن حسابك على Google، يُرجى <ph name="BEGIN_LINK" />تسجيل الدخول<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">يمكنك المتابعة من حيث توقفت على أي جهاز.</translation>
 <translation id="4982236238228587209">برامج الجهاز</translation>
+<translation id="4986706507552097681">‏يمكنك متى شئت اختيار البيانات التي تريد مزامنتها، وذلك من خلال الإعدادات. وقد تستخدم Google السجلّ لتخصيص "بحث Google" والخدمات الأخرى.</translation>
 <translation id="4986728572522335985">سيؤدي هذا الإجراء إلى حذف جميع البيانات على مفتاح الأمان، بما في ذلك رقم التعريف الشخصي الخاص به</translation>
 <translation id="4988526792673242964">الصفحات</translation>
 <translation id="49896407730300355">تدوير ع&amp;كس اتجاه عقارب الساعة</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 237d7f6..8960247 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -1464,7 +1464,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />টোকা:<ph name="END_BOLD" />  প্ৰক্ৰিয়াটো চলি থাকোঁতে ছিষ্টেমটো ৰিবুট হ’ব।</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />"এ অতিৰিক্ত অনুমতি বিচাৰিছে।</translation>
-<translation id="23055578400314116">এটা ব্যৱহাৰকাৰীৰ নাম বাছনি কৰক</translation>
 <translation id="2307462900900812319">নেটৱৰ্ক কনফিগাৰ কৰক</translation>
 <translation id="2307553512430195144">যদি আপুনি সন্মত হয়, Google Assistantএ “Hey Google” চিনাক্ত কৰিবলৈ ষ্টেণ্ডবাই ম’ডত অপেক্ষা কৰিব আৰু <ph name="SUPERVISED_USER_NAME" />এ Voice Matchৰ জৰিয়তে কথা কৈ থকাটো চিনাক্ত কৰিব পাৰিব।
     <ph name="BR" />
@@ -3449,6 +3448,7 @@
 <translation id="4147911968024186208">অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক। যদি আপুনি এই আসোঁৱাহসমূহ দুনাই দেখে তেন্তে আপোনাৰ সহায়ক প্ৰতিনিধিজনৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="4150201353443180367">ডিছপ্লে’</translation>
 <translation id="4150569944729499860">স্ক্ৰীনৰ প্ৰসংগ</translation>
+<translation id="4152011295694446843">ইয়াত আপুনি নিজৰ বুকমাৰ্কসমূহ বিচাৰি পাব</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{১টা টেব}one{#টা টেব}other{#টা টেব}}</translation>
 <translation id="4154664944169082762">ফিংগাৰপ্ৰিণ্ট</translation>
 <translation id="4157869833395312646">Microsoft ছাৰ্ভাৰ গে’টেড ক্ৰিপ্ট’গ্ৰাফী</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index fbd2277..4d3c3aa 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -1450,7 +1450,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Qeyd:<ph name="END_BOLD" />  Əməliyyat zamanı sistem yenidən işə başlayacaq.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" əlavə icazə istəyir.</translation>
-<translation id="23055578400314116">İstifadəçi adı seçin</translation>
 <translation id="2307462900900812319">Şəbəkəni konfiqurasiya edin</translation>
 <translation id="2307553512430195144">Razılaşsanız, Google Assistent "Ok Google" əmrini aşkarlamaq üçün gözləmə rejimində gözləyəcək və Voice Match ilə danışanın <ph name="SUPERVISED_USER_NAME" /> olduğunu tanıya biləcək.
     <ph name="BR" />
@@ -2371,6 +2370,7 @@
 <translation id="3143515551205905069">Sinxronizasiyanı ləğv edin</translation>
 <translation id="3143754809889689516">Başdan oxudun</translation>
 <translation id="3144647712221361880">Linki bu formada açın:</translation>
+<translation id="3144896554017119333">Artırmalar və s.</translation>
 <translation id="3149510190863420837">Chrome Tətbiqləri</translation>
 <translation id="3150693969729403281">Təhlükəsizlik yoxlanışını indi icra edin</translation>
 <translation id="3150927491400159470">Çətin yenidən yükləmə</translation>
@@ -2479,6 +2479,7 @@
 <translation id="3268451620468152448">Panelləri Açın</translation>
 <translation id="3269093882174072735">Şəkli yükləyin</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> modulunu göstərməyin</translation>
+<translation id="3269175001434213183">Elementləri yedəkləmək və istənilən cihazda istifadə etmək üçün sinxronizasiyanı aktiv edin</translation>
 <translation id="3269612321104318480">Açıq-firuzəyi və ağ</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fayl}other{# fayl}}</translation>
 <translation id="326999365752735949">Yükləmə fərq</translation>
@@ -3434,6 +3435,7 @@
 <translation id="4147911968024186208">Yenidən cəhd edin. Xəta hələ də qalarsa, yardım xidməti ilə əlaqə saxlayın.</translation>
 <translation id="4150201353443180367">Ekran</translation>
 <translation id="4150569944729499860">Ekran konteksti</translation>
+<translation id="4152011295694446843">Əlfəcinləri burada tapa bilərsiniz</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 panel}other{# panel}}</translation>
 <translation id="4154664944169082762">Barmaq izi</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4274,6 +4276,7 @@
 <translation id="4950993567860689081">Sessiyanız təşkilatınız tərəfindən idarə edilir. Administratorlar profilinizi silə və həmçinin şəbəkə trafikinizə nəzarət edə bilərlər.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{fayl}other{# fayl}}</translation>
 <translation id="495170559598752135">Fəaliyyətlər</translation>
+<translation id="4951966678293618079">Heç vaxt bu sayt üçün parolları saxlamayın</translation>
 <translation id="4953808748584563296">Defolt narıncı avatar</translation>
 <translation id="4955710816792587366">PIN seçin</translation>
 <translation id="4959262764292427323">Parollar Google Hesabınızda yadda saxlanılıb, beləliklə, onları istənilən cihazda istifadə edə bilərsiniz</translation>
@@ -4303,6 +4306,7 @@
 <translation id="4981449534399733132">Axtarış tarixçəsini bütün sinxronizasiya olunmuş cihazlardan və Google Hesabınızdan silmək üçün <ph name="BEGIN_LINK" />daxil olun<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">İstənilən cihazda qaldığınız yerdən davam edin</translation>
 <translation id="4982236238228587209">Cihaz proqramı</translation>
+<translation id="4986706507552097681">Sinxronizasiya seçimlərini ayarlarda edə bilərsiniz. Google tarixçənizə əsasən Axtarış və digər xidmətləri fərdiləşdirə bilər.</translation>
 <translation id="4986728572522335985">Bu əməliyyat PIN kod daxil olmaqla təhlükəsizlik açarınızdakı bütün verilənləri siləcək</translation>
 <translation id="4988526792673242964">Səhifələr</translation>
 <translation id="49896407730300355">Saat əqrəbi istiqaməti əksinə fırladın</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index cad7f58..dd08a73 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -1454,7 +1454,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Заўвага.<ph name="END_BOLD" /> Пасля запуску гэтага працэсу сістэма перазагрузіцца.</translation>
 <translation id="23030561267973084">Праграма "<ph name="EXTENSION_NAME" />" запатрабавала дадатковыя дазволы.</translation>
-<translation id="23055578400314116">Выберыце імя карыстальніка</translation>
 <translation id="2307462900900812319">Наладзіць сетку</translation>
 <translation id="2307553512430195144">Калі вы дасце на гэта згоду, Памочнік Google будзе ў рэжыме чакання выяўляць фразу "Ok Google". З дапамогай функцыі Voice Match ён зможа распазнаць, што гаворыць іменна <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3440,6 +3439,7 @@
 <translation id="4147911968024186208">Паўтарыце спробу. Калі вы бачыце гэту памылку паўторна, звярніцеся да прадстаўніка службы падтрымкі.</translation>
 <translation id="4150201353443180367">Дысплэй</translation>
 <translation id="4150569944729499860">Кантэкст экрана</translation>
+<translation id="4152011295694446843">Вашы закладкі знаходзяцца тут</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 укладка}one{# укладка}few{# укладкі}many{# укладак}other{# укладкі}}</translation>
 <translation id="4154664944169082762">Лічбавыя адбіткі</translation>
 <translation id="4157869833395312646">Крыптаграфія праз сервер Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 566b4e0..a26f3ef 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -1462,7 +1462,6 @@
 <ph name="BR" />
 <ph name="BEGIN_BOLD" />Забележка<ph name="END_BOLD" />: Системата ще се рестартира по време на процеса.</translation>
 <translation id="23030561267973084"><ph name="EXTENSION_NAME" /> поиска допълнителни разрешения.</translation>
-<translation id="23055578400314116">Изберете потребителско име</translation>
 <translation id="2307462900900812319">Конфигуриране на мрежата</translation>
 <translation id="2307553512430195144">Ако приемете, Google Асистент ще бъде в режим на готовност, за да разпознава активиращата фраза „Ok Google“. Услугата може да познава гласа на <ph name="SUPERVISED_USER_NAME" /> с помощта на Voice Match.
     <ph name="BR" />
@@ -3449,6 +3448,7 @@
 <translation id="4147911968024186208">Моля, опитайте пак. Ако отново видите тази грешка, свържете се с представител на екипа за поддръжка.</translation>
 <translation id="4150201353443180367">Екран</translation>
 <translation id="4150569944729499860">Контекст на екрана</translation>
+<translation id="4152011295694446843">Тук ще се показват отметките ви</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 раздел}other{# раздела}}</translation>
 <translation id="4154664944169082762">Пръстови отпечатъци</translation>
 <translation id="4157869833395312646">„Преминаваща през сървъра шифрована информация“ от Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index ca04fd24..c163989d 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -1467,7 +1467,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />দ্রষ্টব্য:<ph name="END_BOLD" />  এটি করলে সিস্টেম রিবুট করা হবে।</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" অতিরিক্ত অনুমতির অনুরোধ জানিয়েছে৷</translation>
-<translation id="23055578400314116">একটি ইউজারনেম বেছে নিন</translation>
 <translation id="2307462900900812319">নেটওয়ার্ক কনফিগার করুন</translation>
 <translation id="2307553512430195144">আপনি রাজি থাকলে, Google Assistant স্ট্যান্ডবাই মোডে অপেক্ষা করবে “Ok Google” শনাক্ত করার জন্য এবং <ph name="SUPERVISED_USER_NAME" /> কথা বলেছে কিনা তা Voice Match-এর সাহায্যে শনাক্ত করতে পারবে।
     <ph name="BR" />
@@ -3453,6 +3452,7 @@
 <translation id="4147911968024186208">আবার চেষ্টা করুন। সমস্যাটি আবার হলে, কাস্টমার সাপোর্টের সাথে যোগাযোগ করুন।</translation>
 <translation id="4150201353443180367">প্রদর্শন</translation>
 <translation id="4150569944729499860">স্ক্রিনের তথ্য</translation>
+<translation id="4152011295694446843">আপনি নিজের বুকমার্ক এখানে খুঁজে পাবেন</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{১টি ট্যাব}one{#টি ট্যাব}other{#টি ট্যাব}}</translation>
 <translation id="4154664944169082762">আঙ্গুলের ছাপ</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 9171b165..0f7577a7 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -1465,7 +1465,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Napomena:<ph name="END_BOLD" />  sistem će se ponovo pokrenuti za vrijeme ovog postupka.</translation>
 <translation id="23030561267973084">Ekstenzija "<ph name="EXTENSION_NAME" />" je zatražila dodatna odobrenja.</translation>
-<translation id="23055578400314116">Odaberite korisničko ime</translation>
 <translation id="2307462900900812319">Konfiguriraj mrežu</translation>
 <translation id="2307553512430195144">Ako pristanete, Google Asistent će čekati u načinu rada mirovanja dok ne otkrije frazu "Ok Google" i ne prepozna da <ph name="SUPERVISED_USER_NAME" /> govori pomoću Voice Matcha.
     <ph name="BR" />
@@ -3453,6 +3452,7 @@
 <translation id="4147911968024186208">Pokušajte ponovo. Ako ponovo vidite ovu grešku, obratite se predstavniku za podršku.</translation>
 <translation id="4150201353443180367">Ekran</translation>
 <translation id="4150569944729499860">Kontekst ekrana</translation>
+<translation id="4152011295694446843">Oznake ćete pronaći ovdje</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 kartica}one{# kartica}few{# kartice}other{# kartica}}</translation>
 <translation id="4154664944169082762">Otisci prstiju</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index f9f4278..ceea77c 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1451,7 +1451,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Nota<ph name="END_BOLD" />: el sistema es reiniciarà durant el procés.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ha sol·licitat permisos addicionals.</translation>
-<translation id="23055578400314116">Selecciona un nom d'usuari</translation>
 <translation id="2307462900900812319">Configura la xarxa</translation>
 <translation id="2307553512430195144">Si ho acceptes, l'Assistent de Google es quedarà en mode d'espera per detectar "Hey Google" i pot reconèixer la veu de <ph name="SUPERVISED_USER_NAME" /> amb Voice Match.
     <ph name="BR" />
@@ -3436,6 +3435,7 @@
 <translation id="4147911968024186208">Torna-ho a provar. Si tornes a veure aquest error, contacta amb el representant del servei d'assistència.</translation>
 <translation id="4150201353443180367">Pantalla</translation>
 <translation id="4150569944729499860">Context de la pantalla</translation>
+<translation id="4152011295694446843">Trobaràs les adreces d'interès aquí</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 pestanya}other{# pestanyes}}</translation>
 <translation id="4154664944169082762">Empremtes</translation>
 <translation id="4157869833395312646">Xifratge activat per servidor de Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 17ed46a..94b00413 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -1453,7 +1453,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Poznámka:<ph name="END_BOLD" /> Systém se během tohoto procesu restartuje.</translation>
 <translation id="23030561267973084">Aplikace <ph name="EXTENSION_NAME" /> požaduje další oprávnění.</translation>
-<translation id="23055578400314116">Zvolte uživatelské jméno</translation>
 <translation id="2307462900900812319">Konfigurovat síť</translation>
 <translation id="2307553512430195144">Pokud souhlasíte, bude Asistent Google čekat v pohotovostním režimu na příkaz „Ok Google“ a může pomocí funkce Voice Match rozpoznat, že mluví s uživatelem <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3438,6 +3437,7 @@
 <translation id="4147911968024186208">Zkuste to znovu. Pokud se opět zobrazí tato chyba, kontaktujte zástupce podpory.</translation>
 <translation id="4150201353443180367">Displej</translation>
 <translation id="4150569944729499860">Kontext obrazovky</translation>
+<translation id="4152011295694446843">Zde najdete své záložky</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 karta}few{# karty}many{# karty}other{# karet}}</translation>
 <translation id="4154664944169082762">Digitální otisky</translation>
 <translation id="4157869833395312646">Technologie Microsoft SGC (Server Gated Cryptography)</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb
index f9b15e86..224a443 100644
--- a/chrome/app/resources/generated_resources_cy.xtb
+++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -1469,7 +1469,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Sylwer:<ph name="END_BOLD" />  Bydd y system yn ailgychwyn yn ystod y broses.</translation>
 <translation id="23030561267973084">Mae "<ph name="EXTENSION_NAME" />" wedi gofyn am ganiatadau ychwanegol.</translation>
-<translation id="23055578400314116">Dewiswch enw defnyddiwr</translation>
 <translation id="2307462900900812319">Ffurfweddu rhwydwaith</translation>
 <translation id="2307553512430195144">Os ydych yn cytuno, bydd Google Assistant yn aros yn y modd segur i ganfod "Hei Google" a gall adnabod mai <ph name="SUPERVISED_USER_NAME" /> sy'n siarad â Voice Match.
     <ph name="BR" />
@@ -3455,6 +3454,7 @@
 <translation id="4147911968024186208">Rhowch gynnig arall arni. Os gwelwch y gwall hwn eto, cysylltwch â'ch cynrychiolydd cymorth.</translation>
 <translation id="4150201353443180367">Sgrîn</translation>
 <translation id="4150569944729499860">Cyd-destun sgrîn</translation>
+<translation id="4152011295694446843">Cewch hyd i'ch nodau tudalen yma</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}zero{# tab}two{# dab}few{# thab}many{# thab}other{# tab}}</translation>
 <translation id="4154664944169082762">Olion bysedd</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 2071346..971e272 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1467,7 +1467,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Bemærk!<ph name="END_BOLD" />  Systemet genstarter under processen.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" har anmodet om yderligere tilladelser.</translation>
-<translation id="23055578400314116">Vælg et brugernavn</translation>
 <translation id="2307462900900812319">Konfigurer netværk</translation>
 <translation id="2307553512430195144">Hvis du accepterer, venter Google Assistent i standbytilstand på at registrere "Hey Google", og den anvender Voice Match til at genkende stemmen, der tilhører <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -2388,6 +2387,7 @@
 <translation id="3143515551205905069">Annuller synkronisering</translation>
 <translation id="3143754809889689516">Afspil fra begyndelsen</translation>
 <translation id="3144647712221361880">Åbn linket som</translation>
+<translation id="3144896554017119333">Udvidelser m.m.</translation>
 <translation id="3149510190863420837">Chrome-apps</translation>
 <translation id="3150693969729403281">Kør sikkerhedstjek nu</translation>
 <translation id="3150927491400159470">Genindlæs fuldstændig</translation>
@@ -2496,6 +2496,7 @@
 <translation id="3268451620468152448">Åbne faner</translation>
 <translation id="3269093882174072735">Indlæs billede</translation>
 <translation id="326911502853238749">Vis ikke <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Aktivér synkronisering for at sikkerhedskopiere dit indhold og få adgang til det på enhver enhed</translation>
 <translation id="3269612321104318480">Lys turkis og hvid</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fil}one{# fil}other{# filer}}</translation>
 <translation id="326999365752735949">Downloader diff</translation>
@@ -3453,6 +3454,7 @@
 <translation id="4147911968024186208">Prøv igen. Hvis du ser denne fejl igen, skal du kontakte din supportrepræsentant.</translation>
 <translation id="4150201353443180367">Skærm</translation>
 <translation id="4150569944729499860">Skærmkontekst</translation>
+<translation id="4152011295694446843">Her finder du dine bogmærker</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 fane}one{# faner}other{# faner}}</translation>
 <translation id="4154664944169082762">Fingeraftryk</translation>
 <translation id="4157869833395312646">Microsoft-kryptering via server</translation>
@@ -4294,6 +4296,7 @@
 <translation id="4950993567860689081">Din session administreres af din organisation. Administratorer kan slette din profil og overvåge din netværkstrafik.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{en fil}one{# fil}other{# filer}}</translation>
 <translation id="495170559598752135">Handlinger</translation>
+<translation id="4951966678293618079">Gem aldrig adgangskoder til dette website</translation>
 <translation id="4953808748584563296">Orange standardavatar</translation>
 <translation id="4955710816792587366">Vælg din pinkode</translation>
 <translation id="4959262764292427323">Adgangskoder gemmes på din Google-konto, så du kan bruge dem på enhver enhed</translation>
@@ -4323,6 +4326,7 @@
 <translation id="4981449534399733132"><ph name="BEGIN_LINK" />Log ind<ph name="END_LINK" /> for at rydde browserdata fra alle dine synkroniserede enheder og din Google-konto.</translation>
 <translation id="4982111327868342436">Fortsæt, hvor du slap, på en hvilken som helst enhed</translation>
 <translation id="4982236238228587209">Enhedens software</translation>
+<translation id="4986706507552097681">Du kan altid vælge, hvad der skal synkroniseres, i indstillingerne. Google kan tilpasse Søgning og andre tjenester baseret på din historik.</translation>
 <translation id="4986728572522335985">Denne handling sletter alle data på sikkerhedsnøglen, bl.a. pinkoden</translation>
 <translation id="4988526792673242964">Sider</translation>
 <translation id="49896407730300355">Roter m&amp;od uret</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 056757f..051f67c 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1448,7 +1448,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Hinweis<ph name="END_BOLD" />: Das System wird während des Vorgangs neu gestartet.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" hat zusätzliche Berechtigungen angefordert.</translation>
-<translation id="23055578400314116">Wähle einen Nutzernamen aus</translation>
 <translation id="2307462900900812319">Netzwerk konfigurieren</translation>
 <translation id="2307553512430195144">Sofern du zustimmst, wartet Google Assistant im Stand-by-Modus auf „Hey Google“ und kann dann mit Voice Match die Stimme von <ph name="SUPERVISED_USER_NAME" /> erkennen.
     <ph name="BR" />
@@ -3434,6 +3433,7 @@
 <translation id="4147911968024186208">Bitte versuche es noch einmal. Wenn dieser Fehler wieder auftritt, wende dich an deinen Support-Mitarbeiter.</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4150569944729499860">Bildschirmkontext</translation>
+<translation id="4152011295694446843">Hier werden deine Lesezeichen angezeigt</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 Tab}other{# Tabs}}</translation>
 <translation id="4154664944169082762">Fingerabdrücke</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 728c4cc1..aeb798a 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1466,7 +1466,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Σημείωση:<ph name="END_BOLD" /> Θα γίνει επανεκκίνηση του συστήματος κατά τη διάρκεια της διαδικασίας.</translation>
 <translation id="23030561267973084">Η επέκταση "<ph name="EXTENSION_NAME" />" έχει ζητήσει πρόσθετες άδειες.</translation>
-<translation id="23055578400314116">Επιλέξτε ένα όνομα χρήστη.</translation>
 <translation id="2307462900900812319">Διαμόρφωση δικτύου</translation>
 <translation id="2307553512430195144">Εάν συμφωνείτε, ο Βοηθός Google θα περιμένει σε κατάσταση αναμονής, για να εντοπίζει τη φράση Ok Google και να αναγνωρίζει ότι μιλά ο χρήστης <ph name="SUPERVISED_USER_NAME" /> χρησιμοποιώντας το Voice Match.
     <ph name="BR" />
@@ -3454,6 +3453,7 @@
 <translation id="4147911968024186208">Δοκιμάστε ξανά. Εάν εμφανιστεί ξανά αυτό το σφάλμα, επικοινωνήστε με τον αντιπρόσωπο υποστήριξης.</translation>
 <translation id="4150201353443180367">Οθόνη</translation>
 <translation id="4150569944729499860">Περιβάλλον οθόνης</translation>
+<translation id="4152011295694446843">Εδώ θα βρείτε τους σελιδοδείκτες σας</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 καρτέλα}other{# καρτέλες}}</translation>
 <translation id="4154664944169082762">Αποτυπώματα</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index cf1aff5..221a912 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -1466,7 +1466,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Note:<ph name="END_BOLD" /> The system will reboot during the process.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" has requested additional permissions.</translation>
-<translation id="23055578400314116">Select a username</translation>
 <translation id="2307462900900812319">Configure network</translation>
 <translation id="2307553512430195144">If you agree, Google Assistant will wait in standby mode to detect ‘Hey Google’ and can recognise it is <ph name="SUPERVISED_USER_NAME" /> speaking with Voice Match.
     <ph name="BR" />
@@ -3454,6 +3453,7 @@
 <translation id="4147911968024186208">Please retry. If you see this error again, please contact your support representative.</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4150569944729499860">Screen context</translation>
+<translation id="4152011295694446843">You'll find your bookmarks here</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}other{# tabs}}</translation>
 <translation id="4154664944169082762">Fingerprints</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 11e34228..9862ff3 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -1448,7 +1448,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> El sistema se reiniciará durante el proceso.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ha solicitado permisos adicionales.</translation>
-<translation id="23055578400314116">Selecciona un nombre de usuario</translation>
 <translation id="2307462900900812319">Configurar red</translation>
 <translation id="2307553512430195144">Si aceptas, Asistente de Google activará el modo en espera para detectar "Hey Google" y usará Voice Match para reconocer la voz de <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3434,6 +3433,7 @@
 <translation id="4147911968024186208">Vuelve a intentarlo. Si vuelves a ver este error, comunícate con tu representante de asistencia.</translation>
 <translation id="4150201353443180367">Pantalla</translation>
 <translation id="4150569944729499860">Contexto de pantalla</translation>
+<translation id="4152011295694446843">Aquí encontrarás tus favoritos</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 pestaña}other{# pestañas}}</translation>
 <translation id="4154664944169082762">Huellas digitales</translation>
 <translation id="4157869833395312646">Criptografía controlada por servidor de Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 3acc72b..e6a1d84a 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1452,7 +1452,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> El sistema se reiniciará durante el proceso.</translation>
 <translation id="23030561267973084"><ph name="EXTENSION_NAME" /> ha solicitado permisos adicionales.</translation>
-<translation id="23055578400314116">Selecciona un nombre de usuario</translation>
 <translation id="2307462900900812319">Configurar red</translation>
 <translation id="2307553512430195144">Si aceptas, el Asistente de Google permanecerá en modo de espera para detectar el comando "Hey Google" y podrá reconocer la voz de <ph name="SUPERVISED_USER_NAME" /> con Voice Match.
     <ph name="BR" />
@@ -3437,6 +3436,7 @@
 <translation id="4147911968024186208">Inténtalo de nuevo. Si el error persiste, ponte en contacto con tu representante de asistencia.</translation>
 <translation id="4150201353443180367">Pantalla</translation>
 <translation id="4150569944729499860">Contexto de la pantalla</translation>
+<translation id="4152011295694446843">Aquí verás tus marcadores</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 pestaña}other{# pestañas}}</translation>
 <translation id="4154664944169082762">Huellas digitales</translation>
 <translation id="4157869833395312646">Criptografía activada por servidor de Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index ae88eaeb..ca40d2b2 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -1457,7 +1457,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Märkus.<ph name="END_BOLD" /> Protsessi käigus süsteem taaskäivitatakse.</translation>
 <translation id="23030561267973084">„<ph name="EXTENSION_NAME" />” on taotlenud täiendavaid lube.</translation>
-<translation id="23055578400314116">Valige kasutajanimi</translation>
 <translation id="2307462900900812319">Seadista võrk</translation>
 <translation id="2307553512430195144">Nõustumisel kuulab Google'i assistent ooterežiimis, et tuvastada, millal öeldakse „Ok Google”, ja suudab Voice Matchi abil tuvastada, kas räägib <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3443,6 +3442,7 @@
 <translation id="4147911968024186208">Proovige uuesti. Kui viga ilmub siiski, võtke ühendust tugiteenuse esindajaga.</translation>
 <translation id="4150201353443180367">Kuva</translation>
 <translation id="4150569944729499860">Ekraanikuva kontekst</translation>
+<translation id="4152011295694446843">Oma järjehoidjad leiate siit</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 vaheleht}other{# vahelehte}}</translation>
 <translation id="4154664944169082762">Sõrmejäljed</translation>
 <translation id="4157869833395312646">Microsofti Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 7c47bba..753a778 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -1451,7 +1451,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Oharra:<ph name="END_BOLD" /> sistema berrabiarazi egingo da prozesuan zehar.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" luzapenak baimen gehigarriak eskatu ditu.</translation>
-<translation id="23055578400314116">Hautatu erabiltzaile-izen bat</translation>
 <translation id="2307462900900812319">Konfiguratu sarea</translation>
 <translation id="2307553512430195144">Ados bazaude, Google-ren Laguntzailea zerbitzuak egonean moduan itxarongo du "Hey Google" hauteman arte. <ph name="SUPERVISED_USER_NAME" /> dela jakingo du haurrak Voice Match-ekin hitz egiten duenean.
     <ph name="BR" />
@@ -3437,6 +3436,7 @@
 <translation id="4147911968024186208">Saiatu berriro. Errore hau berriz agertzen bazaizu, jarri laguntza-zerbitzuko ordezkariarekin harremanetan.</translation>
 <translation id="4150201353443180367">Pantaila</translation>
 <translation id="4150569944729499860">Pantailaren testuingurua</translation>
+<translation id="4152011295694446843">Laster-markak aurkituko dituzu hemen</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{Fitxa bat}other{# fitxa}}</translation>
 <translation id="4154664944169082762">Erreferentzia-fitxategiak</translation>
 <translation id="4157869833395312646">Microsoft Zerbitzariaren kriptografia inbutuduna</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 598608b..dc78204 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -1463,7 +1463,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />توجه:<ph name="END_BOLD" /> سیستم درطول پردازش مجدداً راه‌اندازی می‌شود.</translation>
 <translation id="23030561267973084">«<ph name="EXTENSION_NAME" />» اجازه‌های جانبی درخواست کرده است.</translation>
-<translation id="23055578400314116">نام کاربری انتخاب کنید</translation>
 <translation id="2307462900900812319">پیکربندی شبکه</translation>
 <translation id="2307553512430195144">‏اگر موافقت کنید، «دستیار Google» در حالت آماده‌به‌کار منتظر می‌ماند تا گفته شدن «Ok Google» را تشخیص دهد و می‌تواند تشخیص دهد که <ph name="SUPERVISED_USER_NAME" /> درحال صحبت کردن با Voice Match است.
     <ph name="BR" />
@@ -3451,6 +3450,7 @@
 <translation id="4147911968024186208">لطفاً دوباره امتحان کنید. اگر باز این خطا را دیدید، لطفاً با نماینده پشتیبانی‌تان تماس بگیرید.</translation>
 <translation id="4150201353443180367">صفحه‌نمایش</translation>
 <translation id="4150569944729499860">اطلاعات روی صفحه</translation>
+<translation id="4152011295694446843">نشانک‌ها را اینجا خواهید دید</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{‏۱ برگه}one{‏# برگه}other{‏# برگه}}</translation>
 <translation id="4154664944169082762">اثر انگشت</translation>
 <translation id="4157869833395312646">‏رمزنگاری انتقال یافته از دروازه سرور Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 44b8bb95..7e6e93c 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1465,7 +1465,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Huom.<ph name="END_BOLD" /> Järjestelmä käynnistyy uudelleen prosessin aikana.</translation>
 <translation id="23030561267973084"><ph name="EXTENSION_NAME" /> on pyytänyt lisäoikeuksia.</translation>
-<translation id="23055578400314116">Valitse käyttäjänimi</translation>
 <translation id="2307462900900812319">Määritä verkko</translation>
 <translation id="2307553512430195144">Jos hyväksyt tämän, Google Assistant odottaa lepotilassa, kunnes se kuulee sanat "Hey Google" ja tunnistaa Voice Matchilla puhujaksi käyttäjän <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3448,6 +3447,7 @@
 <translation id="4147911968024186208">Yritä uudelleen. Jos näet tämän virheen uudelleen, ota yhteyttä tukihenkilöön.</translation>
 <translation id="4150201353443180367">Näyttö</translation>
 <translation id="4150569944729499860">Näyttökonteksti</translation>
+<translation id="4152011295694446843">Näet kirjanmerkkisi täällä</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 välilehti}other{# välilehteä}}</translation>
 <translation id="4154664944169082762">Tunnistetiedostot</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 1160c93..f773c82 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1467,7 +1467,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Tandaan:<ph name="END_BOLD" />  Mare-reboot ang system sa panahon ng proseso.</translation>
 <translation id="23030561267973084">Humiling ng karagdagang mga pahintulot ang "<ph name="EXTENSION_NAME" />."</translation>
-<translation id="23055578400314116">Pumili ng username</translation>
 <translation id="2307462900900812319">I-configure ang network</translation>
 <translation id="2307553512430195144">Kung sumasang-ayon ka, maghihintay ang Google Assistant sa standby mode para ma-detect ang “Hey Google” at makikilala nitong si <ph name="SUPERVISED_USER_NAME" /> ang nagsasalita gamit ang Voice Match.
     <ph name="BR" />
@@ -3455,6 +3454,7 @@
 <translation id="4147911968024186208">Pakisubukang muli. Kung makikita mong muli ang error na ito, makipag-ugnayan sa iyong kinatawan ng suporta.</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4150569944729499860">Konteksto ng screen</translation>
+<translation id="4152011295694446843">Makikita mo rito ang iyong mga bookmark</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}one{# tab}other{# na tab}}</translation>
 <translation id="4154664944169082762">Mga fingerprint</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index 8accf5e..e523398 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -1452,7 +1452,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Remarque :<ph name="END_BOLD" /> Le système va redémarrer durant le processus.</translation>
 <translation id="23030561267973084">« <ph name="EXTENSION_NAME" /> » a demandé des autorisations supplémentaires.</translation>
-<translation id="23055578400314116">Sélectionnez un nom d'utilisateur</translation>
 <translation id="2307462900900812319">Configurer le réseau</translation>
 <translation id="2307553512430195144">Si vous êtes d'accord, l'Assistant Google attendra en mode Veille que le mot clé « Ok Google » soit employé et il utilisera la fonctionnalité Voice Match pour vérifier que c'est bien <ph name="SUPERVISED_USER_NAME" /> qui parle.
     <ph name="BR" />
@@ -3441,6 +3440,7 @@
 <translation id="4147911968024186208">Veuillez réessayer. Si vous voyez cette erreur de nouveau, veuillez communiquer avec votre représentant du soutien technique.</translation>
 <translation id="4150201353443180367">Affichage</translation>
 <translation id="4150569944729499860">Contexte à l'écran</translation>
+<translation id="4152011295694446843">Vous trouverez vos favoris ici</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 onglet}one{# onglet}other{# onglets}}</translation>
 <translation id="4154664944169082762">Empreintes</translation>
 <translation id="4157869833395312646">Chiffrement par portes de serveur Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 3cfff9b..2d081ed7 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -1452,7 +1452,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Remarque<ph name="END_BOLD" /> : Le système redémarre au cours de ce processus.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" a demandé des autorisations supplémentaires.</translation>
-<translation id="23055578400314116">Sélectionnez un nom d'utilisateur</translation>
 <translation id="2307462900900812319">Configurer le réseau</translation>
 <translation id="2307553512430195144">Si vous êtes d'accord, l'Assistant Google attendra le mot clé "Hey Google" en mode veille et utilisera Voice Match pourra vérifier que c'est bien <ph name="SUPERVISED_USER_NAME" /> qui parle.
     <ph name="BR" />
@@ -3438,6 +3437,7 @@
 <translation id="4147911968024186208">Veuillez réessayer. Si l'erreur se reproduit, veuillez contacter le service d'assistance.</translation>
 <translation id="4150201353443180367">Écran</translation>
 <translation id="4150569944729499860">Contexte de l'écran</translation>
+<translation id="4152011295694446843">Vos favoris s'afficheront ici</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 onglet}one{# onglet}other{# onglets}}</translation>
 <translation id="4154664944169082762">Empreintes</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index f45acff..2f4a187e 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -1450,7 +1450,6 @@
 <ph name="BR" />
 <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> O sistema reiniciarase durante o proceso.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" solicitou permisos adicionais.</translation>
-<translation id="23055578400314116">Selecciona un nome de usuario</translation>
 <translation id="2307462900900812319">Configurar rede</translation>
 <translation id="2307553512430195144">Se aceptas, o Asistente de Google agardará en modo de espera para detectar o comando “Hey Google” e poder recoñecer que <ph name="SUPERVISED_USER_NAME" /> é a persoa que está falando grazas a Voice Match.
     <ph name="BR" />
@@ -3436,6 +3435,7 @@
 <translation id="4147911968024186208">Téntao de novo. Se se produce este erro outra vez, ponte en contacto co representante do servizo de asistencia.</translation>
 <translation id="4150201353443180367">Pantalla</translation>
 <translation id="4150569944729499860">Contexto da pantalla</translation>
+<translation id="4152011295694446843">Aquí atoparás os teus marcadores</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{Unha pestana}other{# pestanas}}</translation>
 <translation id="4154664944169082762">Impresións dixitais</translation>
 <translation id="4157869833395312646">Criptografía activada por servidor de Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 9f9ec81..8c55c19 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1449,7 +1449,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />નોંધ:<ph name="END_BOLD" />  પ્રક્રિયા દરમિયાન સિસ્ટમ રીબૂટ થશે.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" એ અતિરિક્ત પરવાનગીઓની વિનંતી કરી છે.</translation>
-<translation id="23055578400314116">વપરાશકર્તાનું નામ પસંદ કરો</translation>
 <translation id="2307462900900812319">નેટવર્ક ગોઠવો</translation>
 <translation id="2307553512430195144">જો તમે સંમત થાઓ, તો “Ok Google”ની ભાળ મેળવવા માટે Google Assistant સ્ટેન્ડબાય મોડમાં રહેશે અને <ph name="SUPERVISED_USER_NAME" /> Voice Match વડે બોલી રહ્યાં છે એ ઓળખી શકશે.
     <ph name="BR" />
@@ -3435,6 +3434,7 @@
 <translation id="4147911968024186208">કૃપા કરીને ફરી પ્રયાસ કરો. જો તમને આ ભૂલ ફરી દેખાય તો કૃપા કરીને તમારા સપોર્ટ પ્રતિનિધિનો સંપર્ક કરો.</translation>
 <translation id="4150201353443180367">ડિસ્પ્લે</translation>
 <translation id="4150569944729499860">સ્ક્રીન સંદર્ભ</translation>
+<translation id="4152011295694446843">તમને તમારા બુકમાર્ક અહીં મળશે</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ટેબ}one{# ટેબ્સ}other{# ટેબ્સ}}</translation>
 <translation id="4154664944169082762">ફિંગરપ્રીંટ્સ</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index dbcdade..6d4cdc7 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1467,7 +1467,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />ध्यान दें:<ph name="END_BOLD" />  प्रोसेस के दौरान, सिस्टम को फिर चालू किया जाएगा.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ने अतिरिक्त अनुमतियों का अनुरोध किया है.</translation>
-<translation id="23055578400314116">कोई उपयोगकर्ता नाम चुनें</translation>
 <translation id="2307462900900812319">नेटवर्क कॉन्फ़िगर करें</translation>
 <translation id="2307553512430195144">अगर आप सहमति देते हैं, तो "Ok Google" पहचानने के लिए Google Assistant स्टैंडबाय मोड में इंतज़ार करेगी. साथ ही, Assistant पहचान सकती है कि <ph name="SUPERVISED_USER_NAME" /> वॉइस मैच के साथ बोल रहे हैं.
     <ph name="BR" />
@@ -3452,6 +3451,7 @@
 <translation id="4147911968024186208">कृपया फिर से कोशिश करें. अगर आपको यह गड़बड़ी फिर से दिखाई देती है, तो कृपया अपने सहायता प्रतिनिधि से संपर्क करें.</translation>
 <translation id="4150201353443180367">डिसप्ले</translation>
 <translation id="4150569944729499860">स्क्रीन कॉन्टेक्स्ट</translation>
+<translation id="4152011295694446843">आपको अपने बुकमार्क यहां मिलेंगे</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 टैब}one{# टैब}other{# टैब}}</translation>
 <translation id="4154664944169082762">फ़िंगरप्रिंट</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index c8349e7c..3cdaa29fb 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1454,7 +1454,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Napomena<ph name="END_BOLD" />: sustav će se ponovo pokrenuti tijekom postupka.</translation>
 <translation id="23030561267973084">Proširenje "<ph name="EXTENSION_NAME" />" zatražilo je dodatne dozvole.</translation>
-<translation id="23055578400314116">Odaberite korisničko ime</translation>
 <translation id="2307462900900812319">Konfiguriraj mrežu</translation>
 <translation id="2307553512430195144">Ako prihvatite, Google asistent čekat će u stanju mirovanja da bi detektirao "Hey Google" i pomoću Voice Matcha može prepoznati da govori <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3442,6 +3441,7 @@
 <translation id="4147911968024186208">Pokušajte ponovo. Ako se pogreška ponovi, obratite se predstavniku podrške.</translation>
 <translation id="4150201353443180367">Zaslon</translation>
 <translation id="4150569944729499860">Kontekst na zaslonu</translation>
+<translation id="4152011295694446843">Ovdje ćete pronaći svoje oznake</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 kartica}one{# kartica}few{# kartice}other{# kartica}}</translation>
 <translation id="4154664944169082762">Otisci prstiju</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 51ded44..4b91af01 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1465,7 +1465,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Megjegyzés:<ph name="END_BOLD" /> A rendszer újraindul a folyamat során.</translation>
 <translation id="23030561267973084">A(z) „<ph name="EXTENSION_NAME" />” további engedélyeket kért.</translation>
-<translation id="23055578400314116">Válassza ki a felhasználónevét</translation>
 <translation id="2307462900900812319">Hálózat beállítása</translation>
 <translation id="2307553512430195144">Ha Ön beleegyezik, a Google Segéd készenléti módban várakozik, amíg nem észleli az „Ok Google” parancsszót, és fel nem ismeri a Voice Match segítségével, hogy <ph name="SUPERVISED_USER_NAME" /> beszél.
     <ph name="BR" />
@@ -2386,6 +2385,7 @@
 <translation id="3143515551205905069">Szinkronizálás megszakítása</translation>
 <translation id="3143754809889689516">Lejátszás az elejétől</translation>
 <translation id="3144647712221361880">Link megnyitása mint</translation>
+<translation id="3144896554017119333">Bővítmények és egyebek</translation>
 <translation id="3149510190863420837">Chrome-alkalmazások</translation>
 <translation id="3150693969729403281">Biztonsági ellenőrzés végrehajtása most</translation>
 <translation id="3150927491400159470">Teljes újratöltés</translation>
@@ -2494,6 +2494,7 @@
 <translation id="3268451620468152448">Megnyitott lapok</translation>
 <translation id="3269093882174072735">Kép betöltése</translation>
 <translation id="326911502853238749">Ne jelenítse meg a következőket: <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">A szinkronizálás bekapcsolásával biztonsági másolatot készíthet adatairól, és bármely eszközön használhatja őket</translation>
 <translation id="3269612321104318480">Világos pávakék-fehér</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fájl}other{# fájl}}</translation>
 <translation id="326999365752735949">Diff letöltése</translation>
@@ -3450,6 +3451,7 @@
 <translation id="4147911968024186208">Próbálja újra. Ha ismét ezt a hibaüzenetet látja, forduljon helyi ügyfélszolgálati képviselőjéhez.</translation>
 <translation id="4150201353443180367">Megjelenítés</translation>
 <translation id="4150569944729499860">Képernyőkontextus</translation>
+<translation id="4152011295694446843">Itt láthatja majd a könyvjelzőit</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 lap}other{# lap}}</translation>
 <translation id="4154664944169082762">Ujjlenyomatok</translation>
 <translation id="4157869833395312646">Microsoft - szerver által kezdeményezett erős titkosítás (SGC)</translation>
@@ -4291,6 +4293,7 @@
 <translation id="4950993567860689081">A munkamenetet a szervezete kezeli. A rendszergazdák törölhetik az Ön profilját, és figyelhetik a hálózati forgalmát is.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{egy fájlt}other{# fájlt}}</translation>
 <translation id="495170559598752135">Műveletek</translation>
+<translation id="4951966678293618079">Soha ne mentsen jelszavakat ehhez a webhelyhez</translation>
 <translation id="4953808748584563296">Alapértelmezett narancssárga avatar</translation>
 <translation id="4955710816792587366">PIN-kód kiválasztása</translation>
 <translation id="4959262764292427323">A jelszavakat Google-fiókjába mentjük, hogy bármelyik eszközén használhassa őket</translation>
@@ -4320,6 +4323,7 @@
 <translation id="4981449534399733132">Ha az összes szinkronizált eszközéről és a Google-fiókjából is törölni szeretné böngészési adatait, <ph name="BEGIN_LINK" />jelentkezzen be<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Bármelyik eszközön ott folytathatja, ahol abbahagyta</translation>
 <translation id="4982236238228587209">Az eszközön lévő szoftverek</translation>
+<translation id="4986706507552097681">A beállítások között bármikor módosíthatja a szinkronizálni kívánt elemeket. A Google az Ön előzményei alapján személyre szabhatja a Keresőt és más szolgáltatásokat.</translation>
 <translation id="4986728572522335985">Ezzel törli a biztonsági kulcson tárolt összes adatot, köztük a PIN-kódot is</translation>
 <translation id="4988526792673242964">Oldal</translation>
 <translation id="49896407730300355">Forgatás &amp;balra</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index bc1cc0c..700f0cf 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -1453,7 +1453,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Ուշադրություն.<ph name="END_BOLD" /> գործողության ժամանակ համակարգը կվերաբեռնվի։</translation>
 <translation id="23030561267973084">«<ph name="EXTENSION_NAME" />»-ը լրացուցիչ թույլտվություններ է խնդրել:</translation>
-<translation id="23055578400314116">Ընտրեք օգտանուն</translation>
 <translation id="2307462900900812319">Կազմաձևել ցանցը</translation>
 <translation id="2307553512430195144">Եթե համաձայն եք, Google Օգնականը կսպասի «Ok Google» հրահանգին և Voice Match գործառույթի միջոցով կկարողանա որոշել, որ խոսում է <ph name="SUPERVISED_USER_NAME" /> օգտատերը։
     <ph name="BR" />
@@ -3439,6 +3438,7 @@
 <translation id="4147911968024186208">Խնդրում ենք նորից փորձել։ Եթե խնդիրը չլուծվի, կապվեք աջակցման կենտրոնի մասնագետների հետ:</translation>
 <translation id="4150201353443180367">Էկրան</translation>
 <translation id="4150569944729499860">Էկրանի համատեքստ</translation>
+<translation id="4152011295694446843">Ձեր էջանիշները կգտնեք այստեղ</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ներդիր}one{# ներդիր}other{# ներդիր}}</translation>
 <translation id="4154664944169082762">Մատնահետքեր</translation>
 <translation id="4157869833395312646">Microsoft սերվերի գաղտնագրում</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 9ff2b779b..e765efe 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -1466,7 +1466,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Catatan:<ph name="END_BOLD" />  Sistem akan dimulai ulang selama proses berlangsung.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" telah meminta izin tambahan.</translation>
-<translation id="23055578400314116">Pilih nama pengguna</translation>
 <translation id="2307462900900812319">Konfigurasi jaringan</translation>
 <translation id="2307553512430195144">Jika Anda setuju, Asisten Google akan menunggu dalam mode standby untuk mendeteksi "Ok Google" dan dapat mengenali suara <ph name="SUPERVISED_USER_NAME" /> dengan Voice Match.
     <ph name="BR" />
@@ -2387,6 +2386,7 @@
 <translation id="3143515551205905069">Batalkan sinkronisasi</translation>
 <translation id="3143754809889689516">Putar dari awal</translation>
 <translation id="3144647712221361880">Buka link sebagai</translation>
+<translation id="3144896554017119333">Ekstensi dan lainnya</translation>
 <translation id="3149510190863420837">Aplikasi Chrome</translation>
 <translation id="3150693969729403281">Jalankan pemeriksaan keamanan sekarang</translation>
 <translation id="3150927491400159470">Muat Ulang Keras</translation>
@@ -2495,6 +2495,7 @@
 <translation id="3268451620468152448">Tab Terbuka</translation>
 <translation id="3269093882174072735">Muat gambar</translation>
 <translation id="326911502853238749">Jangan tampilkan <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Aktifkan sinkronisasi untuk mencadangkan data Anda dan menggunakannya di perangkat mana pun</translation>
 <translation id="3269612321104318480">Hijau kebiruan muda dan putih</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{File}other{# file}}</translation>
 <translation id="326999365752735949">Mendownload diff</translation>
@@ -3452,6 +3453,7 @@
 <translation id="4147911968024186208">Harap coba lagi. Jika Anda melihat error ini lagi, hubungi perwakilan dukungan Anda.</translation>
 <translation id="4150201353443180367">Tampilan</translation>
 <translation id="4150569944729499860">Konteks layar</translation>
+<translation id="4152011295694446843">Bookmark Anda akan ditampilkan di sini</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}other{# tab}}</translation>
 <translation id="4154664944169082762">Sidik jari</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4293,6 +4295,7 @@
 <translation id="4950993567860689081">Sesi Anda dikelola oleh organisasi. Administrator dapat menghapus profil serta memantau traffic jaringan Anda.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{1 file}other{# file}}</translation>
 <translation id="495170559598752135">Tindakan</translation>
+<translation id="4951966678293618079">Jangan pernah menyimpan sandi untuk situs ini</translation>
 <translation id="4953808748584563296">Avatar oranye default</translation>
 <translation id="4955710816792587366">Pilih PIN Anda</translation>
 <translation id="4959262764292427323">Sandi disimpan di Akun Google agar Anda dapat menggunakannya di perangkat mana pun</translation>
@@ -4322,6 +4325,7 @@
 <translation id="4981449534399733132">Untuk menghapus data browsing dari semua perangkat yang disinkronkan dan dari Akun Google, <ph name="BEGIN_LINK" />login<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Lanjutkan pekerjaan Anda di perangkat mana pun</translation>
 <translation id="4982236238228587209">Software perangkat</translation>
+<translation id="4986706507552097681">Anda dapat memilih jenis data yang akan disinkronkan di setelan kapan saja. Google dapat mempersonalisasi Penelusuran dan layanan lainnya berdasarkan histori Anda.</translation>
 <translation id="4986728572522335985">Tindakan ini akan menghapus semua data di kunci keamanan, termasuk PIN-nya</translation>
 <translation id="4988526792673242964">Halaman</translation>
 <translation id="49896407730300355">Putar &amp;berlawanan arah jarum jam</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 56eb6c6..d4684379 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -1467,7 +1467,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Athugaðu:<ph name="END_BOLD" />  Kerfið mun endurræsa sig í ferlinu.</translation>
 <translation id="23030561267973084">„<ph name="EXTENSION_NAME" />“ hefur óskað eftir frekari heimildum.</translation>
-<translation id="23055578400314116">Velja notandanafn</translation>
 <translation id="2307462900900812319">Stilla net</translation>
 <translation id="2307553512430195144">Ef þú samþykkir verður Google hjálparinn í biðstöðu þar til hann greinir „Ok, Google“ og greinir þegar <ph name="SUPERVISED_USER_NAME" /> talar með Voice Match.
     <ph name="BR" />
@@ -2388,6 +2387,7 @@
 <translation id="3143515551205905069">Hætta við samstillingu</translation>
 <translation id="3143754809889689516">Spila frá byrjun</translation>
 <translation id="3144647712221361880">Opna tengil sem</translation>
+<translation id="3144896554017119333">Viðbætur og fleira</translation>
 <translation id="3149510190863420837">Chrome forrit</translation>
 <translation id="3150693969729403281">Keyra öryggisathugun núna</translation>
 <translation id="3150927491400159470">Algjör endurhleðsla</translation>
@@ -2496,6 +2496,7 @@
 <translation id="3268451620468152448">Opna flipa</translation>
 <translation id="3269093882174072735">Hlaða mynd</translation>
 <translation id="326911502853238749">Ekki sýna <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Kveiktu á samstillingu til að afrita efnið þitt og nota það í hvaða tæki sem er</translation>
 <translation id="3269612321104318480">Ljósblágrænn og hvítur</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Skrá}one{# skrá}other{# skrár}}</translation>
 <translation id="326999365752735949">Sækir breytingaskrá</translation>
@@ -3453,6 +3454,7 @@
 <translation id="4147911968024186208">Reyndu aftur. Ef þú sérð þessa villu aftur skaltu hafa samband við þjónustufulltrúa.</translation>
 <translation id="4150201353443180367">Skjár</translation>
 <translation id="4150569944729499860">Skjáumhverfi</translation>
+<translation id="4152011295694446843">Þú finnur bókamerkin þín hér</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{Einn flipi}one{# flipi}other{# flipar}}</translation>
 <translation id="4154664944169082762">Fingraför</translation>
 <translation id="4157869833395312646">Microsoft-dulritun með hliðvörð frá þjóni</translation>
@@ -4294,6 +4296,7 @@
 <translation id="4950993567860689081">Lotunni er stýrt af fyrirtækinu þínu. Stjórnendur geta eytt prófílnum þínum og fylgst með netumferð þinni.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{skrá}one{# skrá}other{# skrár}}</translation>
 <translation id="495170559598752135">Aðgerðir</translation>
+<translation id="4951966678293618079">Aldrei vista aðgangsorð fyrir þetta vefsvæði</translation>
 <translation id="4953808748584563296">Sjálfgefin appelsínugul notandamynd</translation>
 <translation id="4955710816792587366">Veldu þér PIN-númer</translation>
 <translation id="4959262764292427323">Aðgangsorð eru vistuð á Google reikningnum þínum til að þú getir notað þau í hvaða tæki sem er</translation>
@@ -4323,6 +4326,7 @@
 <translation id="4981449534399733132">Til að hreinsa vafragögn úr öllum samstilltum tækjum og af Google reikningnum þínum skaltu <ph name="BEGIN_LINK" />skrá þig inn<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Haltu áfram þaðan sem frá var horfið í hvaða tæki sem er</translation>
 <translation id="4982236238228587209">Hugbúnaður tækis</translation>
+<translation id="4986706507552097681">Þú getur alltaf valið hvað á að samstilla í stillingunum. Google kann að sérsníða Leit og aðrar þjónustur í samræmi við ferilinn þinn.</translation>
 <translation id="4986728572522335985">Þetta eyðir öllum gögnum á öryggislyklinum, þar á meðal PIN-númerinu</translation>
 <translation id="4988526792673242964">Síður</translation>
 <translation id="49896407730300355">Snúa rangsælis</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 350dc09..3939f6d 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -1451,7 +1451,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> il sistema verrà riavviato durante la procedura.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ha richiesto altre autorizzazioni.</translation>
-<translation id="23055578400314116">Seleziona un nome utente</translation>
 <translation id="2307462900900812319">Configura rete</translation>
 <translation id="2307553512430195144">Se accetti, l'Assistente Google attenderà in modalità standby per individuare il comando "Hey Google" e potrà riconoscere la voce di <ph name="SUPERVISED_USER_NAME" /> con Voice Match.
     <ph name="BR" />
@@ -3439,6 +3438,7 @@
 <translation id="4147911968024186208">Riprova. Se ricevi ancora questo messaggio di errore, contatta il tuo rappresentante dell'assistenza.</translation>
 <translation id="4150201353443180367">Display</translation>
 <translation id="4150569944729499860">Contesto dello schermo</translation>
+<translation id="4152011295694446843">Qui troverai i tuoi preferiti</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 scheda}other{# schede}}</translation>
 <translation id="4154664944169082762">Impronte digitali</translation>
 <translation id="4157869833395312646">Server Gated Cryptography Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 3c8ceb44..d1c1b37 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1465,7 +1465,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />הערה:<ph name="END_BOLD" /> המערכת תבצע הפעלה מחדש בזמן התהליך.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ביקש אישורים נוספים.</translation>
-<translation id="23055578400314116">יש לבחור שם משתמש</translation>
 <translation id="2307462900900812319">הגדרת רשת</translation>
 <translation id="2307553512430195144">‏אם נקבל את הסכמתך, Google Assistant תעבור למצב המתנה לזיהוי הפקודה “Hey Google” ותוכל לזהות באמצעות Voice Match שהפקודה נאמרה על ידי <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3452,6 +3451,7 @@
 <translation id="4147911968024186208">אפשר לנסות שוב. אם השגיאה הזאת ממשיכה להופיע, ניתן לפנות לנציג התמיכה.</translation>
 <translation id="4150201353443180367">תצוגה</translation>
 <translation id="4150569944729499860">הקשר מסך</translation>
+<translation id="4152011295694446843">הסימניות זמינות כאן</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{כרטיסייה אחת}two{# כרטיסיות}many{# כרטיסיות}other{# כרטיסיות}}</translation>
 <translation id="4154664944169082762">טביעות אצבע</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 7a7da1f..2d92289c 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -1447,7 +1447,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />注:<ph name="END_BOLD" /> このプロセス中にシステムが再起動されます。</translation>
 <translation id="23030561267973084">「<ph name="EXTENSION_NAME" />」が追加の許可をリクエストしています。</translation>
-<translation id="23055578400314116">ユーザー名を選択してください</translation>
 <translation id="2307462900900812319">ネットワークを設定</translation>
 <translation id="2307553512430195144">同意すると、Google アシスタントはスタンバイ モードで待機して「OK Google」を検出します。Google アシスタントは Voice Match で <ph name="SUPERVISED_USER_NAME" /> さんが話していることを認識できます。<ph name="BR" />
     Voice Match を使用すると、お使いの <ph name="DEVICE_TYPE" /> で Google アシスタントが <ph name="SUPERVISED_USER_NAME" /> さんの声を認識できるようになります。
@@ -3430,6 +3429,7 @@
 <translation id="4147911968024186208">もう一度お試しください。このエラーが再び表示される場合は、サポート担当者にお問い合わせください。</translation>
 <translation id="4150201353443180367">表示</translation>
 <translation id="4150569944729499860">画面のコンテキスト</translation>
+<translation id="4152011295694446843">ブックマークはここに表示されます</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 個のタブ}other{# 個のタブ}}</translation>
 <translation id="4154664944169082762">指紋</translation>
 <translation id="4157869833395312646">Microsoft SGC(Server Gated Cryptography)</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index da6690af..90bab468 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -1451,7 +1451,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />შენიშვნა:<ph name="END_BOLD" />  პროცესის მსვლელობისას სისტემა გადაიტვირთება.</translation>
 <translation id="23030561267973084">„<ph name="EXTENSION_NAME" />“-მა მოითხოვა დამატებითი ნებართვები.</translation>
-<translation id="23055578400314116">აირჩიეთ მომხმარებლის სახელი</translation>
 <translation id="2307462900900812319">ქსელის კონფიგურაცია</translation>
 <translation id="2307553512430195144">თანხმობის შემთხვევაში, Google ასისტენტი მოლოდინის რეჟიმში დალოდება როგორც „Ok Google“-ის, ისე <ph name="SUPERVISED_USER_NAME" />-ის საუბრის ამოცნობას Voice Match-ის მეშვეობით.
     <ph name="BR" />
@@ -3439,6 +3438,7 @@
 <translation id="4147911968024186208">გთხოვთ, ცადოთ ხელახლა. თუ ეს შეცდომა კვლავ შეგხვდებათ, გთხოვთ, დაუკავშირდეთ მხარდაჭერის გუნდის წარმომადგენელს.</translation>
 <translation id="4150201353443180367">ჩვენება</translation>
 <translation id="4150569944729499860">ეკრანის კონტექსტი</translation>
+<translation id="4152011295694446843">აქ იპოვით თქვენს სანიშნეებს</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ჩანართი}other{# ჩანართი}}</translation>
 <translation id="4154664944169082762">თითის ანაბეჭდები</translation>
 <translation id="4157869833395312646">Microsoft სერვერის მართული კრიპტოგრაფია</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index e0f5e5a..9a6b958 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1448,7 +1448,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Ескертпе:<ph name="END_BOLD" /> бұл процесс барысында жүйе қайта жүктеледі.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" қосымша рұқсат сұрады.</translation>
-<translation id="23055578400314116">Пайдаланушы атын таңдаңыз.</translation>
 <translation id="2307462900900812319">Желіні реттеу</translation>
 <translation id="2307553512430195144">Келіссеңіз, Google Assistant күту режимінде "Ok Google" пәрменін күтеді және баланың (<ph name="SUPERVISED_USER_NAME" />) сөйлегенін Voice Match арқылы тани алады.
     <ph name="BR" />
@@ -3434,6 +3433,7 @@
 <translation id="4147911968024186208">Қайталап көруіңізді сұраймыз. Егер бұл қате қайта шықса, қолдау қызметі өкіліне хабарласыңыз.</translation>
 <translation id="4150201353443180367">Дисплей</translation>
 <translation id="4150569944729499860">Экран контексі</translation>
+<translation id="4152011295694446843">Бетбелгілер осы жерге шығады</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 қойынды}other{# қойынды}}</translation>
 <translation id="4154664944169082762">Саусақ іздері</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 3529371..00dbbd5 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -1466,7 +1466,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />ចំណាំ៖<ph name="END_BOLD" /> ប្រព័ន្ធ​នឹង​ចាប់ផ្ដើម​ឡើងវិញ​អំឡុង​ពេលការដំណើរការ។</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" បានស្នើការអនុញ្ញាតបន្ថែម។</translation>
-<translation id="23055578400314116">ជ្រើសរើស​ឈ្មោះអ្នកប្រើប្រាស់</translation>
 <translation id="2307462900900812319">តំឡើងបណ្តាញ</translation>
 <translation id="2307553512430195144">ប្រសិនបើ​អ្នកយល់ព្រម Google ជំនួយការ​នឹងរង់ចាំ​ក្នុងមុខងារ​សម្ងំ ដើម្បីចាប់ “Ok Google” និងអាច​ស្គាល់ថាជា <ph name="SUPERVISED_USER_NAME" /> ដែលកំពុងនិយាយ​ដោយប្រើ​មុខងារ Voice Match។
     <ph name="BR" />
@@ -2387,6 +2386,7 @@
 <translation id="3143515551205905069">បោះបង់​ការ​ធ្វើ​សម​កាល​កម្ម</translation>
 <translation id="3143754809889689516">ចាក់​ពីដំបូង</translation>
 <translation id="3144647712221361880">បើកដំណជា</translation>
+<translation id="3144896554017119333">កម្មវិធីបន្ថែម និងអ្វីៗជាច្រើនទៀត</translation>
 <translation id="3149510190863420837">កម្មវិធី Chrome</translation>
 <translation id="3150693969729403281">ដំណើរការ​ការពិនិត្យ​សុវត្ថិភាព​ឥឡូវនេះ</translation>
 <translation id="3150927491400159470">Hard Reload</translation>
@@ -2495,6 +2495,7 @@
 <translation id="3268451620468152448">បើកផ្ទាំង</translation>
 <translation id="3269093882174072735">ដំណើរការរូបភាព</translation>
 <translation id="326911502853238749">កុំ​បង្ហាញ <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">បើក​ការធ្វើសមកាលកម្ម ដើម្បីបម្រុងទុក​ទិន្នន័យ​របស់អ្នក និង​ប្រើប្រាស់​វា​នៅលើ​ឧបករណ៍​ណាក៏បាន</translation>
 <translation id="3269612321104318480">បៃតងខ្ចី និងស</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ឯកសារ}other{ឯកសារ #}}</translation>
 <translation id="326999365752735949">កំពុងទាញយក diff</translation>
@@ -3452,6 +3453,7 @@
 <translation id="4147911968024186208">សូមព្យាយាមម្ដងទៀត។ ប្រសិនបើអ្នក​ជួបបញ្ហានេះម្ដងទៀត សូម​ទាក់ទងតំណាងផ្នែកជំនួយ​។</translation>
 <translation id="4150201353443180367">ការបង្ហាញ</translation>
 <translation id="4150569944729499860">បរិបទអេក្រង់</translation>
+<translation id="4152011295694446843">អ្នក​នឹងឃើញ​ចំណាំ​របស់អ្នក​នៅទីនេះ</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{ផ្ទាំង 1}other{ផ្ទាំង #}}</translation>
 <translation id="4154664944169082762">ស្នាមម្រាមដៃ</translation>
 <translation id="4157869833395312646">ការគ្រីបច្រកចូលម៉ាស៊ីនមេ Microsoft</translation>
@@ -4293,6 +4295,7 @@
 <translation id="4950993567860689081">វគ្គរបស់អ្នកស្ថិត​ក្រោម​ការ​គ្រប់គ្រង​របស់ស្ថាប័ន​អ្នក។ អ្នកគ្រប់គ្រងអាចលុបកម្រងព័ត៌មានរបស់អ្នក ហើយក៏ត្រួតពិនិត្យចរាចរណ៍បណ្តាញរបស់អ្នកផងដែរ។</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ឯកសារមួយ}other{ឯកសារ #}}</translation>
 <translation id="495170559598752135">សកម្មភាព</translation>
+<translation id="4951966678293618079">កុំរក្សាទុក​ពាក្យសម្ងាត់​សម្រាប់​គេហទំព័រនេះ</translation>
 <translation id="4953808748584563296">រូបតំណាងពណ៌ទឹកក្រូចលំនាំដើម</translation>
 <translation id="4955710816792587366">ជ្រើសរើសកូដ PIN របស់អ្នក</translation>
 <translation id="4959262764292427323">ពាក្យសម្ងាត់​ត្រូវបាន​រក្សាទុក​នៅក្នុង​គណនី Google របស់អ្នក ដើម្បី​អាចឱ្យអ្នក​ប្រើវានៅ​លើឧបករណ៍​ទាំងឡាយ</translation>
@@ -4322,6 +4325,7 @@
 <translation id="4981449534399733132">ដើម្បីសម្អាត​ទិន្នន័យ​រុករក​ចេញពី​ឧបករណ៍​ដែលបាន​ធ្វើសមកាលកម្ម​ទាំងអស់​របស់អ្នក និងគណនី​ ​Google របស់អ្នក <ph name="BEGIN_LINK" />សូមចូលគណនី<ph name="END_LINK" />។</translation>
 <translation id="4982111327868342436">បន្ត​នៅត្រង់ចំណុច​ដែលអ្នក​បានចាកចេញ​នៅលើ​ឧបករណ៍​ណាក៏បាន</translation>
 <translation id="4982236238228587209">កម្មវិធី​ឧបករណ៍</translation>
+<translation id="4986706507552097681">អ្នកអាចជ្រើសរើស​អ្វីដែលត្រូវធ្វើសមកាលកម្ម​នៅក្នុងការកំណត់បានជានិច្ច។ Google អាច​កំណត់​ម៉ាស៊ីន​​ស្វែងរក និង​សេវាកម្ម​ផ្សេង​ទៀតឱ្យមាន​លក្ខណៈ​ផ្ទាល់​ខ្លួន​ ផ្អែក​តាម​ប្រវត្តិ​របស់​អ្នក។</translation>
 <translation id="4986728572522335985">សកម្មភាពនេះ​នឹងលុប​ទិន្នន័យ​ទាំងអស់​នៅក្នុង​សោសុវត្ថិភាព រួមទាំង​កូដ PIN របស់​វាផងដែរ</translation>
 <translation id="4988526792673242964">ទំព័រ</translation>
 <translation id="49896407730300355">បង្វិលបញ្ច្រាសទ្រនិចនាឡិកា</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 75aba83..ae002ab 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1459,7 +1459,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />ಗಮನಿಸಿ:<ph name="END_BOLD" /> ಪ್ರಕ್ರಿಯೆ ನಡೆಯುವಾಗ ಸಿಸ್ಟಂ ರೀಬೂಟ್ ಆಗುತ್ತದೆ.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳನ್ನು ವಿನಂತಿಸಿದ್ದಾರೆ.</translation>
-<translation id="23055578400314116">ಬಳಕೆದಾರರ ಹೆಸರನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="2307462900900812319">ನೆಟ್‌ವರ್ಕ್ ಕಾನ್ಫಿಗರ್ ಮಾಡು</translation>
 <translation id="2307553512430195144">ನೀವು ಸಮ್ಮತಿಸುವುದಾದರೆ, "Ok Google" ಅನ್ನು ಪತ್ತೆಮಾಡಲು Google Assistant ಸ್ಟ್ಯಾಂಡ್‌ಬೈ ಮೋಡ್‌ನಲ್ಲಿ ಕಾಯುತ್ತದೆ ಮತ್ತು Voice Match ಮೂಲಕ <ph name="SUPERVISED_USER_NAME" /> ಅವರು ಮಾತನಾಡುತ್ತಿದ್ದಾರೆ ಎಂಬುದನ್ನು ಗುರುತಿಸಬಹುದು.
     <ph name="BR" />
@@ -3446,6 +3445,7 @@
 <translation id="4147911968024186208">ಪುನಃ ಪ್ರಯತ್ನಿಸಿ. ಈ ದೋಷವು ಮತ್ತೊಮ್ಮೆ ಕಂಡುಬಂದರೆ, ನಿಮ್ಮ ಬೆಂಬಲ ಪ್ರತಿನಿಧಿಯನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="4150201353443180367">ಡಿಸ್‌ಪ್ಲೇ</translation>
 <translation id="4150569944729499860">ಸ್ಕ್ರೀನ್ ಸಂದರ್ಭ</translation>
+<translation id="4152011295694446843">ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಇಲ್ಲಿ ಕಾಣಬಹುದು</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ಟ್ಯಾಬ್}one{# ಟ್ಯಾಬ್‌ಗಳು}other{# ಟ್ಯಾಬ್‌ಗಳು}}</translation>
 <translation id="4154664944169082762">ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ಗಳು</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 5bf9849..e57b7322 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -1467,7 +1467,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />참고:<ph name="END_BOLD" /> 프로세스를 진행하는 동안 시스템이 재부팅됩니다.</translation>
 <translation id="23030561267973084">'<ph name="EXTENSION_NAME" />'이(가) 추가 승인을 요청했습니다.</translation>
-<translation id="23055578400314116">사용자 이름 선택</translation>
 <translation id="2307462900900812319">네트워크 설정</translation>
 <translation id="2307553512430195144">동의하는 경우 Google 어시스턴트가 대기 모드로 기다리다가 'Hey Google'을 감지하며 Voice Match를 사용해 말하는 사람이 <ph name="SUPERVISED_USER_NAME" />님임을 인식할 수 있습니다.
     <ph name="BR" />
@@ -2388,6 +2387,7 @@
 <translation id="3143515551205905069">동기화 취소</translation>
 <translation id="3143754809889689516">처음부터 재생</translation>
 <translation id="3144647712221361880">다음으로 링크 열기</translation>
+<translation id="3144896554017119333">확장 프로그램 등</translation>
 <translation id="3149510190863420837">Chrome 앱</translation>
 <translation id="3150693969729403281">지금 안전 확인 실행</translation>
 <translation id="3150927491400159470">강력 새로고침</translation>
@@ -2496,6 +2496,7 @@
 <translation id="3268451620468152448">열린 탭</translation>
 <translation id="3269093882174072735">이미지 로드</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> 표시 안함</translation>
+<translation id="3269175001434213183">콘텐츠를 백업하고 어느 기기에서나 사용하려면 동기화를 사용 설정하세요</translation>
 <translation id="3269612321104318480">연한 청록색 및 흰색</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{파일}other{파일 #개}}</translation>
 <translation id="326999365752735949">diff 다운로드 중</translation>
@@ -3451,6 +3452,7 @@
 <translation id="4147911968024186208">다시 시도해 주세요. 이 오류가 다시 표시되면 지원 담당자에게 문의하시기 바랍니다.</translation>
 <translation id="4150201353443180367">디스플레이</translation>
 <translation id="4150569944729499860">화면 컨텍스트</translation>
+<translation id="4152011295694446843">여기에서 북마크를 확인할 수 있습니다</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{탭 1개}other{탭 #개}}</translation>
 <translation id="4154664944169082762">지문</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4292,6 +4294,7 @@
 <translation id="4950993567860689081">조직에서 세션을 관리합니다. 관리자가 내 프로필을 삭제하고 네트워크 트래픽을 모니터링할 수도 있습니다.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{파일 1개}other{파일 #개}}</translation>
 <translation id="495170559598752135">작업</translation>
+<translation id="4951966678293618079">이 사이트의 비밀번호를 저장하지 않습니다</translation>
 <translation id="4953808748584563296">기본 주황색 아바타</translation>
 <translation id="4955710816792587366">PIN 선택</translation>
 <translation id="4959262764292427323">어느 기기에서나 사용할 수 있도록 비밀번호가 Google 계정에 저장됩니다.</translation>
@@ -4321,6 +4324,7 @@
 <translation id="4981449534399733132">동기화된 모든 기기 및 Google 계정에서 인터넷 사용 기록을 삭제하려면 <ph name="BEGIN_LINK" />로그인<ph name="END_LINK" />하세요.</translation>
 <translation id="4982111327868342436">어떤 기기에서든 중단한 곳부터 이어서 작업하기</translation>
 <translation id="4982236238228587209">기기 소프트웨어</translation>
+<translation id="4986706507552097681">언제든지 설정에서 동기화할 항목을 선택할 수 있습니다. Google에서는 사용자의 방문 기록을 기반으로 Google 검색 및 기타 서비스를 맞춤설정할 수 있습니다.</translation>
 <translation id="4986728572522335985">PIN을 비롯하여 보안 키에 저장된 모든 데이터가 삭제됩니다</translation>
 <translation id="4988526792673242964">페이지</translation>
 <translation id="49896407730300355">반시계 방향으로 회전(&amp;O)</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index 87b8f18..ae11890 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1466,7 +1466,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Эскертүү:<ph name="END_BOLD" /> Мүчүлүштүктөрдү оңдоо учурунда тутум кайра өчүрүлүп-күйгүзүлөт.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" кошумча уруксат сурады.</translation>
-<translation id="23055578400314116">Колдонуучунун атын тандаңыз</translation>
 <translation id="2307462900900812319">Тармакты конфигурациялоо</translation>
 <translation id="2307553512430195144">Эгер макул болсоңуз, Google Жардамчы "Oкей, Google" буйругу аныкталып, Voice Match аркылуу сүйлөп жаткан <ph name="SUPERVISED_USER_NAME" /> экенин таанымайынча көшүү режиминде күтүп турат.
     <ph name="BR" />
@@ -3452,6 +3451,7 @@
 <translation id="4147911968024186208">Кайталаңыз. Эгер бул ката кайра көрсөтүлсө, кардарларды тейлеген өкүлгө кайрылыңыз.</translation>
 <translation id="4150201353443180367">Көрсөтүү</translation>
 <translation id="4150569944729499860">Экрандагы контекст</translation>
+<translation id="4152011295694446843">Кыстармаларыңызды ушул жерден табасыз</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 өтмөк}other{# өтмөк}}</translation>
 <translation id="4154664944169082762">Манжа издери</translation>
 <translation id="4157869833395312646">Microsoft Серверинин коргондолгон криптографиясы</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 4cc0d344..ee91484 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -1465,7 +1465,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />ໝາຍເຫດ:<ph name="END_BOLD" /> ລະບົບຈະປິດເປີດໃໝ່ໃນລະຫວ່າງຂັ້ນຕອນ.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ຂໍການອະນຸຍາດເພີ່ມເຕີມແລ້ວ.</translation>
-<translation id="23055578400314116">ເລືອກຊື່ຜູ້ໃຊ້</translation>
 <translation id="2307462900900812319">ປັບຕັ້ງຄ່າເຄືອຂ່າຍ</translation>
 <translation id="2307553512430195144">ຫາກທ່ານຍອມຮັບ, ຜູ້ຊ່ວຍ Google ຈະລໍຖ້າໃນໂໝດສະແຕນບາຍເພື່ອກວດຫາຄຳສັ່ງ “Ok Google” ແລະ ສາມາດຈຳແນກມັນເປັນການເວົ້າຂອງ <ph name="SUPERVISED_USER_NAME" /> ດ້ວຍ Voice Match ໄດ້.
     <ph name="BR" />
@@ -2386,6 +2385,7 @@
 <translation id="3143515551205905069">ຍົກເລີກການຊິ້ງຂໍ້ມູນ</translation>
 <translation id="3143754809889689516">ຫຼິ້ນແຕ່ເລີ່ມຕົ້ນ</translation>
 <translation id="3144647712221361880">ເປີດ​ລິ້ງ​ເປັນ</translation>
+<translation id="3144896554017119333">ສ່ວນຂະຫຍາຍ ແລະ ອື່ນໆ</translation>
 <translation id="3149510190863420837">ແອັບ Chrome</translation>
 <translation id="3150693969729403281">ເອີ້ນໃຊ້ການກວດຄວາມປອດໄພຕອນນີ້ເລີຍ</translation>
 <translation id="3150927491400159470">ການໂຫຼດຄືນໃໝ່ຍາກ</translation>
@@ -2494,6 +2494,7 @@
 <translation id="3268451620468152448">ເປີດ​ແຖບ</translation>
 <translation id="3269093882174072735">ໂຫຼດ​ຮູບ</translation>
 <translation id="326911502853238749">ຢ່າສະແດງ <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">ເປີດການຊິ້ງເພື່ອສຳຮອງຂໍ້ມູນຂອງທ່ານ ແລະ ໃຊ້ມັນຢູ່ອຸປະກອນໃດກໍໄດ້</translation>
 <translation id="3269612321104318480">ສີຂຽວອົມຟ້າ ແລະ ສີຂາວ</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ໄຟລ໌}other{# ໄຟລ໌}}</translation>
 <translation id="326999365752735949">ກໍາລັງດາວ​ໂຫຼດຄວາມແຕກຕ່າງ</translation>
@@ -3451,6 +3452,7 @@
 <translation id="4147911968024186208">ກະລຸນາລອງໃໝ່. ຖ້າທ່ານເຫັນຄວາມຜິດພາດນີ້ອີກຄັ້ງ ກະລຸນາຕິດຕໍ່ຫາຜູ້ຕາງໜ້າຝ່າຍຊ່ວຍເຫຼືອຂອງທ່ານ.</translation>
 <translation id="4150201353443180367">ການສະແດງຜົນ</translation>
 <translation id="4150569944729499860">ບໍລິບົດໜ້າຈໍ</translation>
+<translation id="4152011295694446843">ທ່ານຈະເຫັນບຸກມາກຂອງທ່ານຢູ່ບ່ອນນີ້</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ແຖບ}other{# ​ແຖບ}}</translation>
 <translation id="4154664944169082762">ລາຍນີ້ວມື</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4292,6 +4294,7 @@
 <translation id="4950993567860689081">ເຊດຊັນຂອງທ່ານແມ່ນຈັດການໂດຍອົງການຂອງທ່ານ. ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດລຶບໂປຣໄຟລ໌ຂອງທ່ານອອກໄດ້ ແລະ ສາມາດຕິດຕາມການ​ຈາ​ລະ​ຈອນ​ເຄືອ​ຂ່າ​ຍຂອງທ່ານໄດ້ນຳ.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ໄຟລ໌}other{# ໄຟລ໌}}</translation>
 <translation id="495170559598752135">ການກະທໍາ</translation>
+<translation id="4951966678293618079">ບໍ່ບັນທຶກລະຫັດຜ່ານສຳລັບເວັບໄຊນີ້ເດັດຂາດ</translation>
 <translation id="4953808748584563296">ຮູບແທນຕົວສີສົ້ມຕາມຄ່າເລີ່ມຕົ້ນ</translation>
 <translation id="4955710816792587366">ເລືອກ PIN ຂອງທ່ານ</translation>
 <translation id="4959262764292427323">ລະຫັດຜ່ານຖືກບັນທຶກໄວ້ໃນບັນຊີ Google ຂອງທ່ານ ເພື່ອໃຫ້ທ່ານສາມາດໃຊ້ພວກມັນໄດ້ໃນອຸປະກອນຕ່າງໆ</translation>
@@ -4321,6 +4324,7 @@
 <translation id="4981449534399733132">ເພື່ອລຶບລ້າງຂໍ້ມູນການທ່ອງເວັບອອກຈາກອຸປະກອນທີ່ຊິ້ງຂໍ້ມູນຂອງທ່ານທັງໝົດ ແລະ ບັນຊີ Google ຂອງທ່ານ, ກະລຸນາ <ph name="BEGIN_LINK" />ເຂົ້າສູ່ລະບົບ<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">ສືບຕໍ່ຈາກບ່ອນທີ່ທ່ານຫຼິ້ນຄ້າງໄວ້ຢູ່ອຸປະກອນໃດກໍໄດ້</translation>
 <translation id="4982236238228587209">ຊອບແວອຸປະກອນ</translation>
+<translation id="4986706507552097681">ທ່ານສາມາດເລືອກສິ່ງທີ່ຕ້ອງການຊິ້ງໄດ້ສະເໝີໃນການຕັ້ງຄ່າ. Google ອາດປັບແຕ່ງການຊອກຫາ ແລະ ບໍລິການອື່ນໆໃຫ້ເປັນແບບສ່ວນຕົວໂດຍອ້າງອີງໃສ່ປະຫວັດຂອງທ່ານ.</translation>
 <translation id="4986728572522335985">ນີ້ຈະລຶບຂໍ້ມູນທັງໝົດໃນກະແຈຄວາມປອດໄພອອກ, ຮວມທັງ PIN ຂອງມັນ</translation>
 <translation id="4988526792673242964">ໜ້າ</translation>
 <translation id="49896407730300355">ໝຸນທວນເຂັມໂມງ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index cee2107..768fd16 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -1469,7 +1469,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Pastaba:<ph name="END_BOLD" /> vykdant procesą sistema bus paleista iš naujo.</translation>
 <translation id="23030561267973084">„<ph name="EXTENSION_NAME" />“ pateikė papildomų leidimų užklausą.</translation>
-<translation id="23055578400314116">Pasirinkite naudotojo vardą</translation>
 <translation id="2307462900900812319">Konfigūruoti tinklą</translation>
 <translation id="2307553512430195144">Jei sutinkate, „Google“ padėjėjas lauks budėjimo režimu, kol išgirs aktyvinamąjį žodį „Ok Google“ ir naudodamas „Voice Match“ atpažins, kad kalba <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -2390,6 +2389,7 @@
 <translation id="3143515551205905069">Atšaukti sinchronizavimą</translation>
 <translation id="3143754809889689516">Paleisti nuo pradžios</translation>
 <translation id="3144647712221361880">Atidaryti nuorodą kaip</translation>
+<translation id="3144896554017119333">Plėtiniai ir kt.</translation>
 <translation id="3149510190863420837">„Chrome“ programos</translation>
 <translation id="3150693969729403281">Dabar vykdyti saugos patikrą</translation>
 <translation id="3150927491400159470">Priverstinis įkėlimas iš naujo</translation>
@@ -2498,6 +2498,7 @@
 <translation id="3268451620468152448">Atidaryti skirtukai</translation>
 <translation id="3269093882174072735">Įkelti vaizdą</translation>
 <translation id="326911502853238749">Nerodyti: <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Įjunkite sinchronizavimą, kad galėtumėte sukurti atsarginę duomenų kopiją ir naudoti ją bet kuriame įrenginyje</translation>
 <translation id="3269612321104318480">Šviesi žalsvai melsva ir balta</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Failas}one{# failas}few{# failai}many{# failo}other{# failų}}</translation>
 <translation id="326999365752735949">Atsisiuntimo skirt.</translation>
@@ -3455,6 +3456,7 @@
 <translation id="4147911968024186208">Bandykite iš naujo. Jei ši klaida bus parodyta dar kartą, susisiekite su palaikymo komandos atstovu.</translation>
 <translation id="4150201353443180367">Pateiktis</translation>
 <translation id="4150569944729499860">Ekrano kontekstas</translation>
+<translation id="4152011295694446843">Čia rasite žymes</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 skirtukas}one{# skirtukas}few{# skirtukai}many{# skirtuko}other{# skirtukų}}</translation>
 <translation id="4154664944169082762">Pirštų atspaudai</translation>
 <translation id="4157869833395312646">„Microsoft“ serverio ribotas šifravimas</translation>
@@ -4296,6 +4298,7 @@
 <translation id="4950993567860689081">Seansą valdo jūsų organizacija. Administratoriai gali ištrinti jūsų profilį ir stebėti tinklo srautą.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{failą}one{# failą}few{# failus}many{# failo}other{# failų}}</translation>
 <translation id="495170559598752135">Veiksmai</translation>
+<translation id="4951966678293618079">Niekada neišsaugoti šios svetainės slaptažodžių</translation>
 <translation id="4953808748584563296">Numatytasis oranžinis pseudoportretas</translation>
 <translation id="4955710816792587366">PIN kodo pasirinkimas</translation>
 <translation id="4959262764292427323">Slaptažodžiai išsaugoti „Google“ paskyroje, todėl galite juos naudoti bet kuriame įrenginyje</translation>
@@ -4325,6 +4328,7 @@
 <translation id="4981449534399733132">Norėdami išvalyti naršymo duomenis iš sinchronizuotų įrenginių ir „Google“ paskyros, <ph name="BEGIN_LINK" />prisijunkite<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Tęskite nuo ten, kur baigėte, bet kuriame įrenginyje</translation>
 <translation id="4982236238228587209">Įrenginio programinė įranga</translation>
+<translation id="4986706507552097681">Bet kada galite pasirinkti, ką norite sinchronizuoti, skiltyje „Nustatymai“. „Google“ gali suasmeninti Paiešką ir kitas paslaugas pagal jūsų istoriją.</translation>
 <translation id="4986728572522335985">Taip bus ištrinti visi saugos rakte išsaugoti duomenys, įskaitant jo PIN kodą</translation>
 <translation id="4988526792673242964">Psl.</translation>
 <translation id="49896407730300355">Sukti prieš l&amp;aikrodžio rodyklę</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index acdb409..2b3a760 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -1453,7 +1453,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Piezīme.<ph name="END_BOLD" /> Procesa laikā sistēma tiks atkārtoti palaista.</translation>
 <translation id="23030561267973084"><ph name="EXTENSION_NAME" /> pieprasīja papildu atļaujas.</translation>
-<translation id="23055578400314116">Atlasiet lietotājvārdu.</translation>
 <translation id="2307462900900812319">Konfigurēt tīklu</translation>
 <translation id="2307553512430195144">Ja piekritīsiet, Google asistents gaidstāves režīmā gaidīs, līdz noteiks īsinājumvārdu “Ok Google”, un varēs izmantot funkciju Voice Match, lai atpazītu, ka runā <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -2374,6 +2373,7 @@
 <translation id="3143515551205905069">Atcelt sinhronizāciju</translation>
 <translation id="3143754809889689516">Atskaņot no sākuma</translation>
 <translation id="3144647712221361880">Atvērt saiti kā</translation>
+<translation id="3144896554017119333">Paplašinājumi un citi vienumi</translation>
 <translation id="3149510190863420837">Chrome lietotnes</translation>
 <translation id="3150693969729403281">Veikt drošības pārbaudi tūlīt</translation>
 <translation id="3150927491400159470">Veikt stingro atkārtoto ielādi</translation>
@@ -2482,6 +2482,7 @@
 <translation id="3268451620468152448">Atvērtās cilnes</translation>
 <translation id="3269093882174072735">Ielādēt attēlu</translation>
 <translation id="326911502853238749">Nerādīt moduli “<ph name="MODULE_NAME" />”</translation>
+<translation id="3269175001434213183">Ieslēdziet sinhronizāciju, lai dublētu saturu un varētu to izmantot jebkurā ierīcē</translation>
 <translation id="3269612321104318480">Gaiši zilganzaļa un balta</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fails}zero{# failu}one{# fails}other{# faili}}</translation>
 <translation id="326999365752735949">Tiek lejupielādētas atšķirības</translation>
@@ -3439,6 +3440,7 @@
 <translation id="4147911968024186208">Lūdzu, mēģiniet vēlreiz. Ja atkal tiek parādīta šī kļūda, sazinieties ar atbalsta dienesta pārstāvi.</translation>
 <translation id="4150201353443180367">Displejs</translation>
 <translation id="4150569944729499860">Ekrāna konteksts</translation>
+<translation id="4152011295694446843">Šeit varēsiet skatīt savas grāmatzīmes</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 cilne}zero{# ciļņu}one{# cilne}other{# cilnes}}</translation>
 <translation id="4154664944169082762">Pirkstu nospiedumi</translation>
 <translation id="4157869833395312646">Microsoft serverbāzēta šifrēšana</translation>
@@ -4279,6 +4281,7 @@
 <translation id="4950993567860689081">Jūsu sesiju pārvalda jūsu organizācija. Administratori var dzēst jūsu profilu un pārraudzīt jūsu tīkla datplūsmu.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{fails}zero{# failu}one{# fails}other{# faili}}</translation>
 <translation id="495170559598752135">Darbības</translation>
+<translation id="4951966678293618079">Nekad nesaglabāt šīs vietnes paroles</translation>
 <translation id="4953808748584563296">Noklusējuma iemiesojums oranžā krāsā</translation>
 <translation id="4955710816792587366">Izvēlieties PIN</translation>
 <translation id="4959262764292427323">Paroles tiek saglabātas jūsu Google kontā, lai jūs tās varētu izmantot jebkurā ierīcē.</translation>
@@ -4308,6 +4311,7 @@
 <translation id="4981449534399733132">Lai notīrītu pārlūkošanas datus no visām savām sinhronizētajām ierīcēm un Google konta, <ph name="BEGIN_LINK" />pierakstieties<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Turpiniet iesākto jebkurā ierīcē</translation>
 <translation id="4982236238228587209">Ierīces programmatūra</translation>
+<translation id="4986706507552097681">Jebkurā laikā iestatījumos varat izvēlēties, ko sinhronizēt. Google var personalizēt pakalpojumu Meklēšana un citus pakalpojumus, ņemot vērā jūsu vēsturi.</translation>
 <translation id="4986728572522335985">Tas izdzēsīs visus drošības atslēgas datus, ieskaitot tās PIN</translation>
 <translation id="4988526792673242964">Lapas</translation>
 <translation id="49896407730300355">Pagriezt &amp;pretēji pulksteņrādītāju kustības virzienam</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 09def4a..6017757 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -1467,7 +1467,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Напомена:<ph name="END_BOLD" /> системот ќе се рестартира во текот на процесот.</translation>
 <translation id="23030561267973084">„<ph name="EXTENSION_NAME" />“ побара дополнителни дозволи.</translation>
-<translation id="23055578400314116">Изберете корисничко име</translation>
 <translation id="2307462900900812319">Конфигурирај мрежа</translation>
 <translation id="2307553512430195144">Ако се согласите, „Помошникот на Google“ ќе чека во режим на подготвеност за да слушне „Ok Google”, а преку Voice Match може да препознае дека зборува <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3455,6 +3454,7 @@
 <translation id="4147911968024186208">Обидете се повторно. Доколку повторно ја гледате грешкава, контактирајте со претставникот за поддршка.</translation>
 <translation id="4150201353443180367">Екран</translation>
 <translation id="4150569944729499860">Контекст на екранот</translation>
+<translation id="4152011295694446843">Вашите обележувачи ќе ги најдете тука</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 картичка}one{# картичка}other{# картички}}</translation>
 <translation id="4154664944169082762">Отпечатоци</translation>
 <translation id="4157869833395312646">Шифрирање на сервер со порти на Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 6c4261d..17e05f1f 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -1450,7 +1450,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />ശ്രദ്ധിക്കുക:<ph name="END_BOLD" />  പ്രോസസിനിടെ സിസ്റ്റം റീബൂട്ട് ചെയ്യും.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" കൂടുതൽ അനുമതികൾ അഭ്യർത്ഥിച്ചു.</translation>
-<translation id="23055578400314116">ഒരു ഉപയോക്തൃനാമം തിരഞ്ഞെടുക്കുക</translation>
 <translation id="2307462900900812319">നെറ്റ്‌വർക്ക് കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="2307553512430195144">നിങ്ങൾ അംഗീകരിക്കുന്നുവെങ്കിൽ “Ok Google” എന്ന് പറയുന്നത് തിരിച്ചറിയാൻ Google Assistant സ്‌റ്റാൻഡ്‌ബെെ മോഡിൽ കാത്തിരിക്കും, Voice Match ഉപയോഗിച്ച് സംസാരിക്കുന്നത് <ph name="SUPERVISED_USER_NAME" /> ആണെന്ന് തിരിച്ചറിയാനും അതിന് കഴിയും.
     <ph name="BR" />
@@ -3435,6 +3434,7 @@
 <translation id="4147911968024186208">വീണ്ടും ശ്രമിക്കുക. ഈ പിശക് വീണ്ടും കാണുകയാണെങ്കിൽ, നിങ്ങളുടെ പിന്തുണാ പ്രതിനിധിയെ ബന്ധപ്പെടുക.</translation>
 <translation id="4150201353443180367">ഡിസ്‌പ്ലേ</translation>
 <translation id="4150569944729499860">സ്‌ക്രീൻ പശ്ചാത്തലം</translation>
+<translation id="4152011295694446843">നിങ്ങളുടെ ബുക്ക്‌മാർക്കുകൾ ഇവിടെ കാണാം</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{ഒരു ടാബ്}other{# ടാബുകൾ}}</translation>
 <translation id="4154664944169082762">ഫിംഗര്‍‌പ്രിന്‍റുകള്‍‌</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index 1cf9d37..e3e4534 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -1462,7 +1462,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Санамж:<ph name="END_BOLD" />  Уг явцын үеэр системийг дахин асаана.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" нь нэмэлт зөвшөөрөл хүссэн байна.</translation>
-<translation id="23055578400314116">Хэрэглэгчийн нэр сонгоно уу</translation>
 <translation id="2307462900900812319">Сүлжээг тохируулах</translation>
 <translation id="2307553512430195144">Хэрэв та зөвшөөрч байвал Google Туслах “Ok Google”-г илрүүлэхийн тулд зогсолтын горимд хүлээх бөгөөд Voice Match-тай ярьж байгаа хүн <ph name="SUPERVISED_USER_NAME" /> болохыг таних боломжтой.
     <ph name="BR" />
@@ -2383,6 +2382,7 @@
 <translation id="3143515551205905069">Синкийг цуцлах</translation>
 <translation id="3143754809889689516">Эхнээс нь тоглуулах</translation>
 <translation id="3144647712221361880">Холбоосыг нээх</translation>
+<translation id="3144896554017119333">Өргөтгөл болон бусад</translation>
 <translation id="3149510190863420837">Chrome Аппликейшнууд</translation>
 <translation id="3150693969729403281">Аюулгүй байдлын шалгалтыг одоо хийх</translation>
 <translation id="3150927491400159470">Хатуу дискийг дахин ачаалах</translation>
@@ -2491,6 +2491,7 @@
 <translation id="3268451620468152448">Цонхнуудыг нээх</translation>
 <translation id="3269093882174072735">Зураг ачаалах</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" />-г бүү харуул</translation>
+<translation id="3269175001434213183">Зүйлсээ хуулбарлаж, дурын төхөөрөмж дээр ашиглахын тулд синк хийхийг асаана уу</translation>
 <translation id="3269612321104318480">Цайвар номин ногоон ба цагаан</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Файл}other{# файл}}</translation>
 <translation id="326999365752735949">Татаж авахын ялгаа</translation>
@@ -3447,6 +3448,7 @@
 <translation id="4147911968024186208">Дахин оролдоно уу. Та энэ алдааг дахин харвал дэмжлэгийн төлөөлөгчтэйгээ холбогдоно уу.</translation>
 <translation id="4150201353443180367">Дэлгэц</translation>
 <translation id="4150569944729499860">Дэлгэцийн хам сэдэв</translation>
+<translation id="4152011295694446843">Та хавчуургуудаа эндээс олох болно</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 цонх}other{# цонх}}</translation>
 <translation id="4154664944169082762">Хурууны хээ</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4288,6 +4290,7 @@
 <translation id="4950993567860689081">Таны харилцан үйлдлийг танай байгууллагаас удирддаг. Администраторууд таны профайлыг устгаж, мөн сүлжээний ачааллыг тань хянах боломжтой.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{1 файл}other{# файл}}</translation>
 <translation id="495170559598752135">Авах арга хэмжээ</translation>
+<translation id="4951966678293618079">Энэ сайтад нууц үгнүүдийг хэзээ ч бүү хадгал</translation>
 <translation id="4953808748584563296">Өгөгдмөл улбар шар аватар</translation>
 <translation id="4955710816792587366">ПИН-ээ сонгох</translation>
 <translation id="4959262764292427323">Нууц үгнүүдийr таны Google Бүртгэлд хадгалсан тул тэдгээрийг та дурын төхөөрөмжид ашиглаж болно</translation>
@@ -4317,6 +4320,7 @@
 <translation id="4981449534399733132">Хөтчийн өгөгдлийг синк хийсэн бүх төхөөрөмж болон Google Бүртгэлээсээ устгахын тулд <ph name="BEGIN_LINK" />нэвтэрнэ үү<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Зогсоосон хэсгээсээ дурын төхөөрөмжөөс үргэлжлүүлээрэй</translation>
 <translation id="4982236238228587209">Төхөөрөмжийн программ хангамж</translation>
+<translation id="4986706507552097681">Та синк хийх зүйлээ тохиргооноос хүссэн үедээ сонгох боломжтой. Google таны түүхэд тулгуурлан Хайлт болон бусад үйлчилгээг хувийн болгож магадгүй.</translation>
 <translation id="4986728572522335985">Энэ нь аюулгүй байдлын түлхүүрийн ПИН зэрэг бүх өгөгдлийг устгана</translation>
 <translation id="4988526792673242964">Хуудас</translation>
 <translation id="49896407730300355">Цагийн зүүний эсрэг эргүүлэх</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 0263b72..0d197b7 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1465,7 +1465,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />टीप:<ph name="END_BOLD" />  प्रक्रियेदरम्यान सिस्टीम रीबूट होईल.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" नी अतिरिक्त परवानग्यांची विनंती केली आहे.</translation>
-<translation id="23055578400314116">एखादे वापरकर्ता नाव निवडा</translation>
 <translation id="2307462900900812319">नेटवर्क कॉंफिगर करा</translation>
 <translation id="2307553512430195144">तुम्ही सहमती दर्शवल्यास, Google Assistant हे “Ok Google” डिटेक्ट करण्यासाठी स्टँडबाय मोडमध्ये प्रतीक्षा करेल आणि <ph name="SUPERVISED_USER_NAME" /> बोलत असल्याचे Voice Match वापरून ओळखू शकेल.
     <ph name="BR" />
@@ -3449,6 +3448,7 @@
 <translation id="4147911968024186208">रीबूट करा. तुम्हाला ही एरर पुन्हा दिसल्यास कृपया तुमच्या साहाय्य प्रतिनिधीशी संपर्क साधा.</translation>
 <translation id="4150201353443180367">डिस्प्ले करा</translation>
 <translation id="4150569944729499860">स्क्रीन संदर्भ</translation>
+<translation id="4152011295694446843">तुमचे बुकमार्क तुम्हाला येथे सापडतील</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 टॅब}other{# टॅब}}</translation>
 <translation id="4154664944169082762">बोटाचा ठसा</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 5a8300b9..7017446 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1466,7 +1466,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> Sistem akan mengebut semula semasa proses ini.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" telah meminta kebenaran tambahan.</translation>
-<translation id="23055578400314116">Pilih nama pengguna</translation>
 <translation id="2307462900900812319">Konfigurasikan rangkaian</translation>
 <translation id="2307553512430195144">Jika anda bersetuju, dengan Voice Match, Google Assistant akan menunggu dalam mod tunggu sedia untuk mengesan “Ok Google” dan boleh mengecam <ph name="SUPERVISED_USER_NAME" /> yang bercakap.
     <ph name="BR" />
@@ -3452,6 +3451,7 @@
 <translation id="4147911968024186208">Sila cuba semula. Jika ralat ini dipaparkan sekali lagi, sila hubungi wakil sokongan anda.</translation>
 <translation id="4150201353443180367">Paparan</translation>
 <translation id="4150569944729499860">Konteks skrin</translation>
+<translation id="4152011295694446843">Anda dapat menemukan penanda halaman anda di sini</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tab}other{# tab}}</translation>
 <translation id="4154664944169082762">Cap jari</translation>
 <translation id="4157869833395312646">Kriptografi Berpintu Pelayan Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index fcd134d..f03cc5c6 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -1464,7 +1464,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />မှတ်ချက်-<ph name="END_BOLD" />  လုပ်ငန်းစဉ်အတွင်း စနစ်ပြန်လည်စတင်ပါမည်။</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" သည်နောက်ထပ် ခွင့်ပြုချက်များကို တောင်းဆိုခဲ့သည်။</translation>
-<translation id="23055578400314116">အသုံးပြုသူအမည်တစ်ခု ရွေးပါ</translation>
 <translation id="2307462900900812319">ကွန်ရက် ပြုပြင်ရန်</translation>
 <translation id="2307553512430195144">သဘောတူပါက “Ok Google” ကို သိရှိနိုင်ရန် Google Assistant က အရန်သင့်မုဒ်ဖြင့် စောင့်နေမည်ဖြစ်ပြီး Voice Match ဖြင့် စကားပြောနေသော <ph name="SUPERVISED_USER_NAME" /> ကို မှတ်မိနိုင်ပါသည်။
     <ph name="BR" />
@@ -2385,6 +2384,7 @@
 <translation id="3143515551205905069">စင့်ခ်လုပ်ခြင်း ပယ်ဖျက်ရန်</translation>
 <translation id="3143754809889689516">အစမှ ကစားရန်</translation>
 <translation id="3144647712221361880">လင့်ကို ...အဖြစ် ဖွင့်ပါ</translation>
+<translation id="3144896554017119333">နောက်ဆက်တွဲနှင့် အခြားအရာများ</translation>
 <translation id="3149510190863420837">Chrome အက်ပ်များ</translation>
 <translation id="3150693969729403281">လုံခြုံရေး စစ်ဆေးမှု ယခု လုပ်ဆောင်ပါ</translation>
 <translation id="3150927491400159470">ဟာ့ဒ် ပြန်တင်ရန်</translation>
@@ -2493,6 +2493,7 @@
 <translation id="3268451620468152448">တဲဘ်များ ဖွင့်ရန်</translation>
 <translation id="3269093882174072735">ပုံကူးတင်ရန်</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> ကို မပြပါနှင့်</translation>
+<translation id="3269175001434213183">သင်၏အချက်အလက်များကို အရန်သိမ်းပြီး မည်သည့်စက်တွင်မဆို အသုံးပြုရန် စင့်ခ်လုပ်ခြင်းကို ဖွင့်ပါ</translation>
 <translation id="3269612321104318480">စိမ်းပြာဖျော့နှင့် အဖြူ</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ဖိုင်}other{ဖိုင် # ဖိုင်}}</translation>
 <translation id="326999365752735949">ခြားနားမှုကို ဒေါင်းလုဒ် လုပ်နေ</translation>
@@ -3449,6 +3450,7 @@
 <translation id="4147911968024186208">ထပ်စမ်းကြည့်ပါ။ ဤအမှားအယွင်းကို ထပ်မံတွေ့ရှိရလျှင် သင်၏ ကူညီရေးရာကိုယ်စားလှယ်ထံ ဆက်သွယ်ပါ။</translation>
 <translation id="4150201353443180367">မျက်နှာပြင်ပြသမှု</translation>
 <translation id="4150569944729499860">‘ဖန်သားပြင်’ အကြောင်းအရာ</translation>
+<translation id="4152011295694446843">သင်၏လိပ်စာများကို ဤနေရာတွင် ပြပါမည်</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{တဘ် ၁}other{# တဘ်များ}}</translation>
 <translation id="4154664944169082762">လက်ဗွေများ</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4290,6 +4292,7 @@
 <translation id="4950993567860689081">သင့်စက်ရှင်ကို သင်၏အဖွဲ့အစည်းက စီမံသည် စီမံခန့်ခွဲသူများက သင့်ပရိုဖိုင်ကို ဖျက်နိုင်သကဲ့သို့ သင့်ကွန်ရက်ဒေတာ စီးဆင်းမှုကိုလည်း စောင့်ကြည့်နိုင်သည်။</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ဖိုင်တစ်ဖိုင်}other{ဖိုင် # ဖိုင်}}</translation>
 <translation id="495170559598752135">လုပ်ဆောင်ချက်များ</translation>
+<translation id="4951966678293618079">ဤဝဘ်ဆိုက်အတွက် စကားဝှက်များ ဘယ်တော့မှ မသိမ်းပါနှင့်</translation>
 <translation id="4953808748584563296">မူရင်းလိမ္မော်ရောင်ချန်နယ်ပုံ</translation>
 <translation id="4955710816792587366">သင်၏ ပင်နံပါတ်ကို ရွေးချယ်ခြင်း</translation>
 <translation id="4959262764292427323">မည်သည့်စက်ပစ္စည်းတွင်မဆို အသုံးပြုနိုင်ရန် စကားဝှက်များကို သင်၏ Google အကောင့်ထဲတွင် သိမ်းဆည်းထားပါသည်</translation>
@@ -4319,6 +4322,7 @@
 <translation id="4981449534399733132">ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာများကို သင်စင့်ခ်လုပ်ထားသော စက်အားလုံးနှင့် သင့် Google အကောင့်မှ ရှင်းထုတ်ရန် <ph name="BEGIN_LINK" />လက်မှတ်ထိုးဝင်ပါ<ph name="END_LINK" />။</translation>
 <translation id="4982111327868342436">မည်သည့်စက်တွင်မဆို ထားခဲ့သည့်နေရာမှ ပြန်စနိုင်သည်</translation>
 <translation id="4982236238228587209">စက်၏ဆော့ဖ်ဝဲ</translation>
+<translation id="4986706507552097681">စင့်ခ်လုပ်မည့်အရာကို ဆက်တင်များတွင် အချိန်မရွေး ရွေးချယ်နိုင်သည်။ Google က Search နှင့် အခြားဝန်ဆောင်မှုများကို သင့်မှတ်တမ်းပေါ်မူတည်၍ ပုဂ္ဂိုလ်ရေးသီးသန့် ပြုလုပ်နိုင်သည်။</translation>
 <translation id="4986728572522335985">ဤသို့ပြုလုပ်ခြင်းက ၎င်း၏ပင်နံပါတ်အပါအဝင် လုံခြုံရေးကီးရှိ ဒေတာအားလုံးကို ဖျက်လိုက်ပါမည်။</translation>
 <translation id="4988526792673242964">စာမျက်နှာများ</translation>
 <translation id="49896407730300355">ရေတွက်စက်ကို လက်ဝဲ&amp;ရစ် လှည့်ပေးရန်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 7792593..2c96fbe3 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1448,7 +1448,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />ख्याल गर्नुहोस्:<ph name="END_BOLD" />  यो प्रक्रियाका क्रममा सिस्टम रिबुट गरिने छ।</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ले थप अनुमतिहरू अनुरोध गरेको छ।</translation>
-<translation id="23055578400314116">युजरनेम चयन गर्नुहोस्</translation>
 <translation id="2307462900900812319">नेटवर्क कन्फिगर गर्नुहोस्</translation>
 <translation id="2307553512430195144">तपाईंले यसमा सहमति जनाउनुभयो भने Google सहायक “Ok Google” भनेको कुरा पहिचान गर्न स्ट्यान्डबाई मोडमा तयार भएर बस्ने छ र यसले Voice Match को सहयोगले बोल्ने व्यक्ति <ph name="SUPERVISED_USER_NAME" /> हो भन्ने कुरा चिन्न सक्छ।
     <ph name="BR" />
@@ -3434,6 +3433,7 @@
 <translation id="4147911968024186208">कृपया पुनः प्रयास गर्नुहोस्। यो त्रुटि फेरि देख्नुभयो भने कृपया सहायता प्रतिनिधिलाई सम्पर्क गर्नुहोला।</translation>
 <translation id="4150201353443180367">प्रदर्शन</translation>
 <translation id="4150569944729499860">स्क्रिन कन्टेक्स्ट</translation>
+<translation id="4152011295694446843">तपाईंका बुकमार्कहरू यहाँ देखिने छन्</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{१ ट्याब}other{# ट्याबहरू}}</translation>
 <translation id="4154664944169082762">औँलाछापहरू</translation>
 <translation id="4157869833395312646">Microsoft सर्भर गेटेड क्रिप्टोग्राफी</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 41a09d6..fde637a 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1451,7 +1451,6 @@
 <ph name="BR" />
 <ph name="BEGIN_BOLD" />Opmerking:<ph name="END_BOLD" /> Het systeem wordt opnieuw opgestart tijdens het proces.</translation>
 <translation id="23030561267973084">De extensie '<ph name="EXTENSION_NAME" />' heeft gevraagd om extra rechten.</translation>
-<translation id="23055578400314116">Selecteer een gebruikersnaam</translation>
 <translation id="2307462900900812319">Netwerk configureren</translation>
 <translation id="2307553512430195144">Als je akkoord gaat, wacht de Google Assistent in stand-bymodus om te luisteren of er 'Hey Google' wordt gezegd en kan deze met Voice Match de stem van <ph name="SUPERVISED_USER_NAME" /> herkennen.
     <ph name="BR" />
@@ -3438,6 +3437,7 @@
 <translation id="4147911968024186208">Probeer het opnieuw. Als je deze fout opnieuw ziet, neem je contact op met een medewerker van support.</translation>
 <translation id="4150201353443180367">Weergave</translation>
 <translation id="4150569944729499860">Schermcontext</translation>
+<translation id="4152011295694446843">Hier vind je je bookmarks</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 tabblad}other{# tabbladen}}</translation>
 <translation id="4154664944169082762">Vingerafdrukken</translation>
 <translation id="4157869833395312646">Microsoft SGC (Server Gated Cryptography)</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 5cbd26f..be251c8 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -1460,7 +1460,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Merk:<ph name="END_BOLD" /> Systemet startes på nytt i løpet av prosessen.</translation>
 <translation id="23030561267973084">«<ph name="EXTENSION_NAME" />» har bedt om ekstra tilgang.</translation>
-<translation id="23055578400314116">Velg et brukernavn</translation>
 <translation id="2307462900900812319">Konfigurer nettverket</translation>
 <translation id="2307553512430195144">Hvis du samtykker, venter Google-assistenten i hvilemodus for å kunne registrere «Hey Google» og kan gjenkjenne at det er <ph name="SUPERVISED_USER_NAME" /> som snakker, med Voice Match.
     <ph name="BR" />
@@ -3446,6 +3445,7 @@
 <translation id="4147911968024186208">Prøv på nytt. Hvis du ser denne feilen igjen, kan du kontakte brukerstøtterepresentanten din.</translation>
 <translation id="4150201353443180367">Skjerm</translation>
 <translation id="4150569944729499860">Skjermkontekst</translation>
+<translation id="4152011295694446843">Her finner du bokmerkene dine</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 fane}other{# faner}}</translation>
 <translation id="4154664944169082762">Fingeravtrykk</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index ee3feef..3fa2163 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -1449,7 +1449,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />ଧ୍ୟାନ ଦିଅନ୍ତୁ:<ph name="END_BOLD" />  ପ୍ରକ୍ରିୟା ଚାଲିଥିବା ସମୟରେ ସିଷ୍ଟମ ରିବୁଟ ହେବ।</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ଅତିରିକ୍ତ ଅନୁମତିଗୁଡ଼ିକ ଅନୁରୋଧ କରିଛନ୍ତି।</translation>
-<translation id="23055578400314116">ଏକ ଉପଯୋଗକର୍ତ୍ତାନାମ ଚୟନ କରନ୍ତୁ</translation>
 <translation id="2307462900900812319">ନେଟ୍‍ୱର୍କ କନ୍‌ଫିଗର୍ କରନ୍ତୁ</translation>
 <translation id="2307553512430195144">ଯଦି ଆପଣ ରାଜି ହୁଅନ୍ତି, ତେବେ “Hey Google”କୁ ଚିହ୍ନଟ କରିବା ପାଇଁ Google Assistant ଷ୍ଟାଣ୍ଡବାଏ ମୋଡରେ ଅପେକ୍ଷା କରିବ ଏବଂ Voice Match ମାଧ୍ୟମରେ ଏହା <ph name="SUPERVISED_USER_NAME" /> କହୁଛି ବୋଲି ଚିହ୍ନଟ କରିପାରିବ।
     <ph name="BR" />
@@ -3436,6 +3435,7 @@
 <translation id="4147911968024186208">ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ। ଯଦି ଆପଣ ପୁଣି ଏହି ତ୍ରୁଟି ଦେଖନ୍ତି, ତେବେ ଆପଣଙ୍କ ସହଯୋଗ ପ୍ରତିନିଧିଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
 <translation id="4150201353443180367">ଡିସ୍‌ପ୍ଲେ</translation>
 <translation id="4150569944729499860">ସ୍କ୍ରିନ୍ ପ୍ରସଙ୍ଗ</translation>
+<translation id="4152011295694446843">ଆପଣ ଏଠାରେ ଆପଣଙ୍କ ବୁକମାର୍କଗୁଡ଼ିକ ପାଇବେ</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1ଟି ଟାବ୍‌}other{#ଟି ଟାବ୍‌}}</translation>
 <translation id="4154664944169082762">ଟିପଚିହ୍ନ</translation>
 <translation id="4157869833395312646">Microsoft ସର୍ଭର୍‌ ଗେଟେଡ୍‌ କ୍ରିପ୍ଟୋଗ୍ରାଫି</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index d80ad79..083a41d 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -1467,7 +1467,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />ਨੋਟ ਕਰੋ:<ph name="END_BOLD" /> ਸਿਸਟਮ ਪ੍ਰਕਿਰਿਆ ਦੌਰਾਨ ਰੀਬੂਟ ਹੋਵੇਗਾ।</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ਨੇ ਵਾਧੂ ਅਨੁਮਤੀਆਂ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ।</translation>
-<translation id="23055578400314116">ਕੋਈ ਵਰਤੋਂਕਾਰ ਨਾਮ ਚੁਣੋ</translation>
 <translation id="2307462900900812319">ਨੈੱਟਵਰਕ ਸੰਰੂਪਿਤ ਕਰੋ</translation>
 <translation id="2307553512430195144">ਜੇ ਤੁਸੀਂ ਸਹਿਮਤ ਹੋ, ਤਾਂ Google Assistant ਵੱਲੋਂ "Ok Google" ਨੂੰ ਪਛਾਣਨ ਲਈ ਸਟੈਂਡਬਾਈ ਮੋਡ ਵਿੱਚ ਉਡੀਕ ਕੀਤੀ ਜਾਵੇਗੀ ਅਤੇ ਇਹ ਇਸ ਗੱਲ ਦੀ ਪਛਾਣ ਵੀ ਕਰ ਸਕਦੀ ਹੈ ਕਿ ਤੁਸੀਂ <ph name="SUPERVISED_USER_NAME" /> Voice Match ਨਾਲ ਬੋਲ ਰਹੇ ਹੋ।
     <ph name="BR" />
@@ -3454,6 +3453,7 @@
 <translation id="4147911968024186208">ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਜੇਕਰ ਤੁਹਾਨੂੰ ਇਹ ਗੜਬੜ ਦੁਬਾਰਾ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ ਤਾਂ ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਸਹਾਇਕ ਪ੍ਰਤੀਨਿਧੀ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</translation>
 <translation id="4150201353443180367">ਡਿਸਪਲੇ</translation>
 <translation id="4150569944729499860">ਸਕ੍ਰੀਨ ਸੰਦਰਭ</translation>
+<translation id="4152011295694446843">ਤੁਹਾਨੂੰ ਆਪਣੇ ਬੁੱਕਮਾਰਕ ਇੱਥੇ ਮਿਲਣਗੇ</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ਟੈਬ}one{# ਟੈਬਾਂ}other{# ਟੈਬਾਂ}}</translation>
 <translation id="4154664944169082762">ਫਿੰਗਰਪ੍ਰਿੰਟ</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 3705635..e09e0e89 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1438,7 +1438,6 @@
 <ph name="LIST_ITEM" />ustawić własne hasła użytkowników dev i root, aby móc ręcznie zalogować się przez SSH na urządzeniu.
 <ph name="END_LIST" /><ph name="BR" />Po włączeniu większość funkcji debugowania pozostanie włączona nawet po wykonaniu procedury Powerwash lub wyczyszczeniu danych na urządzeniu zarządzanym przez firmę. Aby całkowicie wyłączyć wszystkie funkcje debugowania, przejdź proces odzyskiwania Chrome OS (https://support.google.com/chromebook/answer/1080595).<ph name="BR" /><ph name="BR" />Więcej informacji o funkcjach debugowania:<ph name="BR" />https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-features<ph name="BR" /><ph name="BR" /><ph name="BEGIN_BOLD" />Uwaga:<ph name="END_BOLD" /> podczas tego procesu system uruchomi się ponownie.</translation>
 <translation id="23030561267973084">„<ph name="EXTENSION_NAME" />” żąda dodatkowych pozwoleń.</translation>
-<translation id="23055578400314116">Wybierz nazwę użytkownika</translation>
 <translation id="2307462900900812319">Skonfiguruj sieć</translation>
 <translation id="2307553512430195144">Jeśli wyrazisz zgodę, Asystent Google będzie czekać w trybie gotowości na wykrycie „OK Google” i za pomocą funkcji Voice Match rozpozna, że mówi <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3424,6 +3423,7 @@
 <translation id="4147911968024186208">Spróbuj jeszcze raz. Jeśli ten błąd pojawi się ponownie, skontaktuj się z przedstawicielem pomocy.</translation>
 <translation id="4150201353443180367">Wyświetlacz</translation>
 <translation id="4150569944729499860">Kontekst z ekranu</translation>
+<translation id="4152011295694446843">Tu znajdziesz swoje zakładki</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 karta}few{# karty}many{# kart}other{# karty}}</translation>
 <translation id="4154664944169082762">Odciski cyfrowe</translation>
 <translation id="4157869833395312646">Kryptografia Server Gated Cryptography firmy Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 615eff2..c90704e7 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1467,7 +1467,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Observação<ph name="END_BOLD" />: o sistema será reinicializado durante o processo.</translation>
 <translation id="23030561267973084">A extensão "<ph name="EXTENSION_NAME" />" solicitou permissões adicionais.</translation>
-<translation id="23055578400314116">Selecione um nome de usuário</translation>
 <translation id="2307462900900812319">Configurar rede</translation>
 <translation id="2307553512430195144">Se você permitir, o Google Assistente entrará no modo de espera para detectar o "Ok Google" e poderá usar o Voice Match para reconhecer a voz de <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -2388,6 +2387,7 @@
 <translation id="3143515551205905069">Cancelar sincronização</translation>
 <translation id="3143754809889689516">Reproduzir do início</translation>
 <translation id="3144647712221361880">Abrir link como</translation>
+<translation id="3144896554017119333">Extensões e mais</translation>
 <translation id="3149510190863420837">apps do Chrome</translation>
 <translation id="3150693969729403281">Executar confirmação de segurança</translation>
 <translation id="3150927491400159470">Recarregamento forçado</translation>
@@ -2496,6 +2496,7 @@
 <translation id="3268451620468152448">Guias abertas</translation>
 <translation id="3269093882174072735">Carregar imagem</translation>
 <translation id="326911502853238749">Não mostrar <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Ative a sincronização para fazer backup e usar seus dados em qualquer dispositivo</translation>
 <translation id="3269612321104318480">Verde-água e branco</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Arquivo}one{# arquivo}other{# arquivos}}</translation>
 <translation id="326999365752735949">Fazendo o download do diff</translation>
@@ -3454,6 +3455,7 @@
 <translation id="4147911968024186208">Tente novamente. Se o erro se repetir, entre em contato com seu representante de suporte.</translation>
 <translation id="4150201353443180367">Exibição</translation>
 <translation id="4150569944729499860">Contexto da tela</translation>
+<translation id="4152011295694446843">Você verá seus favoritos aqui</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 guia}one{# guias}other{# guias}}</translation>
 <translation id="4154664944169082762">Assinaturas digitais</translation>
 <translation id="4157869833395312646">Criptografia de entrada para servidor da Microsoft </translation>
@@ -4294,6 +4296,7 @@
 <translation id="4950993567860689081">A sessão é gerenciada pela sua organização. Os administradores podem excluir seu perfil e também monitorar o tráfego de rede.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{um arquivo}one{# arquivo}other{# arquivos}}</translation>
 <translation id="495170559598752135">Ações</translation>
+<translation id="4951966678293618079">Nunca salvar senhas para este site</translation>
 <translation id="4953808748584563296">Avatar laranja padrão</translation>
 <translation id="4955710816792587366">Escolher o PIN</translation>
 <translation id="4959262764292427323">As senhas são salvas na sua Conta do Google para que você possa usá-las em qualquer dispositivo</translation>
@@ -4323,6 +4326,7 @@
 <translation id="4981449534399733132">Para limpar os dados de navegação de todos os dispositivos sincronizados e da sua Conta do Google, <ph name="BEGIN_LINK" />faça login<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Continue de onde parou em qualquer dispositivo</translation>
 <translation id="4982236238228587209">Software do dispositivo</translation>
+<translation id="4986706507552097681">Nas configurações, é possível escolher a qualquer momento o que é sincronizado. O Google pode personalizar a Pesquisa e outros serviços com base no seu histórico.</translation>
 <translation id="4986728572522335985">Essa ação exclui todos os dados na chave de segurança, inclusive o PIN dela</translation>
 <translation id="4988526792673242964">Páginas</translation>
 <translation id="49896407730300355">Girar no s&amp;entido anti-horário</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index a2d7ba8..0126c36a 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1451,7 +1451,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> o sistema será reiniciado durante o processo.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" solicitou permissões adicionais.</translation>
-<translation id="23055578400314116">Selecione um nome de utilizador.</translation>
 <translation id="2307462900900812319">Configurar rede</translation>
 <translation id="2307553512430195144">Se concordar, o Assistente Google aguarda em modo de espera para detetar o comando "OK Google" e pode reconhecer que <ph name="SUPERVISED_USER_NAME" /> está a falar através do Voice Match.
     <ph name="BR" />
@@ -3440,6 +3439,7 @@
 <translation id="4147911968024186208">Tente novamente. Se vir novamente este erro, contacte o seu representante do apoio técnico.</translation>
 <translation id="4150201353443180367">Visualização</translation>
 <translation id="4150569944729499860">Contexto do ecrã</translation>
+<translation id="4152011295694446843">Os seus marcadores serão apresentados aqui</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 separador}other{# separadores}}</translation>
 <translation id="4154664944169082762">Impressões digitais</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index ecda073..5dbd46d2 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -1452,7 +1452,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Notă:<ph name="END_BOLD" /> sistemul va reporni în timpul acestui proces.</translation>
 <translation id="23030561267973084">„<ph name="EXTENSION_NAME" />” a solicitat permisiuni suplimentare.</translation>
-<translation id="23055578400314116">Selectează un nume de utilizator</translation>
 <translation id="2307462900900812319">Configurați rețeaua</translation>
 <translation id="2307553512430195144">Dacă ești de acord, Asistentul Google va aștepta în modul standby să detecteze expresia „Ok Google” și poate să recunoască dacă <ph name="SUPERVISED_USER_NAME" /> vorbește, folosind Voice Match.
     <ph name="BR" />
@@ -3440,6 +3439,7 @@
 <translation id="4147911968024186208">Reîncearcă. Dacă vezi această eroare din nou, contactează reprezentantul de asistență.</translation>
 <translation id="4150201353443180367">Ecran</translation>
 <translation id="4150569944729499860">Contextul de pe ecran</translation>
+<translation id="4152011295694446843">Aici vei vedea marcajele</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{O filă}few{# file}other{# de file}}</translation>
 <translation id="4154664944169082762">Amprente digitale</translation>
 <translation id="4157869833395312646">Criptografie Microsoft bazată pe server</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 4c33c45f..e27a460 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1453,7 +1453,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Примечание.<ph name="END_BOLD" /> Система будет перезагружена.</translation>
 <translation id="23030561267973084">Приложение "<ph name="EXTENSION_NAME" />" запросило дополнительные разрешения.</translation>
-<translation id="23055578400314116">Выберите имя пользователя.</translation>
 <translation id="2307462900900812319">Настройка сети</translation>
 <translation id="2307553512430195144">Если вы согласитесь, Google Ассистент будет ждать команды "Окей, Google" и с помощью функции Voice Match сможет определять, что говорит пользователь <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -2374,6 +2373,7 @@
 <translation id="3143515551205905069">Отмена</translation>
 <translation id="3143754809889689516">Воспроизвести с начала</translation>
 <translation id="3144647712221361880">Открыть ссылку как</translation>
+<translation id="3144896554017119333">Расширения и прочее</translation>
 <translation id="3149510190863420837">Приложения Chrome</translation>
 <translation id="3150693969729403281">Запустить проверку безопасности</translation>
 <translation id="3150927491400159470">Жесткая перезагрузка</translation>
@@ -2482,6 +2482,7 @@
 <translation id="3268451620468152448">Вкладки</translation>
 <translation id="3269093882174072735">Загрузить изображение</translation>
 <translation id="326911502853238749">Не показывать <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Включите синхронизацию, чтобы создавать резервные копии своих данных и использовать их на любом устройстве</translation>
 <translation id="3269612321104318480">Светло-бирюзовый с белым</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Файл}one{# файл}few{# файла}many{# файлов}other{# файла}}</translation>
 <translation id="326999365752735949">Утилита diff скачивается</translation>
@@ -3439,6 +3440,7 @@
 <translation id="4147911968024186208">Повторите попытку. Если сообщение об ошибке появится снова, свяжитесь со службой поддержки.</translation>
 <translation id="4150201353443180367">Экран</translation>
 <translation id="4150569944729499860">Содержимое экрана</translation>
+<translation id="4152011295694446843">Здесь вы найдете свои закладки</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 вкладка}one{# вкладка}few{# вкладки}many{# вкладок}other{# вкладки}}</translation>
 <translation id="4154664944169082762">Отпечатки</translation>
 <translation id="4157869833395312646">Серверное шифрование Microsoft</translation>
@@ -4279,6 +4281,7 @@
 <translation id="4950993567860689081">Сеансом управляет ваша организация. Администраторы могут удалять профили и следить за сетевым трафиком.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{файл}one{# файл}few{# файла}many{# файлов}other{# файла}}</translation>
 <translation id="495170559598752135">Действия</translation>
+<translation id="4951966678293618079">Никогда не сохранять пароли для этого сайта</translation>
 <translation id="4953808748584563296">Аватар по умолчанию (оранжевый)</translation>
 <translation id="4955710816792587366">Установите PIN-код</translation>
 <translation id="4959262764292427323">Пароли сохраняются в аккаунте Google и будут доступны на любом устройстве.</translation>
@@ -4308,6 +4311,7 @@
 <translation id="4981449534399733132">Чтобы удалить данные о работе в браузере со всех синхронизированных устройств и из аккаунта Google, <ph name="BEGIN_LINK" />войдите в систему<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Продолжайте работу на любом устройстве с того места, где остановились.</translation>
 <translation id="4982236238228587209">ПО на устройстве</translation>
+<translation id="4986706507552097681">Вы всегда можете выбрать, что синхронизировать, в настройках. Google может персонально настраивать Поиск и другие сервисы на основе вашей истории.</translation>
 <translation id="4986728572522335985">С электронного ключа будут удалены все данные, включая PIN-код</translation>
 <translation id="4988526792673242964">Страницы</translation>
 <translation id="49896407730300355">Повернуть п&amp;ротив часовой стрелки</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 44822bdb..4ae8a51 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -1455,7 +1455,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />සටහන:<ph name="END_BOLD" /> ක්‍රියාවලිය අතරතුර පද්ධතිය නැවත පණ ගැන්වෙනු ඇත.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" අමතර අවසරයන් ඉල්ලා ඇත.</translation>
-<translation id="23055578400314116">පරිශීලක නමක් තෝරන්න</translation>
 <translation id="2307462900900812319">ජාලය සකසන්න</translation>
 <translation id="2307553512430195144">ඔබ එකඟ වන්නේ නම්, Google සහායක “Hey Google” අනාවරණය කර ගැනීමට ස්ටෑන්ඩ්බයි ප්‍රකාරය තුළ රැඳී සිටිනු ඇති අතර Voice Match සමග කථා කරන්නේ <ph name="SUPERVISED_USER_NAME" /> බව හඳුනා ගැනීමට හැකිය.
     <ph name="BR" />
@@ -2376,6 +2375,7 @@
 <translation id="3143515551205905069">සමමුහුර්තය අවලංගු කරන්න</translation>
 <translation id="3143754809889689516">ආරම්භයේ සිට ධාවන කරන්න</translation>
 <translation id="3144647712221361880">ලෙස සබැඳිය විවෘත කරන්න</translation>
+<translation id="3144896554017119333">දිගු සහ තවත්</translation>
 <translation id="3149510190863420837">Chrome යෙදුම්</translation>
 <translation id="3150693969729403281">දැන් ආරක්‍ෂක පරීක්‍ෂාව ධාවන කරන්න</translation>
 <translation id="3150927491400159470">දැඩි නැවුම් කිරීම</translation>
@@ -2484,6 +2484,7 @@
 <translation id="3268451620468152448">ටැබ විවෘත කරන්න</translation>
 <translation id="3269093882174072735">රූපය පූරණය කරන්න</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> පෙන්වන්න එපා</translation>
+<translation id="3269175001434213183">ඔබේ දේවල් උපස්ථ කිරීමට සහ එය ඕනෑම උපාංගයක භාවිතා කිරීමට සමමුහුර්ත කිරීම ක්‍රියාත්මක කරන්න</translation>
 <translation id="3269612321104318480">ලා සේරා සහ සුදු</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{ගොනුව}one{ගොනු #}other{ගොනු #}}</translation>
 <translation id="326999365752735949">diff බාගනිමින්</translation>
@@ -3442,6 +3443,7 @@
 <translation id="4147911968024186208">යළි උත්සාහ කරන්න. ඔබ නැවතත් මෙම දෝෂය දකින්නේ නම්, ඔබේ සහය නියෝජිතයා සම්බන්ධ කර ගන්න.</translation>
 <translation id="4150201353443180367">සංදර්ශකය</translation>
 <translation id="4150569944729499860">තිර සන්දර්භය</translation>
+<translation id="4152011295694446843">ඔබට ඔබේ පිටුසන් මෙහි හමුවනු ඇත</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{පටිති 1}one{පටිති #}other{පටිති #}}</translation>
 <translation id="4154664944169082762">ඇඟිලි සලකුණු</translation>
 <translation id="4157869833395312646">Microsoft සේවාදායක ද්වාර ගුප්තලේඛන කියවීම</translation>
@@ -4282,6 +4284,7 @@
 <translation id="4950993567860689081">ඔබගේ සැසිය ඔබගේ සංවිධානය විසින් කළමනාකරණය කරනු ලැබේ පරිපාලකයින්ට ඔබගේ පැතිකඩ මැකීමට සහ ඔබගේ ජාල තදබදය නිරීක්ෂණය කිරීමටද හැකිය.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ගොනුවක්}one{ගොනු #}other{ගොනු #}}</translation>
 <translation id="495170559598752135">ක්‍රියාමාර්ග</translation>
+<translation id="4951966678293618079">මෙම අඩවිය සඳහා කිසිවිටක මුරපද නොසුරකින්න</translation>
 <translation id="4953808748584563296">පෙරනිමි තැඹිලි නියුරුව</translation>
 <translation id="4955710816792587366">ඔබගේ PIN තෝරන්න</translation>
 <translation id="4959262764292427323">මුරපද ඔබගේ Google ගිණුමේ සුරක්ෂිත කර ඇති අතර, එනිසා ඔබට ඒවා ඕනෑම උපාංගයක භාවිතා කළ හැකිය</translation>
@@ -4311,6 +4314,7 @@
 <translation id="4981449534399733132">ඔබේ සියලුම සමමුහුර්ත කළ උපාංගවලින් සහ ඔබේ Google ගිණුමෙන් බ්‍රවුස් කිරීමේ දත්ත හිස් කිරීමට, <ph name="BEGIN_LINK" />පුරන්න<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">ඔබ ඕනෑම උපාංගයක් මත නතර කළ තැනින් පටන් ගන්න</translation>
 <translation id="4982236238228587209">උපාංග මෘදුකාංගය</translation>
+<translation id="4986706507552097681">ඔබට සැමවිටම සැකසීම් තුළ සමමුහු කළ යුතු දෙය තෝරා ගත හැක. Google ඔබේ ඉතිහාසය මත පදනම්ව සෙවීම් සහ අනෙකුත් සේවාවන් පෞද්ගලීකරණය කිරීමට ඉඩ ඇත.</translation>
 <translation id="4986728572522335985">මෙය එහි රහස් අංකය ඇතුළුව ආරක්‍ෂක යතුර මත සියලුම දත්ත මකයි</translation>
 <translation id="4988526792673242964">පිටු</translation>
 <translation id="49896407730300355">වාමාවර්තව කරකවන්න (&amp;o)</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index bbb26d6..e3c1a65 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1453,7 +1453,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Poznámka:<ph name="END_BOLD" /> Systém sa počas príslušného procesu reštartuje.</translation>
 <translation id="23030561267973084">Rozšírenie <ph name="EXTENSION_NAME" /> vyžaduje ďalšie povolenia.</translation>
-<translation id="23055578400314116">Vyberte používateľské meno</translation>
 <translation id="2307462900900812319">Konfigurovať sieť</translation>
 <translation id="2307553512430195144">Ak vyjadríte súhlas, Asistent Google bude čakať v pohotovostnom režime na rozpoznanie kľúčového výrazu „Hey Google“ a pomocou funkcie Voice Match bude môcť rozpoznávať, že hovorí dieťa <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3441,6 +3440,7 @@
 <translation id="4147911968024186208">Skúste to znova. Ak sa vám znova zobrazí táto chyba, kontaktujte zástupcu podpory.</translation>
 <translation id="4150201353443180367">Displej</translation>
 <translation id="4150569944729499860">Kontext obrazovky</translation>
+<translation id="4152011295694446843">Tu nájdete svoje záložky</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 karta}few{# karty}many{# karty}other{# kariet}}</translation>
 <translation id="4154664944169082762">Odtlačky</translation>
 <translation id="4157869833395312646">Šifrovanie Server Gated Cryptography spoločnosti Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 27fff47..63a5c43 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -1469,7 +1469,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Opomba:<ph name="END_BOLD" /> Sistem se bo med postopkom znova zagnal.</translation>
 <translation id="23030561267973084">Razširitev »<ph name="EXTENSION_NAME" />« zahteva dodatna dovoljenja.</translation>
-<translation id="23055578400314116">Izberite uporabniško ime</translation>
 <translation id="2307462900900812319">Konfiguriranje omrežja</translation>
 <translation id="2307553512430195144">Če se strinjate, bo Pomočnik Google čakal v načinu pripravljenosti zaradi prepoznavanja sprožilne besedne zveze »Hey Google« in lahko z Voice Matchem prepozna, ali govori <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -2390,6 +2389,7 @@
 <translation id="3143515551205905069">Prekliči sinhronizacijo</translation>
 <translation id="3143754809889689516">Predvajaj od začetka</translation>
 <translation id="3144647712221361880">Odpiranje povezave kot</translation>
+<translation id="3144896554017119333">Razširitve in drugo</translation>
 <translation id="3149510190863420837">Aplikacije za Chrome</translation>
 <translation id="3150693969729403281">Zagon varnostnega preverjanja</translation>
 <translation id="3150927491400159470">Znova naloži brez predpomnilnika</translation>
@@ -2498,6 +2498,7 @@
 <translation id="3268451620468152448">Odprti zavihki</translation>
 <translation id="3269093882174072735">Naloži sliko</translation>
 <translation id="326911502853238749">Ne prikaži modula <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Če želite varnostno kopirati vsebino in jo uporabljati v poljubni napravi, vklopite sinhronizacijo</translation>
 <translation id="3269612321104318480">Svetlo zelenomodra in bela</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Datoteka}one{# datoteka}two{# datoteki}few{# datoteke}other{# datotek}}</translation>
 <translation id="326999365752735949">Prenos razlik</translation>
@@ -3455,6 +3456,7 @@
 <translation id="4147911968024186208">Poskusite znova. Če se ta napaka spet prikaže, se obrnite na zastopnika za podporo.</translation>
 <translation id="4150201353443180367">Prikaz</translation>
 <translation id="4150569944729499860">Vsebina na zaslonu</translation>
+<translation id="4152011295694446843">Tukaj bodo prikazani zavihki</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 zavihek}one{# zavihek}two{# zavihka}few{# zavihki}other{# zavihkov}}</translation>
 <translation id="4154664944169082762">Prstni odtisi</translation>
 <translation id="4157869833395312646">Microsoftovo strežniško nadzorovano šifriranje</translation>
@@ -4296,6 +4298,7 @@
 <translation id="4950993567860689081">Sejo upravlja vaša organizacija Skrbniki lahko izbrišejo profil in nadzirajo omrežni promet.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{datoteko}one{# datoteko}two{# datoteki}few{# datoteke}other{# datotek}}</translation>
 <translation id="495170559598752135">Dejanja</translation>
+<translation id="4951966678293618079">Nikoli ne shrani gesel za to spletno mesto</translation>
 <translation id="4953808748584563296">Privzeti oranžni avatar</translation>
 <translation id="4955710816792587366">Izberite kodo PIN</translation>
 <translation id="4959262764292427323">Gesla so shranjena v Google Računu, da jih lahko uporabite v kateri koli napravi</translation>
@@ -4325,6 +4328,7 @@
 <translation id="4981449534399733132">Če želite izbrisati podatke brskanja iz vseh sinhroniziranih naprav in Google Računa, <ph name="BEGIN_LINK" />se prijavite<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">V poljubni napravi nadaljujte, kjer ste končali.</translation>
 <translation id="4982236238228587209">Programska oprema naprave</translation>
+<translation id="4986706507552097681">V nastavitvah lahko kadar koli izberete, kaj želite sinhronizirati. Google lahko prilagodi Iskanje Google in druge storitve glede na vašo zgodovino.</translation>
 <translation id="4986728572522335985">S tem bodo izbrisani vsi podatki na varnostnem ključu, vključno z njegovo kodo PIN</translation>
 <translation id="4988526792673242964">Strani</translation>
 <translation id="49896407730300355">Zasukaj v o&amp;bratni smeri urinega kazalca</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 31c9c517..75e3f68 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -1449,7 +1449,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Shënim.<ph name="END_BOLD" />  Sistemi do të rindizet gjatë procesit.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ka kërkuar leje shtesë.</translation>
-<translation id="23055578400314116">Zgjidh një emër përdoruesi</translation>
 <translation id="2307462900900812319">Konfiguro rrjetin</translation>
 <translation id="2307553512430195144">Nëse je dakord, "Asistenti i Google" do të presë në modalitetin e gatishmërisë për të zbuluar “Ok Google” dhe mund të dallojë që është <ph name="SUPERVISED_USER_NAME" /> duke folur me Voice Match.
     <ph name="BR" />
@@ -3435,6 +3434,7 @@
 <translation id="4147911968024186208">Provo përsëri. Nëse e shikon përsëri këtë gabim, kontakto me përfaqësuesin e shërbimit të mbështetjes.</translation>
 <translation id="4150201353443180367">Ekrani</translation>
 <translation id="4150569944729499860">Konteksti i ekranit</translation>
+<translation id="4152011295694446843">Këtu do të gjesh faqeshënuesit e tu</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 skedë}other{# skeda}}</translation>
 <translation id="4154664944169082762">Gjurmë gishtash</translation>
 <translation id="4157869833395312646">Kriptografia e rrethuar e serverit të Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 58fbd26..9fedcaf6 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1450,7 +1450,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Napomena:<ph name="END_BOLD" /> Sistem će se restartovati tokom ovog procesa.</translation>
 <translation id="23030561267973084">Dodatak „<ph name="EXTENSION_NAME" />“ je zatražio dodatne dozvole.</translation>
-<translation id="23055578400314116">Izaberite korisničko ime</translation>
 <translation id="2307462900900812319">Konfiguriši mrežu</translation>
 <translation id="2307553512430195144">Ako prihvatite, Google će čekati u režimu mirovanja da bi otkrio frazu „Hej Google“ i da bi pomoću Voice Match-a mogao da prepozna da <ph name="SUPERVISED_USER_NAME" /> govori.
     <ph name="BR" />
@@ -2371,6 +2370,7 @@
 <translation id="3143515551205905069">Otkaži sinhronizaciju</translation>
 <translation id="3143754809889689516">Pusti ispočetka</translation>
 <translation id="3144647712221361880">Otvorite link kao</translation>
+<translation id="3144896554017119333">Dodaci i drugo</translation>
 <translation id="3149510190863420837">Chrome aplikacije</translation>
 <translation id="3150693969729403281">Obavite bezbednosnu proveru odmah</translation>
 <translation id="3150927491400159470">Ponovo učitaj sa servera</translation>
@@ -2479,6 +2479,7 @@
 <translation id="3268451620468152448">Otvorene kartice</translation>
 <translation id="3269093882174072735">Učitaj sliku</translation>
 <translation id="326911502853238749">Ne prikazuj <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Uključite sinhronizaciju da biste pravili rezervne kopije sadržaja i da biste ga koristili na bilo kom uređaju</translation>
 <translation id="3269612321104318480">Svetlotirkizna i bela</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Fajl}one{# fajl}few{# fajla}other{# fajlova}}</translation>
 <translation id="326999365752735949">Preuzimanje diff datoteke</translation>
@@ -3436,6 +3437,7 @@
 <translation id="4147911968024186208">Probajte ponovo. Ako se ova greška ponovo prikaže, kontaktirajte predstavnika podrške.</translation>
 <translation id="4150201353443180367">Ekran</translation>
 <translation id="4150569944729499860">Kontekst ekrana</translation>
+<translation id="4152011295694446843">Ovde ćete pronaći obeleživače</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 kartica}one{# kartica}few{# kartice}other{# kartica}}</translation>
 <translation id="4154664944169082762">Otisci</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4276,6 +4278,7 @@
 <translation id="4950993567860689081">Sesijom upravlja organizacija Administratori mogu da izbrišu vaš profil i da nadgledaju vaš mrežni saobraćaj.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{fajl}one{# fajl}few{# fajla}other{# fajlova}}</translation>
 <translation id="495170559598752135">Radnje</translation>
+<translation id="4951966678293618079">Nikada ne čuvaj lozinke za ovaj sajt</translation>
 <translation id="4953808748584563296">Podrazumevani narandžasti avatar</translation>
 <translation id="4955710816792587366">Odaberite PIN</translation>
 <translation id="4959262764292427323">Lozinke se čuvaju na Google nalogu da biste mogli da ih koristite na bilo kom uređaju</translation>
@@ -4305,6 +4308,7 @@
 <translation id="4981449534399733132">Da biste obrisali podatke pregledanja sa svih sinhronizovanih uređaja i sa Google naloga, <ph name="BEGIN_LINK" />prijavite se<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Nastavite tamo gde ste stali na bilo kom uređaju</translation>
 <translation id="4982236238228587209">Softver uređaja</translation>
+<translation id="4986706507552097681">Uvek možete da odaberete šta ćete sinhronizovati u podešavanjima. Google može da personalizuje Pretragu i druge usluge na osnovu istorije.</translation>
 <translation id="4986728572522335985">Time ćete izbrisati sve podatke sa bezbednosnog ključa, uključujući njegov PIN</translation>
 <translation id="4988526792673242964">Stranice</translation>
 <translation id="49896407730300355">Okreći u s&amp;meru suprotnom od kretanja kazaljke na satu</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index e191650..b992a48 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1450,7 +1450,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Напомена:<ph name="END_BOLD" /> Систем ће се рестартовати током овог процеса.</translation>
 <translation id="23030561267973084">Додатак „<ph name="EXTENSION_NAME" />“ је затражио додатне дозволе.</translation>
-<translation id="23055578400314116">Изаберите корисничко име</translation>
 <translation id="2307462900900812319">Конфигуриши мрежу</translation>
 <translation id="2307553512430195144">Ако прихватите, Google ће чекати у режиму мировања да би открио фразу „Хеј Google“ и да би помоћу Voice Match-а могао да препозна да <ph name="SUPERVISED_USER_NAME" /> говори.
     <ph name="BR" />
@@ -2371,6 +2370,7 @@
 <translation id="3143515551205905069">Откажи синхронизацију</translation>
 <translation id="3143754809889689516">Пусти испочетка</translation>
 <translation id="3144647712221361880">Отворите линк као</translation>
+<translation id="3144896554017119333">Додаци и друго</translation>
 <translation id="3149510190863420837">Chrome апликације</translation>
 <translation id="3150693969729403281">Обавите безбедносну проверу одмах</translation>
 <translation id="3150927491400159470">Поново учитај са сервера</translation>
@@ -2479,6 +2479,7 @@
 <translation id="3268451620468152448">Отворене картице</translation>
 <translation id="3269093882174072735">Учитај слику</translation>
 <translation id="326911502853238749">Не приказуј <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Укључите синхронизацију да бисте правили резервне копије садржаја и да бисте га користили на било ком уређају</translation>
 <translation id="3269612321104318480">Светлотиркизна и бела</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Фајл}one{# фајл}few{# фајла}other{# фајлова}}</translation>
 <translation id="326999365752735949">Преузимање diff датотеке</translation>
@@ -3436,6 +3437,7 @@
 <translation id="4147911968024186208">Пробајте поново. Ако се ова грешка поново прикаже, контактирајте представника подршке.</translation>
 <translation id="4150201353443180367">Екран</translation>
 <translation id="4150569944729499860">Контекст екрана</translation>
+<translation id="4152011295694446843">Овде ћете пронаћи обележиваче</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 картица}one{# картица}few{# картице}other{# картица}}</translation>
 <translation id="4154664944169082762">Отисци</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4276,6 +4278,7 @@
 <translation id="4950993567860689081">Сесијом управља организација Администратори могу да избришу ваш профил и да надгледају ваш мрежни саобраћај.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{фајл}one{# фајл}few{# фајла}other{# фајлова}}</translation>
 <translation id="495170559598752135">Радње</translation>
+<translation id="4951966678293618079">Никада не чувај лозинке за овај сајт</translation>
 <translation id="4953808748584563296">Подразумевани наранџасти аватар</translation>
 <translation id="4955710816792587366">Одаберите PIN</translation>
 <translation id="4959262764292427323">Лозинке се чувају на Google налогу да бисте могли да их користите на било ком уређају</translation>
@@ -4305,6 +4308,7 @@
 <translation id="4981449534399733132">Да бисте обрисали податке прегледања са свих синхронизованих уређаја и са Google налога, <ph name="BEGIN_LINK" />пријавите се<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Наставите тамо где сте стали на било ком уређају</translation>
 <translation id="4982236238228587209">Софтвер уређаја</translation>
+<translation id="4986706507552097681">Увек можете да одаберете шта ћете синхронизовати у подешавањима. Google може да персонализује Претрагу и друге услуге на основу историје.</translation>
 <translation id="4986728572522335985">Тиме ћете избрисати све податке са безбедносног кључа, укључујући његов PIN</translation>
 <translation id="4988526792673242964">Странице</translation>
 <translation id="49896407730300355">Окрећи у с&amp;меру супротном од кретања казаљке на сату</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 8368406..791c505a 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -1466,7 +1466,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Obs!<ph name="END_BOLD" /> Systemet startas om under aktiveringen.</translation>
 <translation id="23030561267973084"><ph name="EXTENSION_NAME" /> har begärt ytterligare behörigheter.</translation>
-<translation id="23055578400314116">Välj ett användarnamn</translation>
 <translation id="2307462900900812319">Konfigurera nätverk</translation>
 <translation id="2307553512430195144">Om du godkänner väntar Google Assistent i viloläge tills den registrerar ”Hey Google” och identifierar att det är <ph name="SUPERVISED_USER_NAME" /> som talar med Voice Match.
     <ph name="BR" />
@@ -3452,6 +3451,7 @@
 <translation id="4147911968024186208">Försök igen. Kontakta supporten om det här felet återkommer.</translation>
 <translation id="4150201353443180367">Skärm</translation>
 <translation id="4150569944729499860">Innehållet på skärmen</translation>
+<translation id="4152011295694446843">Du hittar dina bokmärken här</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 flik}other{# flikar}}</translation>
 <translation id="4154664944169082762">Fingeravtryck</translation>
 <translation id="4157869833395312646">Microsofts serverstyrda kryptografi</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 1539a2a..ab5621c 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -1463,7 +1463,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Kumbuka:<ph name="END_BOLD" /> Mfumo utazima na kuwaka tena wakati wa mchakato huu.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" kimeomba vibali vya ziada.</translation>
-<translation id="23055578400314116">Chagua jina la mtumiaji</translation>
 <translation id="2307462900900812319">Sanidi mtandao</translation>
 <translation id="2307553512430195144">Ukikubali, programu ya Mratibu wa Google itasubiri katika hali tuli hadi itakaposikia “Ok Google” na inaweza kutambua kwamba ni <ph name="SUPERVISED_USER_NAME" /> anayezungumza kwa kutumia Voice Match.
     <ph name="BR" />
@@ -3447,6 +3446,7 @@
 <translation id="4147911968024186208">Tafadhali jaribu tena. Ukiona hitilafu hii tena, tafadhali wasiliana na mwakilishi wako wa kutoa usaidizi.</translation>
 <translation id="4150201353443180367">Onyesho</translation>
 <translation id="4150569944729499860">Muktadha wa skrini</translation>
+<translation id="4152011295694446843">Utapata alamisho zako hapa</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{Kichupo 1}other{Vichupo #}}</translation>
 <translation id="4154664944169082762">Alazama za Vidole</translation>
 <translation id="4157869833395312646">Usimbaji wa Vizuizi vya Seva kutoka Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 0bdb1974..3d1feb1 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1466,7 +1466,6 @@
         <ph name="BR" />
         <ph name="BEGIN_BOLD" />கவனத்திற்கு:<ph name="END_BOLD" /> இந்தச் செயல்முறையின்போது சிஸ்டம் மறுபடி தொடங்கும்.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ஆனது கூடுதல் அனுமதிகளைக் கோரியுள்ளது.</translation>
-<translation id="23055578400314116">பயனர்பெயரைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="2307462900900812319">நெட்வொர்க்கை உள்ளமை</translation>
 <translation id="2307553512430195144">நீங்கள் அனுமதித்தால் “Ok Google” என்பதைப் புரிந்துகொள்ள Google Assistant காத்திருப்புப் பயன்முறையில் இருக்கும். அத்துடன் பேசுவது <ph name="SUPERVISED_USER_NAME" /> என்பதை Voice Match உதவியுடன் அடையாளம் காணவும் முடியும்.
     <ph name="BR" />
@@ -3452,6 +3451,7 @@
 <translation id="4147911968024186208">மீண்டும் முயலவும். இந்தப் பிழை மீண்டும் ஏற்பட்டால், உங்கள் உதவி மையப் பிரதிநிதியைத் தொடர்பு கொள்ளவும்.</translation>
 <translation id="4150201353443180367">திரை</translation>
 <translation id="4150569944729499860">திரையில் இருப்பவை குறித்து காட்டும் அம்சம்</translation>
+<translation id="4152011295694446843">உங்கள் புக்மார்க்குகளை இங்கே பார்ப்பீர்கள்</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 தாவல்}other{# தாவல்கள்}}</translation>
 <translation id="4154664944169082762">விரல் அச்சுகள்</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 2bbdeb15..72ac119 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1465,7 +1465,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />గమనిక:<ph name="END_BOLD" />  ప్రాసెస్ సమయంలో సిస్టమ్ రీబూట్ అవుతుంది.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" అదనపు అనుమతులను అభ్యర్థించింది.</translation>
-<translation id="23055578400314116">ఒక యూజర్‌నేమ్ ఎంచుకోండి</translation>
 <translation id="2307462900900812319">నెట్‌వర్క్‌ను కాన్ఫిగర్ చేయి</translation>
 <translation id="2307553512430195144">మీరు అంగీకరిస్తే, Google Assistant "Ok Google"ను గుర్తించడానికి స్టాండ్‌బై మోడ్‌లో ఉండి, వాయిస్ మ్యాచ్ సహాయంతో మాట్లాడేది <ph name="SUPERVISED_USER_NAME" /> అని గుర్తుపట్టగలదు.
     <ph name="BR" />
@@ -3451,6 +3450,7 @@
 <translation id="4147911968024186208">దయచేసి మళ్లీ ప్రయత్నించండి. మీకు ఈ ఎర్రర్ మళ్లీ కనిపిస్తే, దయచేసి మీ మద్దతు ప్రతినిధిని సంప్రదించండి.</translation>
 <translation id="4150201353443180367">డిస్‌ప్లే</translation>
 <translation id="4150569944729499860">స్క్రీన్ కాంటెక్ట్స్</translation>
+<translation id="4152011295694446843">మీరు మీ బుక్‌మార్క్‌లను ఇక్కడ చూడవచ్చు</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ట్యాబ్}other{# ట్యాబ్‌లు}}</translation>
 <translation id="4154664944169082762">వేలిముద్రలు</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 88db52b2..9f93df7 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -1451,7 +1451,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />หมายเหตุ:<ph name="END_BOLD" /> ระบบจะรีบูตระหว่างการดำเนินการ</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ขออนุญาตเพิ่มเติม</translation>
-<translation id="23055578400314116">เลือกชื่อผู้ใช้</translation>
 <translation id="2307462900900812319">กำหนดค่าเครือข่าย</translation>
 <translation id="2307553512430195144">หากคุณยอมรับ Google Assistant จะรออยู่ในโหมดสแตนด์บายเพื่อตรวจจับเสียงพูด "Ok Google" และ Voice Match ทำให้รู้ว่าคนที่กำลังพูดคือ <ph name="SUPERVISED_USER_NAME" />
     <ph name="BR" />
@@ -3439,6 +3438,7 @@
 <translation id="4147911968024186208">โปรดลองอีกครั้ง หากพบข้อผิดพลาดนี้อีก ให้ติดต่อตัวแทนฝ่ายสนับสนุน</translation>
 <translation id="4150201353443180367">การแสดงผล</translation>
 <translation id="4150569944729499860">บริบทบนหน้าจอ</translation>
+<translation id="4152011295694446843">คุณจะเห็นบุ๊กมาร์กที่นี่</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 แท็บ}other{# แท็บ}}</translation>
 <translation id="4154664944169082762">ลายนิ้วมือ</translation>
 <translation id="4157869833395312646">วิธีการเข้ารหัสแบบ Server Gated ของ Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 6ec2503..ba94b81 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -1449,7 +1449,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Not:<ph name="END_BOLD" /> İşlem sırasında sistem yeniden başlatılacaktır.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" ek izinler istedi.</translation>
-<translation id="23055578400314116">Bir kullanıcı adı seçin</translation>
 <translation id="2307462900900812319">Ağı yapılandır</translation>
 <translation id="2307553512430195144">Kabul ederseniz Google Asistan "Ok Google" ifadesini algılamak için bekleme modunda kalır ve Voice Match ile konuşanın <ph name="SUPERVISED_USER_NAME" /> olduğunu anlar.
     <ph name="BR" />
@@ -3435,6 +3434,7 @@
 <translation id="4147911968024186208">Lütfen yeniden deneyin. Bu hatayı tekrar görürseniz lütfen destek temsilcinizle iletişime geçin.</translation>
 <translation id="4150201353443180367">Ekran</translation>
 <translation id="4150569944729499860">Ekran bağlamı</translation>
+<translation id="4152011295694446843">Yer işaretlerinizi burada bulabilirsiniz</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 sekme}other{# sekme}}</translation>
 <translation id="4154664944169082762">Parmak izleri</translation>
 <translation id="4157869833395312646">Microsoft Sunucu Geçitli Şifreleme</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 74cd78ba0..89650557 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -1469,7 +1469,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Примітка<ph name="END_BOLD" />. Під час цього процесу система перезапуститься.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" запитує додаткові дозволи.</translation>
-<translation id="23055578400314116">Виберіть ім'я користувача</translation>
 <translation id="2307462900900812319">Установити параметри мережі</translation>
 <translation id="2307553512430195144">Якщо ви погодитеся, Google Асистент виявлятиме фразу "Ok Google" у режимі очікування. За допомогою Voice Match він розпізнаватиме, що говорить саме <ph name="SUPERVISED_USER_NAME" />.
     <ph name="BR" />
@@ -3457,6 +3456,7 @@
 <translation id="4147911968024186208">Повторіть спробу. Якщо повідомлення про помилку з’явиться знову, зв’яжіться з представником служби підтримки.</translation>
 <translation id="4150201353443180367">Екран</translation>
 <translation id="4150569944729499860">Екранний контекст</translation>
+<translation id="4152011295694446843">Тут відображатимуться ваші закладки</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 вкладка}one{# вкладка}few{# вкладки}many{# вкладок}other{# вкладки}}</translation>
 <translation id="4154664944169082762">Відбитки</translation>
 <translation id="4157869833395312646">Серверне шифрування Microsoft</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 097e8fb..06a8826b 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1453,7 +1453,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />نوٹ:<ph name="END_BOLD" />  کاروائی کے دوران سسٹم ریبوٹ کرے گا۔</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" نے اضافی اجازتوں کی درخواست کی ہے۔</translation>
-<translation id="23055578400314116">صارف نام منتخب کریں</translation>
 <translation id="2307462900900812319">نیٹ ورک کنفیگر کریں</translation>
 <translation id="2307553512430195144">‏اگر آپ متفق ہیں تو Google اسسٹنٹ "Ok Google" کا پتا لگانے کے لیے اسٹینڈ بائی وضع میں انتظار کرے گی اور Voice Match کے ساتھ یہ شناخت کر سکتی ہے کہ <ph name="SUPERVISED_USER_NAME" /> بول رہا ہے۔
     <ph name="BR" />
@@ -2374,6 +2373,7 @@
 <translation id="3143515551205905069">مطابقت پذیری منسوخ کریں</translation>
 <translation id="3143754809889689516">شروع سے چلائیں</translation>
 <translation id="3144647712221361880">لنک کو اس کے بطور کھولیں</translation>
+<translation id="3144896554017119333">ایکسٹینشنز اور مزید</translation>
 <translation id="3149510190863420837">‏Chrome ایپس</translation>
 <translation id="3150693969729403281">اب سیفٹی چیک چلائیں</translation>
 <translation id="3150927491400159470">ہارڈ ری لوڈ</translation>
@@ -2482,6 +2482,7 @@
 <translation id="3268451620468152448">کھلے ٹیبز</translation>
 <translation id="3269093882174072735">تصویر لوڈ کریں</translation>
 <translation id="326911502853238749"><ph name="MODULE_NAME" /> نہ دکھائیں</translation>
+<translation id="3269175001434213183">اپنے ڈیٹا کا بیک اپ لینے اور اسے کسی بھی آلہ پر استعمال کرنے کے لیے مطابقت پذیری کو آن کریں</translation>
 <translation id="3269612321104318480">ہلکا نیلگوں سبز اور سفید</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{فائل}other{# فائلز}}</translation>
 <translation id="326999365752735949">ڈف ڈاؤن لوڈ ہو رہا ہے</translation>
@@ -3439,6 +3440,7 @@
 <translation id="4147911968024186208">براہ کرم دوبارہ کوشش کریں۔ اگر یہ خرابی دوبارہ پیش آتی ہے تو براہ کرم اپنے سپورٹ کے نمائندے سے رابطہ کریں۔</translation>
 <translation id="4150201353443180367">ڈسپلے</translation>
 <translation id="4150569944729499860">اسکرین کا سیاق و سباق</translation>
+<translation id="4152011295694446843">آپ اپنے بُک مارکس یہاں پائیں گے</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ٹیب}other{# ٹیبز}}</translation>
 <translation id="4154664944169082762">فنگر پرنٹس</translation>
 <translation id="4157869833395312646">‏Microsoft سرور گیٹڈ کرپٹوگرافی</translation>
@@ -4279,6 +4281,7 @@
 <translation id="4950993567860689081">آپ کا سیشن آپ کی تنظیم کے زیر انتظام ہے۔ منتظمین آپ کی پروفائل حذف کر سکتے ہیں اور آپ کے نیٹ ورک ٹریفک کی نگرانی بھی کر سکتے ہیں۔</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ایک فائل}other{# فائلز}}</translation>
 <translation id="495170559598752135">کارروائیاں</translation>
+<translation id="4951966678293618079">اس سائٹ کے لیے کبھی بھی پاس ورڈز محفوظ نہ کریں</translation>
 <translation id="4953808748584563296">ڈیفالٹ نارنجی اوتار</translation>
 <translation id="4955710816792587366">‏اپنا PIN منتخب کریں</translation>
 <translation id="4959262764292427323">‏آپ کے Google اکاؤنٹ میں پاس ورڈز محفوظ ہیں اس لیے آپ انہیں کسی بھی آلہ پر استعمال کر سکتے ہیں</translation>
@@ -4308,6 +4311,7 @@
 <translation id="4981449534399733132">‏اپنے سبھی مطابقت پذیر آلات اور اپنے Google اکاؤنٹ سے براؤزنگ ڈیٹا صاف کرنے کیلئے، <ph name="BEGIN_LINK" />سائن ان کریں<ph name="END_LINK" />۔</translation>
 <translation id="4982111327868342436">کسی بھی آلے پر آپ نے جہاں چھوڑا تھا وہیں سے شروع کریں</translation>
 <translation id="4982236238228587209">آلے کا سافٹ ویئر</translation>
+<translation id="4986706507552097681">‏آپ ترتیبات میں کسی بھی وقت اس بات کا انتخاب کر سکتے ہیں کہ کس چیز کی مطابقت پذیری کرنی ہے۔ Google آپ کی سرگزشت کی بنیاد پر تلاش اور دیگر سروسز کو ذاتی نوعیت کا بنا سکتا ہے۔</translation>
 <translation id="4986728572522335985">‏اس سے سیکیورٹی کلید کا PIN سمیت تمام ڈیٹا حذف ہو جائے گا</translation>
 <translation id="4988526792673242964">صفحات</translation>
 <translation id="49896407730300355">گ&amp;ھڑی کی مخالف سمت میں گھمائیں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index df6e05d..029dd00 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -1453,7 +1453,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Eslatma:<ph name="END_BOLD" />  sozlash paytida tizim qayta ishga tushiriladi.</translation>
 <translation id="23030561267973084">“<ph name="EXTENSION_NAME" />” kengaytmasi qo‘shimcha ruxsatnomalar so‘radi.</translation>
-<translation id="23055578400314116">Foydalanuvchini tanlang</translation>
 <translation id="2307462900900812319">Tarmoqni sozlash</translation>
 <translation id="2307553512430195144">Rozi boʻlsangiz, Google Assistent kutish rejimida ishlaydi va <ph name="SUPERVISED_USER_NAME" /> “Ok Google” deyishini aniqlaydi va Voice Match yordamida uning ovozini taniy oladi.
     <ph name="BR" />
@@ -3441,6 +3440,7 @@
 <translation id="4147911968024186208">Qaytadan urining. Muammo qaytarilsa, mijozlar xizmatiga murojaat qiling.</translation>
 <translation id="4150201353443180367">Ekran</translation>
 <translation id="4150569944729499860">Ekran konteksti</translation>
+<translation id="4152011295694446843">Brauzer bukmarklari shu yerda chiqadi</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ta ichki oyna}other{# ta ichki oyna}}</translation>
 <translation id="4154664944169082762">Barmoq izlari</translation>
 <translation id="4157869833395312646">Microsoft shifrlash serveri</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index b76121c..ac1d5e9 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1466,7 +1466,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />Lưu ý:<ph name="END_BOLD" />  Hệ thống sẽ khởi động lại trong quá trình này.</translation>
 <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" đã yêu cầu thêm quyền.</translation>
-<translation id="23055578400314116">Chọn tên người dùng</translation>
 <translation id="2307462900900812319">Định cấu hình mạng</translation>
 <translation id="2307553512430195144">Nếu bạn đồng ý, thì Trợ lý Google sẽ đợi ở chế độ chờ để phát hiện câu lệnh “Ok Google” và có thể nhận ra đó là giọng nói của <ph name="SUPERVISED_USER_NAME" /> bằng tính năng Voice Match.
     <ph name="BR" />
@@ -2387,6 +2386,7 @@
 <translation id="3143515551205905069">Hủy đồng bộ hóa</translation>
 <translation id="3143754809889689516">Phát từ đầu</translation>
 <translation id="3144647712221361880">Mở đường liên kết bằng tài khoản</translation>
+<translation id="3144896554017119333">Tiện ích và nhiều nội dung khác</translation>
 <translation id="3149510190863420837">Ứng dụng Chrome</translation>
 <translation id="3150693969729403281">Chạy tính năng kiểm tra an toàn ngay</translation>
 <translation id="3150927491400159470">Tải lại cứng</translation>
@@ -2495,6 +2495,7 @@
 <translation id="3268451620468152448">Thẻ đang mở</translation>
 <translation id="3269093882174072735">Tải hình ảnh</translation>
 <translation id="326911502853238749">Không hiện <ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Bật tính năng đồng bộ hoá để sao lưu và sử dụng dữ liệu của bạn trên mọi thiết bị</translation>
 <translation id="3269612321104318480">Xanh két nhạt và trắng</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Tệp}other{# tệp}}</translation>
 <translation id="326999365752735949">Đang tải xuống phần khác nhau</translation>
@@ -3452,6 +3453,7 @@
 <translation id="4147911968024186208">Vui lòng thử lại. Nếu bạn vẫn thấy lỗi này, vui lòng liên hệ với người đại diện hỗ trợ của bạn.</translation>
 <translation id="4150201353443180367">Hiển thị</translation>
 <translation id="4150569944729499860">Ngữ cảnh trên màn hình</translation>
+<translation id="4152011295694446843">Bạn sẽ thấy các dấu trang ở đây</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 thẻ}other{# thẻ}}</translation>
 <translation id="4154664944169082762">Dấu vân tay</translation>
 <translation id="4157869833395312646">Mã hóa Cổng Máy chủ của Microsoft</translation>
@@ -4293,6 +4295,7 @@
 <translation id="4950993567860689081">Phiên của bạn chịu sự quản lý của tổ chức của bạn. Quản trị viên có thể xoá hồ sơ của bạn cũng như giám sát lưu lượng truy cập mạng của bạn.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{một tệp}other{# tệp}}</translation>
 <translation id="495170559598752135">Tác vụ</translation>
+<translation id="4951966678293618079">Không bao giờ lưu mật khẩu cho trang web này</translation>
 <translation id="4953808748584563296">Hình đại diện màu cam mặc định</translation>
 <translation id="4955710816792587366">Chọn mã PIN</translation>
 <translation id="4959262764292427323">Các mật khẩu được lưu trong Tài khoản Google của bạn, vì vậy, bạn có thể sử dụng các mật khẩu đó trên bất cứ thiết bị nào</translation>
@@ -4322,6 +4325,7 @@
 <translation id="4981449534399733132">Để xóa dữ liệu duyệt web khỏi tất cả các thiết bị đã đồng bộ hóa và Tài khoản Google của bạn, hãy <ph name="BEGIN_LINK" />đăng nhập<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Tiếp tục công việc dang dở trên mọi thiết bị</translation>
 <translation id="4982236238228587209">Phần mềm trên thiết bị</translation>
+<translation id="4986706507552097681">Bạn có thể chọn nội dung muốn đồng bộ hoá bất cứ lúc nào trong phần cài đặt. Google có thể cá nhân hoá dịch vụ Tìm kiếm và các dịch vụ khác dựa trên nhật ký của bạn.</translation>
 <translation id="4986728572522335985">Thao tác này sẽ xóa toàn bộ dữ liệu trên khóa bảo mật, bao gồm cả mã PIN của khóa</translation>
 <translation id="4988526792673242964">Trang</translation>
 <translation id="49896407730300355">Xoay &amp;ngược chiều kim đồng hồ</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index cfe5fed..46c892c 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -1444,7 +1444,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />注意<ph name="END_BOLD" />:在此过程中,系统将会重新启动。</translation>
 <translation id="23030561267973084">“<ph name="EXTENSION_NAME" />”请求获得更多权限。</translation>
-<translation id="23055578400314116">选择用户名</translation>
 <translation id="2307462900900812319">配置网络</translation>
 <translation id="2307553512430195144">如果您同意,Google 助理将会在待机模式下等待检测“Ok Google”,并可以通过 Voice Match 识别出是<ph name="SUPERVISED_USER_NAME" />在说话。
     <ph name="BR" />
@@ -3428,6 +3427,7 @@
 <translation id="4147911968024186208">请重试。如果系统仍提示此错误,请与您的支持代表联系。</translation>
 <translation id="4150201353443180367">显示</translation>
 <translation id="4150569944729499860">屏幕上下文</translation>
+<translation id="4152011295694446843">您的书签会显示在此处</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 个标签页}other{# 个标签页}}</translation>
 <translation id="4154664944169082762">指纹</translation>
 <translation id="4157869833395312646">Microsoft 服务器网关加密</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index 0925d28..b04dcd5 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -1466,7 +1466,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />注意:<ph name="END_BOLD" />系統會在程序中途重新啟動。</translation>
 <translation id="23030561267973084">「<ph name="EXTENSION_NAME" />」要求其他權限。</translation>
-<translation id="23055578400314116">請選取使用者名稱</translation>
 <translation id="2307462900900812319">設定網絡</translation>
 <translation id="2307553512430195144">如果您同意,「Google 助理」會處於待機模式,以便偵測「Ok Google」指令,並透過 Voice Match 功能識別<ph name="SUPERVISED_USER_NAME" />是否正在說話。
     <ph name="BR" />
@@ -2387,7 +2386,7 @@
 <translation id="3143515551205905069">取消同步處理</translation>
 <translation id="3143754809889689516">從頭開始播放</translation>
 <translation id="3144647712221361880">以其他身分開啟連結</translation>
-<translation id="3144896554017119333">擴充功能和其他項目</translation>
+<translation id="3144896554017119333">擴充程式和其他項目</translation>
 <translation id="3149510190863420837">Chrome 應用程式</translation>
 <translation id="3150693969729403281">即刻執行安全檢查</translation>
 <translation id="3150927491400159470">強制重新載入</translation>
@@ -3454,6 +3453,7 @@
 <translation id="4147911968024186208">請重試。如果出現同樣問題,請聯絡您的支援代表。</translation>
 <translation id="4150201353443180367">顯示屏</translation>
 <translation id="4150569944729499860">畫面內容</translation>
+<translation id="4152011295694446843">您可在此查看書籤</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 個分頁}other{# 個分頁}}</translation>
 <translation id="4154664944169082762">指紋</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
@@ -4295,7 +4295,7 @@
 <translation id="4950993567860689081">工作階段由您的機構管理。管理員可刪除設定檔並監察網絡流量。</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{1 個檔案}other{# 個檔案}}</translation>
 <translation id="495170559598752135">動作</translation>
-<translation id="4951966678293618079">一律不儲存這個網站的密碼</translation>
+<translation id="4951966678293618079">一律不儲存此網站的密碼</translation>
 <translation id="4953808748584563296">預設橙色圖片</translation>
 <translation id="4955710816792587366">選擇 PIN</translation>
 <translation id="4959262764292427323">密碼會儲存在您的 Google 帳戶中,讓您可在任何裝置上使用</translation>
@@ -4325,7 +4325,7 @@
 <translation id="4981449534399733132">如要從所有已同步的裝置和 Google 帳戶中清除瀏覽資料,請<ph name="BEGIN_LINK" />登入<ph name="END_LINK" />。</translation>
 <translation id="4982111327868342436">在任何裝置上繼續未完成的工作</translation>
 <translation id="4982236238228587209">裝置軟件</translation>
-<translation id="4986706507552097681">你隨時可以在設定中選擇要同步處理的資料。Google 可能會根據你的歷史記錄在 Google 搜尋等其他服務中提供個人化體驗。</translation>
+<translation id="4986706507552097681">您隨時可在設定中選擇要同步的資料。Google 可能會根據您的記錄,提供個人化「搜尋」和其他服務。</translation>
 <translation id="4986728572522335985">此操作將刪除這個安全密鑰上的所有資料,包括 PIN</translation>
 <translation id="4988526792673242964">網頁</translation>
 <translation id="49896407730300355">逆時針旋轉(&amp;O)</translation>
@@ -8387,7 +8387,7 @@
 <translation id="8823514049557262177">複製連結文字(&amp;X)</translation>
 <translation id="8823559166155093873">封鎖 Cookie</translation>
 <translation id="8823704566850948458">建議密碼…</translation>
-<translation id="8823963789776061136">您也可以選取印表機 PPD。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
+<translation id="8823963789776061136">您亦可選取打印機 PPD。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="8824701697284169214">新增網頁(&amp;G)…</translation>
 <translation id="8827125715368568315">已封鎖<ph name="PERMISSION" />和其他 <ph name="COUNT" /> 個項目</translation>
 <translation id="8827289157496676362">固定擴充功能</translation>
@@ -8644,7 +8644,7 @@
 <translation id="9057007989365783744">「<ph name="SUPERVISED_USER_NAME" />」要求存取以下內容:</translation>
 <translation id="9057354806206861646">更新時間表</translation>
 <translation id="9058070466596314168">{NUM_NOTIFICATION,plural, =1{每天約傳送 1 則通知}other{每天約傳送 {NUM_NOTIFICATION} 則通知}}</translation>
-<translation id="9058760336383947367">查看印表機 PPD</translation>
+<translation id="9058760336383947367">查看打印機 PPD</translation>
 <translation id="9061383912634843744">使用已儲存的憑證自動登入網站和應用程式。如果關閉此功能,系統將會在每次登入網站或應用程式前要求您進行確認。</translation>
 <translation id="9062468308252555888">14 倍</translation>
 <translation id="9063208415146866933">第<ph name="ERROR_LINE_START" />至第<ph name="ERROR_LINE_END" />行有錯</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 0a017c79..249298a 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1451,7 +1451,6 @@
       <ph name="BR" />
       <ph name="BEGIN_BOLD" />注意:<ph name="END_BOLD" />系統會在過程中重新啟動。</translation>
 <translation id="23030561267973084">「<ph name="EXTENSION_NAME" />」要求其他權限。</translation>
-<translation id="23055578400314116">請選取使用者名稱</translation>
 <translation id="2307462900900812319">設定網路</translation>
 <translation id="2307553512430195144">如果你同意,Google 助理會處於待機模式,以便偵測「Ok Google」指令,並透過 Voice Match 功能辨識<ph name="SUPERVISED_USER_NAME" />是否正在說話。
     <ph name="BR" />
@@ -3438,6 +3437,7 @@
 <translation id="4147911968024186208">請再試一次。如果這個錯誤再次發生,請與你的產品支援代表聯絡。</translation>
 <translation id="4150201353443180367">顯示設定</translation>
 <translation id="4150569944729499860">畫面內容</translation>
+<translation id="4152011295694446843">這裡會顯示你的書籤</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 個分頁}other{# 個分頁}}</translation>
 <translation id="4154664944169082762">指紋</translation>
 <translation id="4157869833395312646">Microsoft Server Gated Cryptography</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 5b535a634..7d11bd6a 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1467,7 +1467,6 @@
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />Qaphela:<ph name="END_BOLD" />  Isistimu izoqalisa kabusha phakathi nenqubo.</translation>
 <translation id="23030561267973084">I-"<ph name="EXTENSION_NAME" />" icele izimvume ezingeziwe.</translation>
-<translation id="23055578400314116">Khetha igama lomsebenzisi</translation>
 <translation id="2307462900900812319">Lungiselela inethiwekhi</translation>
 <translation id="2307553512430195144">Uma uvuma, Umsizi we-Google uzolinda kumodi yokulinda ukuze athole “Ok Google” futhi aqaphele ukuthi ngu-<ph name="SUPERVISED_USER_NAME" /> okhuluma nge-Voice Match.
     <ph name="BR" />
@@ -2388,6 +2387,7 @@
 <translation id="3143515551205905069">Khansela ukuvumelanisa</translation>
 <translation id="3143754809889689516">Dlala kusukela ekuqaleni</translation>
 <translation id="3144647712221361880">Vula isixhumanisi njenge-</translation>
+<translation id="3144896554017119333">Izandiso nokunye okwengeziwe</translation>
 <translation id="3149510190863420837">Izinhlelo zokusebenza ze-Chrome</translation>
 <translation id="3150693969729403281">Sebenzisa ukuhlola kokuphepha manje</translation>
 <translation id="3150927491400159470">Ukulayishwa kabusha okunzima</translation>
@@ -2496,6 +2496,7 @@
 <translation id="3268451620468152448">Vula amathebhu</translation>
 <translation id="3269093882174072735">Layisha isithombe</translation>
 <translation id="326911502853238749">Ungabonisi i-<ph name="MODULE_NAME" /></translation>
+<translation id="3269175001434213183">Vula ukuvumelanisa ukuze wenze isipele sezinto zakho bese uzisebenzisa kunoma iyiphi idivayisi</translation>
 <translation id="3269612321104318480">Okukhanyayo nokumhlophe</translation>
 <translation id="3269689705184377744">{COUNT,plural, =1{Ifayela}one{amafayela angu-#}other{amafayela angu-#}}</translation>
 <translation id="326999365752735949">Ilanda i-diff</translation>
@@ -3452,6 +3453,7 @@
 <translation id="4147911968024186208">Sicela uzame futhi. Uma ubona leli phutha futhi sicela uxhumane nommeli wakho wosekelo.</translation>
 <translation id="4150201353443180367">Isiboniso</translation>
 <translation id="4150569944729499860">Okuqukethwe kwesikrini</translation>
+<translation id="4152011295694446843">Uzothola amabhukhimakhi wakho lapha</translation>
 <translation id="4152670763139331043">{NUM_TABS,plural, =1{1 ithebhu}one{# amathebhu}other{# amathebhu}}</translation>
 <translation id="4154664944169082762">Izigxivizo zeminwe</translation>
 <translation id="4157869833395312646">I-Microsoft Server Gated Cryptography</translation>
@@ -4293,6 +4295,7 @@
 <translation id="4950993567860689081">Iseshini yakho iphethwe inhlangano yakho. Abalawuli bangasula iphrofayela yakho futhi bagade ngisho nethrafikhi yenethiwekhi yakho.</translation>
 <translation id="495164417696120157">{COUNT,plural, =1{ifayela}one{amafayela angu-#}other{amafayela angu-#}}</translation>
 <translation id="495170559598752135">Izenzo</translation>
+<translation id="4951966678293618079">Ungalokothi ulondoloze amaphasiwedi ale sayithi</translation>
 <translation id="4953808748584563296">Isithombe esizenzakalelayo esiwolintshi</translation>
 <translation id="4955710816792587366">Khetha i-PIN yakho</translation>
 <translation id="4959262764292427323">Amaphasiwedi alondolozwa ku-akhawunti yakho ye-Google ukuze ukwazi ukuwasebenzisa kunoma iyiphi idivayisi</translation>
@@ -4322,6 +4325,7 @@
 <translation id="4981449534399733132">Ukuze usule idatha yokuphequlula kusuka kuwo wonke amadivayisi akho avumelanisiwe ne-akhawunti yakho ye-Google, <ph name="BEGIN_LINK" />ngena ngemvume<ph name="END_LINK" />.</translation>
 <translation id="4982111327868342436">Qhubeka lapho ushiye khona kunoma iyiphi idivayisi</translation>
 <translation id="4982236238228587209">Isofthiwe yedivayisi</translation>
+<translation id="4986706507552097681">Ungahlala ukhetha ukuthi yini okumele ivunyelaniswe kuzilungiselelo. I-Google ingase iqondanise nomuntu siqu i-Search namanye amasevisi ngokususelwe emlandweni wakho.</translation>
 <translation id="4986728572522335985">Lokhu kuzosusa yonke idatha kukhiye wokuqinisekisa ubunikazi, efaka IPHINIKHODI yayo</translation>
 <translation id="4988526792673242964">Amakhasi</translation>
 <translation id="49896407730300355">Jikisa n&amp;gokuphikisana newashi</translation>
diff --git a/chrome/app/theme/chrome_unscaled_resources.grd b/chrome/app/theme/chrome_unscaled_resources.grd
index 47b9d2dc..f7cb4c7f 100644
--- a/chrome/app/theme/chrome_unscaled_resources.grd
+++ b/chrome/app/theme/chrome_unscaled_resources.grd
@@ -31,7 +31,6 @@
             </else>
           </if>
           <include name="IDR_ASSISTANT_LOGO_MONOCHROME" file="google_chrome/google_assistant.svg" type="BINDATA" />
-          <include name="IDR_CHROME_PASSWORD_MANAGER_LOGO" file="google_chrome/google_password_manager_logo.svg" type="BINDATA" />
           <include name="IDR_PRODUCT_LOGO_24PX_1X" file="google_chrome/chrome_24px_1x.svg" type="BINDATA" />
           <include name="IDR_PRODUCT_LOGO_128PX_SVG" file="google_chrome/chrome_128px.svg" type="BINDATA" />
           <if expr="chromeos_ash">
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 2d50e2c..2b9ade7 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -95,6 +95,7 @@
 buildflag_header("buildflags") {
   header = "buildflags.h"
   flags = [
+    "ENABLE_UPDATE_NOTIFICATIONS=$enable_update_notifications",
     "USE_MINIKIN_HYPHENATION=$use_minikin_hyphenation",
     "USE_THIN_LTO=$use_thin_lto",
   ]
@@ -8041,8 +8042,9 @@
   }
   if (is_chromeos_ash) {
     deps += [
-      "//chrome/browser/resources/chromeos/account_manager:web_components",
-      "//chrome/browser/resources/chromeos/account_manager/components:web_components",
+      "//chrome/browser/resources/chromeos/account_manager:css_wrapper_files",
+      "//chrome/browser/resources/chromeos/account_manager:html_wrapper_files",
+      "//chrome/browser/resources/chromeos/account_manager/components:html_wrapper_files",
       "//chrome/browser/resources/chromeos/add_supervision:web_components",
       "//chrome/browser/resources/chromeos/arc_account_picker:web_components",
       "//chrome/browser/resources/chromeos/crostini_installer:web_components",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index abe2719..ac89d8c 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -586,5 +586,8 @@
   ],
   "dbus_memory_pressure_evaluator_linux(_unittest)?\.(cc|h)" : [
     "+dbus",
+  ],
+  "browsing_data_model_browsertest.cc" : [
+    "+components/services/storage/shared_storage/shared_storage_manager.h",
   ]
 }
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 4a43a82..68711c3 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -9780,6 +9780,12 @@
      FEATURE_VALUE_TYPE(ash::assistant::features::kEnableLibAssistantV2)},
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
+#if !BUILDFLAG(IS_ANDROID)
+    {"passwords-grouping", flag_descriptions::kPasswordsGroupingName,
+     flag_descriptions::kPasswordsGroupingDescription, kOsDesktop,
+     FEATURE_VALUE_TYPE(password_manager::features::kPasswordsGrouping)},
+#endif
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/apps/platform_apps/api/enterprise_remote_apps/enterprise_remote_apps_apitest.cc b/chrome/browser/apps/platform_apps/api/enterprise_remote_apps/enterprise_remote_apps_apitest.cc
index 1d3250f1..70ee69ea 100644
--- a/chrome/browser/apps/platform_apps/api/enterprise_remote_apps/enterprise_remote_apps_apitest.cc
+++ b/chrome/browser/apps/platform_apps/api/enterprise_remote_apps/enterprise_remote_apps_apitest.cc
@@ -133,7 +133,7 @@
   }
 
   void LoadExtensionAndRunTest(const std::string& test_name) {
-    config_.SetKey("customArg", base::Value(test_name));
+    config_.Set("customArg", base::Value(test_name));
     extensions::TestGetConfigFunction::set_test_config_state(&config_);
 
     std::unique_ptr<ash::FakeIdGenerator> id_generator =
@@ -185,7 +185,7 @@
 
  private:
   Profile* profile_;
-  base::DictionaryValue config_;
+  base::Value::Dict config_;
   ash::EmbeddedPolicyTestServerMixin policy_test_server_mixin_{&mixin_host_};
 };
 
diff --git a/chrome/browser/ash/accessibility/select_to_speak_browsertest.cc b/chrome/browser/ash/accessibility/select_to_speak_browsertest.cc
index 7102bf8..5819eb2 100644
--- a/chrome/browser/ash/accessibility/select_to_speak_browsertest.cc
+++ b/chrome/browser/ash/accessibility/select_to_speak_browsertest.cc
@@ -129,8 +129,7 @@
 
   void LoadURLAndSelectToSpeak(std::string url) {
     content::AccessibilityNotificationWaiter waiter(
-        GetWebContents(), ui::kAXModeComplete,
-        ax::mojom::Event::kLayoutComplete);
+        GetWebContents(), ui::kAXModeComplete, ax::mojom::Event::kLoadComplete);
     ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), GURL(url)));
     std::ignore = waiter.WaitForNotification();
 
diff --git a/chrome/browser/ash/arc/session/arc_session_manager.cc b/chrome/browser/ash/arc/session/arc_session_manager.cc
index 551e416d..6d15b67 100644
--- a/chrome/browser/ash/arc/session/arc_session_manager.cc
+++ b/chrome/browser/ash/arc/session/arc_session_manager.cc
@@ -770,6 +770,8 @@
       multi_user_util::GetAccountIdFromProfile(profile_));
   data_remover_ = std::make_unique<ArcDataRemover>(prefs, cryptohome_id);
 
+  arc_session_runner_->set_use_virtio_blk_data(ShouldUseVirtioBlkData(prefs));
+
   // Chrome may be shut down before completing ARC data removal.
   // For such a case, start removing the data now, if necessary.
   MaybeStartArcDataRemoval();
diff --git a/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc b/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
index 258e1040..a43c0a10 100644
--- a/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
+++ b/chrome/browser/ash/extensions/autotest_private/autotest_private_apitest.cc
@@ -573,8 +573,9 @@
                          AutotestPrivateSearchTest,
                          /* tablet_mode= */ ::testing::Bool());
 
+// TODO(https://crbug.com/1385365): This test is extremely flaky.
 IN_PROC_BROWSER_TEST_P(AutotestPrivateSearchTest,
-                       LauncherSearchBoxStateAPITest) {
+                       DISABLED_LauncherSearchBoxStateAPITest) {
   ash::ShellTestApi().SetTabletModeEnabledForTest(GetParam());
   test::GetAppListClient()->ShowAppList();
   if (!GetParam()) {
diff --git a/chrome/browser/ash/extensions/users_private/users_private_apitest.cc b/chrome/browser/ash/extensions/users_private/users_private_apitest.cc
index 11fa3f4b..b03804d 100644
--- a/chrome/browser/ash/extensions/users_private/users_private_apitest.cc
+++ b/chrome/browser/ash/extensions/users_private/users_private_apitest.cc
@@ -188,13 +188,14 @@
     extensions::TestGetConfigFunction::set_test_config_state(nullptr);
   }
   void SetConfig(bool logged_in, bool screen_locked) {
-    test_config_.SetPath({"loginStatus", "isLoggedIn"}, base::Value(logged_in));
-    test_config_.SetPath({"loginStatus", "isScreenLocked"},
-                         base::Value(screen_locked));
+    test_config_.SetByDottedPath("loginStatus.isLoggedIn",
+                                 base::Value(logged_in));
+    test_config_.SetByDottedPath("loginStatus.isScreenLocked",
+                                 base::Value(screen_locked));
   }
 
  private:
-  base::DictionaryValue test_config_;
+  base::Value::Dict test_config_;
 };
 
 class UsersPrivateApiLoginStatusTest : public ExtensionApiTest {
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.cc
index 613d459..a9ed5db 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.cc
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.cc
@@ -4,229 +4,16 @@
 
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.h"
 
-#include <stdint.h>
-
 #include <memory>
-#include <string>
 
 #include "base/base64url.h"
 #include "base/bind.h"
 #include "base/logging.h"
-#include "base/strings/string_util.h"
-#include "chrome/browser/ash/login/easy_unlock/easy_unlock_key_manager.h"
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_types.h"
 #include "chromeos/ash/components/cryptohome/common_types.h"
-#include "chromeos/ash/components/cryptohome/cryptohome_util.h"
-#include "chromeos/ash/components/cryptohome/system_salt_getter.h"
-#include "chromeos/ash/components/cryptohome/userdataauth_util.h"
-#include "chromeos/ash/components/dbus/easy_unlock/easy_unlock_client.h"
-#include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
-#include "chromeos/ash/components/login/auth/public/key.h"
-#include "chromeos/ash/components/multidevice/logging/logging.h"
-#include "crypto/encryptor.h"
-#include "crypto/random.h"
-#include "crypto/symmetric_key.h"
-#include "google_apis/gaia/gaia_auth_util.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
 
 namespace ash {
 
-namespace {
-
-using ::cryptohome::KeyLabel;
-
-const int kUserKeyByteSize = 16;
-const int kSessionKeyByteSize = 16;
-
-const int kEasyUnlockKeyRevision = 1;
-const int kEasyUnlockKeyPrivileges =
-    cryptohome::PRIV_ADD | cryptohome::PRIV_REMOVE;
-
-}  // namespace
-
-/////////////////////////////////////////////////////////////////////////////
-// EasyUnlockCreateKeysOperation::ChallengeCreator
-
-class EasyUnlockCreateKeysOperation::ChallengeCreator {
- public:
-  using ChallengeCreatedCallback = base::OnceCallback<void(bool success)>;
-  ChallengeCreator(const std::string& user_key,
-                   const std::string& session_key,
-                   const std::string& tpm_pub_key,
-                   EasyUnlockDeviceKeyData* device,
-                   ChallengeCreatedCallback callback);
-
-  ChallengeCreator(const ChallengeCreator&) = delete;
-  ChallengeCreator& operator=(const ChallengeCreator&) = delete;
-
-  ~ChallengeCreator();
-
-  void Start();
-
-  const std::string& user_key() const { return user_key_; }
-
- private:
-  void OnEcKeyPairGenerated(const std::string& ec_public_key,
-                            const std::string& ec_private_key);
-  void OnEskGenerated(const std::string& esk);
-  void OnTPMPublicKeyWrapped(const std::string& wrapped_key);
-
-  void WrapTPMPublicKey();
-  void GeneratePayload();
-  void OnPayloadMessageGenerated(const std::string& payload_message);
-  void OnPayloadGenerated(const std::string& payload);
-
-  void OnChallengeGenerated(const std::string& challenge);
-
-  const std::string user_key_;
-  const std::string session_key_;
-  const std::string tpm_pub_key_;
-  std::string wrapped_tpm_pub_key_;
-  EasyUnlockDeviceKeyData* device_;
-  ChallengeCreatedCallback callback_;
-
-  std::string ec_public_key_;
-  std::string esk_;
-
-  EasyUnlockClient* easy_unlock_client_;
-
-  base::WeakPtrFactory<ChallengeCreator> weak_ptr_factory_{this};
-};
-
-EasyUnlockCreateKeysOperation::ChallengeCreator::ChallengeCreator(
-    const std::string& user_key,
-    const std::string& session_key,
-    const std::string& tpm_pub_key,
-    EasyUnlockDeviceKeyData* device,
-    ChallengeCreatedCallback callback)
-    : user_key_(user_key),
-      session_key_(session_key),
-      tpm_pub_key_(tpm_pub_key),
-      device_(device),
-      callback_(std::move(callback)),
-      easy_unlock_client_(EasyUnlockClient::Get()) {}
-
-EasyUnlockCreateKeysOperation::ChallengeCreator::~ChallengeCreator() {}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::Start() {
-  easy_unlock_client_->GenerateEcP256KeyPair(base::BindOnce(
-      &ChallengeCreator::OnEcKeyPairGenerated, weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::OnEcKeyPairGenerated(
-    const std::string& ec_private_key,
-    const std::string& ec_public_key) {
-  if (ec_private_key.empty() || ec_public_key.empty()) {
-    PA_LOG(ERROR) << "Easy unlock failed to generate ec key pair.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  std::string device_pub_key;
-  if (!base::Base64UrlDecode(device_->public_key,
-                             base::Base64UrlDecodePolicy::REQUIRE_PADDING,
-                             &device_pub_key)) {
-    PA_LOG(ERROR) << "Easy unlock failed to decode device public key.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  ec_public_key_ = ec_public_key;
-  easy_unlock_client_->PerformECDHKeyAgreement(
-      ec_private_key, device_pub_key,
-      base::BindOnce(&ChallengeCreator::OnEskGenerated,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::OnEskGenerated(
-    const std::string& esk) {
-  if (esk.empty()) {
-    PA_LOG(ERROR) << "Easy unlock failed to generate challenge esk.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  esk_ = esk;
-  WrapTPMPublicKey();
-}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::WrapTPMPublicKey() {
-  easy_unlock_client_->WrapPublicKey(
-      easy_unlock::kKeyAlgorithmRSA, tpm_pub_key_,
-      base::BindOnce(&ChallengeCreator::OnTPMPublicKeyWrapped,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::OnTPMPublicKeyWrapped(
-    const std::string& wrapped_key) {
-  if (wrapped_key.empty()) {
-    PA_LOG(ERROR) << "Unable to wrap RSA key";
-    std::move(callback_).Run(false);
-    return;
-  }
-  wrapped_tpm_pub_key_ = wrapped_key;
-  GeneratePayload();
-}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::GeneratePayload() {
-  // Work around to get HeaderAndBody bytes to use as challenge payload.
-  EasyUnlockClient::CreateSecureMessageOptions options;
-  options.key = esk_;
-  options.verification_key_id = wrapped_tpm_pub_key_;
-  options.encryption_type = easy_unlock::kEncryptionTypeAES256CBC;
-  options.signature_type = easy_unlock::kSignatureTypeHMACSHA256;
-
-  easy_unlock_client_->CreateSecureMessage(
-      session_key_, options,
-      base::BindOnce(&ChallengeCreator::OnPayloadMessageGenerated,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::OnPayloadMessageGenerated(
-    const std::string& payload_message) {
-  EasyUnlockClient::UnwrapSecureMessageOptions options;
-  options.key = esk_;
-  options.encryption_type = easy_unlock::kEncryptionTypeAES256CBC;
-  options.signature_type = easy_unlock::kSignatureTypeHMACSHA256;
-
-  easy_unlock_client_->UnwrapSecureMessage(
-      payload_message, options,
-      base::BindOnce(&ChallengeCreator::OnPayloadGenerated,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::OnPayloadGenerated(
-    const std::string& payload) {
-  if (payload.empty()) {
-    PA_LOG(ERROR) << "Easy unlock failed to generate challenge payload.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  EasyUnlockClient::CreateSecureMessageOptions options;
-  options.key = esk_;
-  options.decryption_key_id = ec_public_key_;
-  options.encryption_type = easy_unlock::kEncryptionTypeAES256CBC;
-  options.signature_type = easy_unlock::kSignatureTypeHMACSHA256;
-
-  easy_unlock_client_->CreateSecureMessage(
-      payload, options,
-      base::BindOnce(&ChallengeCreator::OnChallengeGenerated,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockCreateKeysOperation::ChallengeCreator::OnChallengeGenerated(
-    const std::string& challenge) {
-  if (challenge.empty()) {
-    PA_LOG(ERROR) << "Easy unlock failed to generate challenge.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  device_->challenge = challenge;
-  std::move(callback_).Run(true);
-}
-
 /////////////////////////////////////////////////////////////////////////////
 // EasyUnlockCreateKeysOperation
 
@@ -235,11 +22,7 @@
     const std::string& tpm_public_key,
     const EasyUnlockDeviceKeyDataList& devices,
     CreateKeysCallback callback)
-    : user_context_(user_context),
-      tpm_public_key_(tpm_public_key),
-      devices_(devices),
-      callback_(std::move(callback)),
-      key_creation_index_(0) {
+    : user_context_(user_context), callback_(std::move(callback)) {
   // Must have the secret and callback.
   DCHECK(!user_context_.GetKey()->GetSecret().empty());
   DCHECK(!callback_.is_null());
@@ -248,144 +31,7 @@
 EasyUnlockCreateKeysOperation::~EasyUnlockCreateKeysOperation() {}
 
 void EasyUnlockCreateKeysOperation::Start() {
-  key_creation_index_ = 0;
-  CreateKeyForDeviceAtIndex(key_creation_index_);
-}
-
-void EasyUnlockCreateKeysOperation::CreateKeyForDeviceAtIndex(size_t index) {
-  DCHECK_GE(index, 0u);
-  if (index == devices_.size()) {
-    std::move(callback_).Run(true);
-    return;
-  }
-
-  std::string user_key;
-  crypto::RandBytes(base::WriteInto(&user_key, kUserKeyByteSize + 1),
-                    kUserKeyByteSize);
-
-  std::unique_ptr<crypto::SymmetricKey> session_key(
-      crypto::SymmetricKey::GenerateRandomKey(crypto::SymmetricKey::AES,
-                                              kSessionKeyByteSize * 8));
-
-  std::string iv(kSessionKeyByteSize, ' ');
-  crypto::Encryptor encryptor;
-  if (!encryptor.Init(session_key.get(), crypto::Encryptor::CBC, iv)) {
-    PA_LOG(ERROR) << "Easy unlock failed to init encryptor for key creation.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  EasyUnlockDeviceKeyData* device = &devices_[index];
-  if (!encryptor.Encrypt(user_key, &device->wrapped_secret)) {
-    PA_LOG(ERROR) << "Easy unlock failed to encrypt user key for key creation.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  challenge_creator_ = std::make_unique<ChallengeCreator>(
-      user_key, session_key->key(), tpm_public_key_, device,
-      base::BindOnce(&EasyUnlockCreateKeysOperation::OnChallengeCreated,
-                     weak_ptr_factory_.GetWeakPtr(), index));
-  challenge_creator_->Start();
-}
-
-void EasyUnlockCreateKeysOperation::OnChallengeCreated(size_t index,
-                                                       bool success) {
-  DCHECK_EQ(key_creation_index_, index);
-
-  if (!success) {
-    PA_LOG(ERROR) << "Easy unlock failed to create challenge for key creation.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  SystemSaltGetter::Get()->GetSystemSalt(
-      base::BindOnce(&EasyUnlockCreateKeysOperation::OnGetSystemSalt,
-                     weak_ptr_factory_.GetWeakPtr(), index));
-}
-
-void EasyUnlockCreateKeysOperation::OnGetSystemSalt(
-    size_t index,
-    const std::string& system_salt) {
-  DCHECK_EQ(key_creation_index_, index);
-  if (system_salt.empty()) {
-    PA_LOG(ERROR) << "Easy unlock failed to get system salt for key creation.";
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  Key user_key(challenge_creator_->user_key());
-  user_key.Transform(Key::KEY_TYPE_SALTED_SHA256_TOP_HALF, system_salt);
-
-  EasyUnlockDeviceKeyData* device = &devices_[index];
-  auto key_def = cryptohome::KeyDefinition::CreateForPassword(
-      user_key.GetSecret(), KeyLabel(EasyUnlockKeyManager::GetKeyLabel(index)),
-      kEasyUnlockKeyPrivileges);
-  key_def.revision = kEasyUnlockKeyRevision;
-  key_def.provider_data.push_back(cryptohome::KeyDefinition::ProviderData(
-      kEasyUnlockKeyMetaNameBluetoothAddress, device->bluetooth_address));
-  key_def.provider_data.push_back(cryptohome::KeyDefinition::ProviderData(
-      kEasyUnlockKeyMetaNamePsk, device->psk));
-  key_def.provider_data.push_back(cryptohome::KeyDefinition::ProviderData(
-      kEasyUnlockKeyMetaNamePubKey, device->public_key));
-  key_def.provider_data.push_back(cryptohome::KeyDefinition::ProviderData(
-      kEasyUnlockKeyMetaNameChallenge, device->challenge));
-  key_def.provider_data.push_back(cryptohome::KeyDefinition::ProviderData(
-      kEasyUnlockKeyMetaNameWrappedSecret, device->wrapped_secret));
-  key_def.provider_data.push_back(cryptohome::KeyDefinition::ProviderData(
-      kEasyUnlockKeyMetaNameSerializedBeaconSeeds,
-      device->serialized_beacon_seeds));
-  // ProviderData only has std::string and int64_t fields for persistence -- use
-  // the int64_t field to store this boolean. The boolean is stored as either a
-  // 1 or 0 in as an int64_t.
-  key_def.provider_data.push_back(cryptohome::KeyDefinition::ProviderData(
-      kEasyUnlockKeyMetaNameUnlockKey,
-      static_cast<int64_t>(device->unlock_key)));
-
-  std::unique_ptr<Key> auth_key(new Key(*user_context_.GetKey()));
-  if (auth_key->GetKeyType() == Key::KEY_TYPE_PASSWORD_PLAIN)
-    auth_key->Transform(Key::KEY_TYPE_SALTED_SHA256_TOP_HALF, system_salt);
-
-  ::user_data_auth::AddKeyRequest request;
-  cryptohome::KeyDefinitionToKey(key_def, request.mutable_key());
-  request.set_clobber_if_exists(true);
-
-  // Create the authorization request with an empty label, in order to act as a
-  // wildcard. See https://crbug.com/1002336 for more.
-  *request.mutable_authorization_request() =
-      cryptohome::CreateAuthorizationRequest(KeyLabel(), auth_key->GetSecret());
-  *request.mutable_account_id() = CreateAccountIdentifierFromIdentification(
-      cryptohome::Identification(user_context_.GetAccountId()));
-  UserDataAuthClient::Get()->AddKey(
-      request, base::BindOnce(&EasyUnlockCreateKeysOperation::OnKeyCreated,
-                              weak_ptr_factory_.GetWeakPtr(), index, user_key));
-}
-
-void EasyUnlockCreateKeysOperation::OnKeyCreated(
-    size_t index,
-    const Key& user_key,
-    absl::optional<::user_data_auth::AddKeyReply> reply) {
-  DCHECK_EQ(key_creation_index_, index);
-  cryptohome::MountError return_code = cryptohome::MOUNT_ERROR_FATAL;
-  if (reply.has_value())
-    return_code = user_data_auth::CryptohomeErrorToMountError(reply->error());
-
-  if (return_code != cryptohome::MOUNT_ERROR_NONE) {
-    PA_LOG(ERROR) << "Easy unlock failed to create key, code=" << return_code;
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  // If the key associated with the current context changed (i.e. in the case
-  // the current signin flow was Easy signin), update the user context.
-  if (user_context_.GetAuthFlow() == UserContext::AUTH_FLOW_EASY_UNLOCK &&
-      user_context_.GetKey()->GetLabel() ==
-          EasyUnlockKeyManager::GetKeyLabel(key_creation_index_)) {
-    user_context_.SetKey(user_key);
-  }
-
-  ++key_creation_index_;
-  CreateKeyForDeviceAtIndex(key_creation_index_);
+  std::move(callback_).Run(false);
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.h b/chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.h
index 2b69836..9722dca 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.h
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.h
@@ -13,14 +13,15 @@
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_types.h"
-#include "chromeos/ash/components/dbus/cryptohome/UserDataAuth.pb.h"
 #include "chromeos/ash/components/login/auth/public/user_context.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
 namespace ash {
 
-// A class to create Easy unlock cryptohome keys for the given user and devices.
+// TODO(b/227674947) : Remove this class as a part of cleanup;
+//  A class to create Easy unlock cryptohome keys for the given user and
+//  devices.
 class EasyUnlockCreateKeysOperation {
  public:
   using CreateKeysCallback = base::OnceCallback<void(bool success)>;
@@ -42,26 +43,8 @@
   const UserContext& user_context() const { return user_context_; }
 
  private:
-  class ChallengeCreator;
-
-  void CreateKeyForDeviceAtIndex(size_t index);
-  void OnChallengeCreated(size_t index, bool success);
-  void OnGetSystemSalt(size_t index, const std::string& system_salt);
-  void OnKeyCreated(size_t index,
-                    const Key& user_key,
-                    absl::optional<::user_data_auth::AddKeyReply> reply);
-
   UserContext user_context_;
-  std::string tpm_public_key_;
-  EasyUnlockDeviceKeyDataList devices_;
   CreateKeysCallback callback_;
-
-  // Index of the key to be created.
-  size_t key_creation_index_;
-
-  std::unique_ptr<ChallengeCreator> challenge_creator_;
-
-  base::WeakPtrFactory<EasyUnlockCreateKeysOperation> weak_ptr_factory_{this};
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.cc
index 8aa8836..e330be5f 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.cc
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.cc
@@ -4,158 +4,22 @@
 
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.h"
 
-#include <stdint.h>
-
 #include <vector>
 
-#include "base/bind.h"
 #include "base/logging.h"
-#include "chrome/browser/ash/login/easy_unlock/easy_unlock_key_manager.h"
-#include "chromeos/ash/components/cryptohome/userdataauth_util.h"
-#include "chromeos/ash/components/dbus/dbus_thread_manager.h"
-#include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
-#include "chromeos/ash/components/multidevice/logging/logging.h"
-#include "components/account_id/account_id.h"
-#include "google_apis/gaia/gaia_auth_util.h"
 
 namespace ash {
 
 EasyUnlockGetKeysOperation::EasyUnlockGetKeysOperation(
     const UserContext& user_context,
     GetKeysCallback callback)
-    : user_context_(user_context),
-      callback_(std::move(callback)),
-      key_index_(0) {}
+    : callback_(std::move(callback)) {}
 
 EasyUnlockGetKeysOperation::~EasyUnlockGetKeysOperation() {}
 
 void EasyUnlockGetKeysOperation::Start() {
-  // Register for asynchronous notification of cryptohome being ready.
-  UserDataAuthClient::Get()->WaitForServiceToBeAvailable(
-      base::BindOnce(&EasyUnlockGetKeysOperation::OnCryptohomeAvailable,
-                     weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockGetKeysOperation::OnCryptohomeAvailable(bool available) {
-  if (!available) {
-    PA_LOG(ERROR) << "Failed to wait for cryptohome to become available";
-    std::move(callback_).Run(false, EasyUnlockDeviceKeyDataList());
-    return;
-  }
-
-  // Start the asynchronous key fetch.
-  // TODO(xiyuan): Use ListKeyEx.
-  key_index_ = 0;
-  GetKeyData();
-}
-
-void EasyUnlockGetKeysOperation::GetKeyData() {
-  user_data_auth::GetKeyDataRequest request;
-  *request.mutable_account_id() =
-      cryptohome::CreateAccountIdentifierFromAccountId(
-          user_context_.GetAccountId());
-  request.mutable_authorization_request();
-  request.mutable_key()->mutable_data()->set_label(
-      EasyUnlockKeyManager::GetKeyLabel(key_index_));
-
-  UserDataAuthClient::Get()->GetKeyData(
-      request, base::BindOnce(&EasyUnlockGetKeysOperation::OnGetKeyData,
-                              weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockGetKeysOperation::OnGetKeyData(
-    absl::optional<user_data_auth::GetKeyDataReply> reply) {
-  cryptohome::MountError return_code = user_data_auth::ReplyToMountError(reply);
-
-  std::vector<cryptohome::KeyDefinition> key_definitions;
-  if (return_code == cryptohome::MOUNT_ERROR_NONE) {
-    key_definitions =
-        user_data_auth::GetKeyDataReplyToKeyDefinitions(reply);
-  }
-  
-  if (key_definitions.empty()) {
-    // MOUNT_ERROR_KEY_FAILURE is considered as success.
-    // Other error codes are treated as failures.
-    if (return_code == cryptohome::MOUNT_ERROR_NONE ||
-        return_code == cryptohome::MOUNT_ERROR_KEY_FAILURE) {
-      // Prior to the introduction of the `unlock_key` field, only one
-      // EasyUnlockDeviceKeyData was peristed, and implicitly assumed to be the
-      // unlock key. Now, multiple EasyUnlockDeviceKeyData objects are
-      // persisted, and this deserializing logic cannot assume that a given
-      // object is the unlock key. To handle the case of migrating from the old
-      // paradigm of a single persisted EasyUnlockDeviceKeyData, the
-      // `unlock_key` field is defaulted to true if only a single device entry
-      // exists, in order to correctly mark that old entry as the unlock key.
-      if (devices_.size() == 1)
-        devices_[0].unlock_key = true;
-
-      std::move(callback_).Run(true, devices_);
-      return;
-    }
-
-    PA_LOG(ERROR) << "Easy unlock failed to get key data, code=" << return_code;
-    std::move(callback_).Run(false, EasyUnlockDeviceKeyDataList());
-    return;
-  }
-
-  DCHECK_EQ(1u, key_definitions.size());
-
-  const std::vector<cryptohome::KeyDefinition::ProviderData>& provider_data =
-      key_definitions.front().provider_data;
-
-  EasyUnlockDeviceKeyData device;
-  for (size_t i = 0; i < provider_data.size(); ++i) {
-    const cryptohome::KeyDefinition::ProviderData& entry = provider_data[i];
-    if (entry.name == kEasyUnlockKeyMetaNameBluetoothAddress) {
-      if (entry.bytes)
-        device.bluetooth_address = *entry.bytes;
-      else
-        NOTREACHED();
-    } else if (entry.name == kEasyUnlockKeyMetaNamePubKey) {
-      if (entry.bytes)
-        device.public_key = *entry.bytes;
-      else
-        NOTREACHED();
-    } else if (entry.name == kEasyUnlockKeyMetaNamePsk) {
-      if (entry.bytes)
-        device.psk = *entry.bytes;
-      else
-        NOTREACHED();
-    } else if (entry.name == kEasyUnlockKeyMetaNameChallenge) {
-      if (entry.bytes)
-        device.challenge = *entry.bytes;
-      else
-        NOTREACHED();
-    } else if (entry.name == kEasyUnlockKeyMetaNameWrappedSecret) {
-      if (entry.bytes)
-        device.wrapped_secret = *entry.bytes;
-      else
-        NOTREACHED();
-    } else if (entry.name == kEasyUnlockKeyMetaNameSerializedBeaconSeeds) {
-      if (entry.bytes)
-        device.serialized_beacon_seeds = *entry.bytes;
-      else
-        NOTREACHED();
-    } else if (entry.name == kEasyUnlockKeyMetaNameUnlockKey) {
-      // ProviderData only has the std::string `bytes` and int64_t `number`
-      // fields for persistence -- the number field is used to store this
-      // boolean. The boolean was stored as either a 1 or 0 in as an int64_t.
-      // Cast it back to bool here.
-      if (entry.number) {
-        DCHECK(*entry.number == 0 || *entry.number == 1);
-        device.unlock_key = static_cast<bool>(*entry.number);
-      } else {
-        NOTREACHED();
-      }
-    } else {
-      PA_LOG(WARNING) << "Unknown EasyUnlock key data entry, name="
-                      << entry.name;
-    }
-  }
-  devices_.push_back(device);
-
-  ++key_index_;
-  GetKeyData();
+  EasyUnlockDeviceKeyDataList list;
+  std::move(callback_).Run(true, list);
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.h b/chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.h
index 212f67bf..8edcae5c 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.h
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_get_keys_operation.h
@@ -10,7 +10,6 @@
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/ash/login/easy_unlock/easy_unlock_types.h"
-#include "chromeos/ash/components/dbus/cryptohome/UserDataAuth.pb.h"
 #include "chromeos/ash/components/dbus/cryptohome/rpc.pb.h"
 #include "chromeos/ash/components/login/auth/public/user_context.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -18,6 +17,7 @@
 
 namespace ash {
 
+// TODO(b/227674947) : Remove this class as a part of cleanup;
 class EasyUnlockGetKeysOperation {
  public:
   using GetKeysCallback =
@@ -37,23 +37,9 @@
   void Start();
 
  private:
-  // Called once when the cryptohome service is available.
-  void OnCryptohomeAvailable(bool available);
-
-  // Asynchronously requests data for `key_index_` from cryptohome.
-  void GetKeyData();
-
-  // Callback for GetKeyData(). Updates `devices_`, increments `key_index_`, and
-  // calls GetKeyData() again.
-  void OnGetKeyData(absl::optional<user_data_auth::GetKeyDataReply> reply);
-
-  UserContext user_context_;
   GetKeysCallback callback_;
 
-  size_t key_index_;
   EasyUnlockDeviceKeyDataList devices_;
-
-  base::WeakPtrFactory<EasyUnlockGetKeysOperation> weak_ptr_factory_{this};
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_refresh_keys_operation.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_refresh_keys_operation.cc
index 462f3ed..f4c9155 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_refresh_keys_operation.cc
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_refresh_keys_operation.cc
@@ -6,10 +6,6 @@
 
 #include <memory>
 
-#include "base/bind.h"
-#include "chrome/browser/ash/login/easy_unlock/easy_unlock_create_keys_operation.h"
-#include "chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.h"
-
 namespace ash {
 
 EasyUnlockRefreshKeysOperation::EasyUnlockRefreshKeysOperation(
@@ -17,55 +13,12 @@
     const std::string& tpm_public_key,
     const EasyUnlockDeviceKeyDataList& devices,
     RefreshKeysCallback callback)
-    : user_context_(user_context),
-      tpm_public_key_(tpm_public_key),
-      devices_(devices),
-      callback_(std::move(callback)) {}
+    : callback_(std::move(callback)) {}
 
 EasyUnlockRefreshKeysOperation::~EasyUnlockRefreshKeysOperation() {}
 
 void EasyUnlockRefreshKeysOperation::Start() {
-  if (devices_.empty()) {
-    // Delete all keys from cryptohome so they can not be exploited.
-    RemoveKeysStartingFromIndex(0);
-    return;
-  }
-
-  create_keys_operation_ = std::make_unique<EasyUnlockCreateKeysOperation>(
-      user_context_, tpm_public_key_, devices_,
-      base::BindOnce(&EasyUnlockRefreshKeysOperation::OnKeysCreated,
-                     weak_ptr_factory_.GetWeakPtr()));
-  create_keys_operation_->Start();
-}
-
-void EasyUnlockRefreshKeysOperation::OnKeysCreated(bool success) {
-  if (!success) {
-    std::move(callback_).Run(false);
-    return;
-  }
-
-  // Update the user context to have the new authorization key after the create
-  // keys operation. This is necessary because the old authorization key
-  // associated with the user context will be invalidated after the create keys
-  // operation.
-  if (create_keys_operation_)
-    user_context_ = create_keys_operation_->user_context();
-
-  // Remove all keys that weren't overwritten by the create operation.
-  RemoveKeysStartingFromIndex(devices_.size());
-}
-
-void EasyUnlockRefreshKeysOperation::RemoveKeysStartingFromIndex(
-    size_t key_index) {
-  remove_keys_operation_ = std::make_unique<EasyUnlockRemoveKeysOperation>(
-      user_context_, key_index,
-      base::BindOnce(&EasyUnlockRefreshKeysOperation::OnKeysRemoved,
-                     weak_ptr_factory_.GetWeakPtr()));
-  remove_keys_operation_->Start();
-}
-
-void EasyUnlockRefreshKeysOperation::OnKeysRemoved(bool success) {
-  std::move(callback_).Run(success);
+  std::move(callback_).Run(false);
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_refresh_keys_operation.h b/chrome/browser/ash/login/easy_unlock/easy_unlock_refresh_keys_operation.h
index 9c193097..b25a554 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_refresh_keys_operation.h
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_refresh_keys_operation.h
@@ -13,12 +13,11 @@
 #include "chromeos/ash/components/login/auth/public/user_context.h"
 
 namespace ash {
-class EasyUnlockCreateKeysOperation;
-class EasyUnlockRemoveKeysOperation;
 
-// The refresh keys operation replaces the existing keys in cryptohome with a
-// new list of keys. This operation is a simple sequence of the create and
-// remove keys operations.
+// TODO(b/227674947) : Remove this class as a part of cleanup;
+//  The refresh keys operation replaces the existing keys in cryptohome with a
+//  new list of keys. This operation is a simple sequence of the create and
+//  remove keys operations.
 class EasyUnlockRefreshKeysOperation {
  public:
   using RefreshKeysCallback = base::OnceCallback<void(bool success)>;
@@ -37,19 +36,7 @@
   void Start();
 
  private:
-  void OnKeysCreated(bool success);
-  void RemoveKeysStartingFromIndex(size_t key_index);
-  void OnKeysRemoved(bool success);
-
-  UserContext user_context_;
-  std::string tpm_public_key_;
-  EasyUnlockDeviceKeyDataList devices_;
   RefreshKeysCallback callback_;
-
-  std::unique_ptr<EasyUnlockCreateKeysOperation> create_keys_operation_;
-  std::unique_ptr<EasyUnlockRemoveKeysOperation> remove_keys_operation_;
-
-  base::WeakPtrFactory<EasyUnlockRefreshKeysOperation> weak_ptr_factory_{this};
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.cc
index 0df8055..4ae252c 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.cc
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.cc
@@ -6,88 +6,21 @@
 
 #include "base/bind.h"
 #include "base/logging.h"
-#include "chrome/browser/ash/login/easy_unlock/easy_unlock_key_manager.h"
 #include "chromeos/ash/components/cryptohome/common_types.h"
-#include "chromeos/ash/components/cryptohome/cryptohome_util.h"
-#include "chromeos/ash/components/cryptohome/system_salt_getter.h"
-#include "chromeos/ash/components/cryptohome/userdataauth_util.h"
-#include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
 #include "google_apis/gaia/gaia_auth_util.h"
 
 namespace ash {
 
-using ::cryptohome::KeyLabel;
-
 EasyUnlockRemoveKeysOperation::EasyUnlockRemoveKeysOperation(
     const UserContext& user_context,
     size_t start_index,
     RemoveKeysCallback callback)
-    : user_context_(user_context),
-      callback_(std::move(callback)),
-      key_index_(start_index) {
-  // Must have the secret and callback.
-  DCHECK(!user_context_.GetKey()->GetSecret().empty());
-  DCHECK(!callback_.is_null());
-}
+    : callback_(std::move(callback)) {}
 
 EasyUnlockRemoveKeysOperation::~EasyUnlockRemoveKeysOperation() {}
 
 void EasyUnlockRemoveKeysOperation::Start() {
-  if (user_context_.GetKey()->GetKeyType() == Key::KEY_TYPE_PASSWORD_PLAIN) {
-    SystemSaltGetter::Get()->GetSystemSalt(
-        base::BindOnce(&EasyUnlockRemoveKeysOperation::OnGetSystemSalt,
-                       weak_ptr_factory_.GetWeakPtr()));
-    return;
-  }
-
-  RemoveKey();
-}
-
-void EasyUnlockRemoveKeysOperation::OnGetSystemSalt(
-    const std::string& system_salt) {
-  user_context_.GetKey()->Transform(Key::KEY_TYPE_SALTED_SHA256_TOP_HALF,
-                                    system_salt);
-  RemoveKey();
-}
-
-void EasyUnlockRemoveKeysOperation::RemoveKey() {
-  const Key* const auth_key = user_context_.GetKey();
-  // TODO(crbug.com/558497): Use ListKeyEx and delete by label instead of by
-  // index.
-  ::user_data_auth::RemoveKeyRequest request;
-  request.mutable_key()->mutable_data()->set_label(
-      EasyUnlockKeyManager::GetKeyLabel(key_index_));
-  *request.mutable_account_id() = CreateAccountIdentifierFromIdentification(
-      cryptohome::Identification((user_context_.GetAccountId())));
-  *request.mutable_authorization_request() =
-      cryptohome::CreateAuthorizationRequest(KeyLabel(auth_key->GetLabel()),
-                                             auth_key->GetSecret());
-  UserDataAuthClient::Get()->RemoveKey(
-      request, base::BindOnce(&EasyUnlockRemoveKeysOperation::OnKeyRemoved,
-                              weak_ptr_factory_.GetWeakPtr()));
-}
-
-void EasyUnlockRemoveKeysOperation::OnKeyRemoved(
-    absl::optional<::user_data_auth::RemoveKeyReply> reply) {
-  if (reply.has_value() &&
-      reply->error() ==
-          ::user_data_auth::CryptohomeErrorCode::CRYPTOHOME_ERROR_NOT_SET) {
-    ++key_index_;
-    RemoveKey();
-    return;
-  }
-
-  cryptohome::MountError return_code =
-      user_data_auth::CryptohomeErrorToMountError(reply->error());
-  // MOUNT_ERROR_KEY_FAILURE is considered as success. Other error codes are
-  // treated as failures.
-  if (return_code == cryptohome::MOUNT_ERROR_KEY_FAILURE) {
-    std::move(callback_).Run(true);
-  } else {
-    LOG(ERROR) << "Easy unlock remove keys operation failed, code="
-               << return_code;
-    std::move(callback_).Run(false);
-  }
+  std::move(callback_).Run(false);
 }
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.h b/chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.h
index c6318d96..0dcb812 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.h
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_remove_keys_operation.h
@@ -9,15 +9,15 @@
 
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
-#include "chromeos/ash/components/dbus/cryptohome/UserDataAuth.pb.h"
 #include "chromeos/ash/components/login/auth/public/user_context.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
 namespace ash {
 
-// A class to remove existing Easy unlock cryptohome keys starting at given
-// index.
+// TODO(b/227674947) : Remove this class as a part of cleanup;
+//  A class to remove existing Easy unlock cryptohome keys starting at given
+//  index.
 class EasyUnlockRemoveKeysOperation {
  public:
   using RemoveKeysCallback = base::OnceCallback<void(bool success)>;
@@ -34,15 +34,7 @@
   void Start();
 
  private:
-  void OnGetSystemSalt(const std::string& system_salt);
-
-  void RemoveKey();
-  void OnKeyRemoved(absl::optional<::user_data_auth::RemoveKeyReply> reply);
-
-  UserContext user_context_;
   RemoveKeysCallback callback_;
-  size_t key_index_;
-  base::WeakPtrFactory<EasyUnlockRemoveKeysOperation> weak_ptr_factory_{this};
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.cc b/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.cc
index 84e7f33..d4eecaa 100644
--- a/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.cc
+++ b/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.cc
@@ -19,21 +19,23 @@
   // Retrieve the device's serial number and RLZ brand code.
   chromeos::system::StatisticsProvider* provider =
       chromeos::system::StatisticsProvider::GetInstance();
-  const std::string device_serial_number = provider->GetEnterpriseMachineID();
-  std::string device_rlz_brand_code;
-  const bool device_rlz_brand_code_found = provider->GetMachineStatistic(
-      chromeos::system::kRlzBrandCodeKey, &device_rlz_brand_code);
+  const absl::optional<base::StringPiece> device_serial_number =
+      provider->GetMachineID();
+  const absl::optional<base::StringPiece> device_rlz_brand_code =
+      provider->GetMachineStatistic(chromeos::system::kRlzBrandCodeKey);
 
   // Verify the existence of the device's data.
-  CHECK(!device_serial_number.empty());
-  CHECK(device_rlz_brand_code_found);
-  CHECK(!device_rlz_brand_code.empty());
+  CHECK(device_serial_number);
+  CHECK(!device_serial_number->empty());
+  CHECK(device_rlz_brand_code);
+  CHECK(!device_rlz_brand_code->empty());
 
   // Construct the encrypted PSM RLWE ID.
   psm_rlwe::RlwePlaintextId rlwe_id;
   std::string rlz_brand_code_hex = base::HexEncode(
-      device_rlz_brand_code.data(), device_rlz_brand_code.size());
-  rlwe_id.set_sensitive_id(rlz_brand_code_hex + "/" + device_serial_number);
+      device_rlz_brand_code->data(), device_rlz_brand_code->size());
+  rlwe_id.set_sensitive_id(rlz_brand_code_hex + "/" +
+                           std::string(device_serial_number.value()));
 
   return rlwe_id;
 }
diff --git a/chrome/browser/ash/policy/reporting/install_event_log_util.cc b/chrome/browser/ash/policy/reporting/install_event_log_util.cc
index 90695b8..b3e91a8 100644
--- a/chrome/browser/ash/policy/reporting/install_event_log_util.cc
+++ b/chrome/browser/ash/policy/reporting/install_event_log_util.cc
@@ -98,8 +98,9 @@
 }  // namespace
 
 std::string GetSerialNumber() {
-  return chromeos::system::StatisticsProvider::GetInstance()
-      ->GetEnterpriseMachineID();
+  return std::string(chromeos::system::StatisticsProvider::GetInstance()
+                         ->GetMachineID()
+                         .value_or(""));
 }
 
 base::Value::List ConvertExtensionProtoToValue(
diff --git a/chrome/browser/ash/policy/status_collector/device_status_collector.cc b/chrome/browser/ash/policy/status_collector/device_status_collector.cc
index 39ff553..1722ba400 100644
--- a/chrome/browser/ash/policy/status_collector/device_status_collector.cc
+++ b/chrome/browser/ash/policy/status_collector/device_status_collector.cc
@@ -2284,10 +2284,10 @@
 
 bool DeviceStatusCollector::GetWriteProtectSwitch(
     em::DeviceStatusReportRequest* status) {
-  std::string firmware_write_protect;
-  if (!statistics_provider_->GetMachineStatistic(
-          chromeos::system::kFirmwareWriteProtectCurrentKey,
-          &firmware_write_protect)) {
+  const absl::optional<base::StringPiece> firmware_write_protect =
+      statistics_provider_->GetMachineStatistic(
+          chromeos::system::kFirmwareWriteProtectCurrentKey);
+  if (!firmware_write_protect) {
     return false;
   }
 
diff --git a/chrome/browser/ash/policy/status_collector/status_collector.cc b/chrome/browser/ash/policy/status_collector/status_collector.cc
index e2b74e1..342e4ed 100644
--- a/chrome/browser/ash/policy/status_collector/status_collector.cc
+++ b/chrome/browser/ash/policy/status_collector/status_collector.cc
@@ -84,9 +84,10 @@
 // static
 absl::optional<std::string> StatusCollector::GetBootMode(
     chromeos::system::StatisticsProvider* statistics_provider) {
-  std::string dev_switch_mode;
-  if (!statistics_provider->GetMachineStatistic(
-          chromeos::system::kDevSwitchBootKey, &dev_switch_mode)) {
+  const absl::optional<base::StringPiece> dev_switch_mode =
+      statistics_provider->GetMachineStatistic(
+          chromeos::system::kDevSwitchBootKey);
+  if (!dev_switch_mode) {
     return absl::nullopt;
   }
 
diff --git a/chrome/browser/ash/remote_apps/remote_apps_manager.cc b/chrome/browser/ash/remote_apps/remote_apps_manager.cc
index a02c1dc..ba57220 100644
--- a/chrome/browser/ash/remote_apps/remote_apps_manager.cc
+++ b/chrome/browser/ash/remote_apps/remote_apps_manager.cc
@@ -375,7 +375,7 @@
 }
 
 void RemoteAppsManager::OnAppListItemAdded(ChromeAppListItem* item) {
-  if (item->is_folder() || item->is_page_break())
+  if (item->is_folder())
     return;
 
   // Make a copy of id as item->metadata can be invalidated.
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
index f108d86c..8ebf54b5 100644
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -130,13 +130,16 @@
         <include name="IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_CSS_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\edu_coexistence\edu_coexistence_css.js" use_base_dir="false" type="BINDATA" />
 
         <!-- ChromeOS Account Manager resources -->
-        <include name="IDR_ACCOUNT_MANAGER_COMPONENTS_ERROR_SCREEN_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\account_manager\components\error_screen.js" use_base_dir="false" type ="BINDATA"/>
-        <include name="IDR_ACCOUNT_MANAGER_SHARED_CSS_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\account_manager\account_manager_shared_css.js" use_base_dir="false" type ="BINDATA" />
+        <include name="IDR_ACCOUNT_MANAGER_COMPONENTS_ERROR_SCREEN_JS" file="resources\chromeos\account_manager\components\error_screen.js" type ="BINDATA"/>
+        <include name="IDR_ACCOUNT_MANAGER_COMPONENTS_ERROR_SCREEN_HTML_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\account_manager\components\error_screen.html.js" use_base_dir="false" type ="BINDATA"/>
+        <include name="IDR_ACCOUNT_MANAGER_SHARED_CSS_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\account_manager\account_manager_shared.css.js" use_base_dir="false" type ="BINDATA" />
         <include name="IDR_ACCOUNT_MIGRATION_WELCOME_HTML" file="resources\chromeos\account_manager\account_migration_welcome.html" type="BINDATA" />
-        <include name="IDR_ACCOUNT_MIGRATION_WELCOME_APP_JS"  file="${root_gen_dir}\chrome\browser\resources\chromeos\account_manager\account_migration_welcome_app.js" use_base_dir="false" preprocess="true" type="BINDATA" />
+        <include name="IDR_ACCOUNT_MIGRATION_WELCOME_APP_JS"  file="resources\chromeos\account_manager\account_migration_welcome_app.js" type="BINDATA" />
+        <include name="IDR_ACCOUNT_MIGRATION_WELCOME_APP_HTML_JS"  file="${root_gen_dir}\chrome\browser\resources\chromeos\account_manager\account_migration_welcome_app.html.js" use_base_dir="false" preprocess="true" type="BINDATA" />
         <include name="IDR_ACCOUNT_MANAGER_BROWSER_PROXY_JS" file="resources\chromeos\account_manager\account_manager_browser_proxy.js" type="BINDATA" />
         <include name="IDR_ACCOUNT_MANAGER_ERROR_HTML" file="resources\chromeos\account_manager\account_manager_error.html" allowexternalscript="true" type="BINDATA" preprocess="true"/>
-        <include name="IDR_ACCOUNT_MANAGER_ERROR_APP_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\account_manager\account_manager_error_app.js" use_base_dir="false" preprocess="true" type="BINDATA" />
+        <include name="IDR_ACCOUNT_MANAGER_ERROR_APP_JS" file="resources\chromeos\account_manager\account_manager_error_app.js" type="BINDATA" />
+        <include name="IDR_ACCOUNT_MANAGER_ERROR_APP_HTML_JS" file="${root_gen_dir}\chrome\browser\resources\chromeos\account_manager\account_manager_error_app.html.js" use_base_dir="false" preprocess="true" type="BINDATA" />
         <include name="IDS_ACCOUNT_MANAGER_SIGNIN_BLOCKED_BY_POLICY_SVG" file="resources\chromeos\login\images\error.svg" type="BINDATA" />
         <if expr="_google_chrome">
           <include name="IDR_ACCOUNT_MANAGER_WELCOME_1X_PNG" file="resources\chromeos\account_manager\account_manager_welcome_1x.png" type="BINDATA" />
diff --git a/chrome/browser/browsing_data/browsing_data_model_browsertest.cc b/chrome/browser/browsing_data/browsing_data_model_browsertest.cc
index 3536a2e4..49095d2b 100644
--- a/chrome/browser/browsing_data/browsing_data_model_browsertest.cc
+++ b/chrome/browser/browsing_data/browsing_data_model_browsertest.cc
@@ -4,6 +4,7 @@
 
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/test/test_future.h"
 #include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -13,6 +14,8 @@
 #include "components/browsing_data/content/browsing_data_model_test_util.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
 #include "components/privacy_sandbox/privacy_sandbox_settings.h"
+#include "components/services/storage/public/mojom/storage_usage_info.mojom.h"
+#include "components/services/storage/shared_storage/shared_storage_manager.h"
 #include "content/public/browser/network_service_instance.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/browser_test.h"
@@ -22,6 +25,8 @@
 #include "services/network/test/trust_token_request_handler.h"
 #include "services/network/test/trust_token_test_server_handler_registration.h"
 #include "services/network/test/trust_token_test_util.h"
+#include "third_party/blink/public/common/features.h"
+#include "url/origin.h"
 
 namespace {
 
@@ -30,21 +35,92 @@
 }
 
 using browsing_data_model_test_util::ValidateBrowsingDataEntries;
+using OperationResult = storage::SharedStorageDatabase::OperationResult;
 
-class BrowsingDataModelTrustTokenBrowserTest : public InProcessBrowserTest {
+class BrowsingDataModelBrowserTest : public InProcessBrowserTest {
  public:
-  BrowsingDataModelTrustTokenBrowserTest() {
-    auto& field_trial_param =
-        network::features::kTrustTokenOperationsRequiringOriginTrial;
-    feature_list_.InitWithFeaturesAndParameters(
-        // Enabled Features:
-        {{network::features::kTrustTokens,
-          {{field_trial_param.name,
-            field_trial_param.GetName(
-                network::features::TrustTokenOriginTrialSpec::
-                    kOriginTrialNotRequired)}}}},
-        {});
+  BrowsingDataModelBrowserTest() = default;
+
+  ~BrowsingDataModelBrowserTest() override = default;
+
+  void SetUp() override {
+    SetUpFeatureList();
+    InProcessBrowserTest::SetUp();
   }
+
+  void SetUpOnMainThread() override {
+    PrivacySandboxSettingsFactory::GetForProfile(browser()->profile())
+        ->SetPrivacySandboxEnabled(true);
+  }
+
+  virtual void SetUpFeatureList() {
+    feature_list_.InitAndEnableFeature(blink::features::kSharedStorageAPI);
+  }
+
+  std::unique_ptr<BrowsingDataModel> BuildBrowsingDataModel() {
+    base::test::TestFuture<std::unique_ptr<BrowsingDataModel>>
+        browsing_data_model;
+    BrowsingDataModel::BuildFromDisk(browser()->profile(),
+                                     browsing_data_model.GetCallback());
+    return browsing_data_model.Take();
+  }
+
+  content::StoragePartition* storage_partition() {
+    return browser()->profile()->GetDefaultStoragePartition();
+  }
+
+ protected:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(BrowsingDataModelBrowserTest,
+                       SharedStorageHandledCorrectly) {
+  // Add origin shared storage.
+  auto* shared_storage_manager = storage_partition()->GetSharedStorageManager();
+  ASSERT_NE(nullptr, shared_storage_manager);
+
+  base::test::TestFuture<OperationResult> future;
+  url::Origin testOrigin = url::Origin::Create(GURL("https://a.test"));
+  shared_storage_manager->Set(testOrigin, u"key", u"value",
+                              future.GetCallback());
+  EXPECT_EQ(OperationResult::kSet, future.Get());
+
+  std::unique_ptr<BrowsingDataModel> browsing_data_model =
+      BuildBrowsingDataModel();
+  // Validate shared storage entry saved correctly.
+  base::test::TestFuture<uint64_t> test_entry_storage_size;
+  shared_storage_manager->FetchOrigins(base::BindLambdaForTesting(
+      [&](std::vector<::storage::mojom::StorageUsageInfoPtr>
+              storage_usage_info) {
+        ASSERT_EQ(1U, storage_usage_info.size());
+        test_entry_storage_size.SetValue(
+            storage_usage_info[0]->total_size_bytes);
+      }));
+
+  ValidateBrowsingDataEntries(
+      browsing_data_model.get(),
+      {{kTestHost,
+        blink::StorageKey(testOrigin),
+        {BrowsingDataModel::StorageType::kSharedStorage,
+         test_entry_storage_size.Get(), /*cookie_count=*/0}}});
+
+  // Remove origin.
+  {
+    base::RunLoop run_loop;
+    browsing_data_model.get()->RemoveBrowsingData(kTestHost,
+                                                  run_loop.QuitClosure());
+    run_loop.Run();
+  }
+
+  // Rebuild Browsing Data Model and verify entries are empty.
+  browsing_data_model = BuildBrowsingDataModel();
+  ValidateBrowsingDataEntries(browsing_data_model.get(), {});
+}
+
+class BrowsingDataModelTrustTokenBrowserTest
+    : public BrowsingDataModelBrowserTest {
+ public:
+  BrowsingDataModelTrustTokenBrowserTest() = default;
   ~BrowsingDataModelTrustTokenBrowserTest() override = default;
 
   void SetUpOnMainThread() override {
@@ -62,6 +138,20 @@
     ASSERT_TRUE(https_server_->Start());
   }
 
+  void SetUpFeatureList() override {
+    auto& field_trial_param =
+        network::features::kTrustTokenOperationsRequiringOriginTrial;
+    feature_list_.InitWithFeaturesAndParameters(
+        // Enabled Features:
+        {{network::features::kTrustTokens,
+          {{field_trial_param.name,
+            field_trial_param.GetName(
+                network::features::TrustTokenOriginTrialSpec::
+                    kOriginTrialNotRequired)}}}},
+        // Disabled Features:
+        {});
+  }
+
  protected:
   void ProvideRequestHandlerKeyCommitmentsToNetworkService(
       base::StringPiece host) {
@@ -91,7 +181,6 @@
  private:
   std::unique_ptr<net::EmbeddedTestServer> https_server_;
   network::test::TrustTokenRequestHandler request_handler_;
-  base::test::ScopedFeatureList feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(BrowsingDataModelTrustTokenBrowserTest,
@@ -127,15 +216,8 @@
 
   // Confirm that a BrowsingDataModel built from disk contains the issued token
   // information.
-  std::unique_ptr<BrowsingDataModel> browsing_data_model;
-  base::RunLoop run_loop;
-  BrowsingDataModel::BuildFromDisk(
-      browser()->profile(),
-      base::BindLambdaForTesting([&](std::unique_ptr<BrowsingDataModel> model) {
-        browsing_data_model = std::move(model);
-        run_loop.QuitWhenIdle();
-      }));
-  run_loop.Run();
+  std::unique_ptr<BrowsingDataModel> browsing_data_model =
+      BuildBrowsingDataModel();
 
   ValidateBrowsingDataEntries(
       browsing_data_model.get(),
@@ -144,23 +226,16 @@
         {BrowsingDataModel::StorageType::kTrustTokens, 100, 0}}});
 
   // Remove data for the host, and confirm the model updates appropriately.
-  base::RunLoop run_loop2;
-  browsing_data_model->RemoveBrowsingData(kTestHost,
-                                          run_loop2.QuitWhenIdleClosure());
-  run_loop2.Run();
+  {
+    base::RunLoop run_loop;
+    browsing_data_model->RemoveBrowsingData(kTestHost,
+                                            run_loop.QuitWhenIdleClosure());
+    run_loop.Run();
+  }
 
   ValidateBrowsingDataEntries(browsing_data_model.get(), {});
 
   // Build another model from disk, ensuring the data is no longer present.
-  browsing_data_model.reset();
-  base::RunLoop run_loop3;
-  BrowsingDataModel::BuildFromDisk(
-      browser()->profile(),
-      base::BindLambdaForTesting([&](std::unique_ptr<BrowsingDataModel> model) {
-        browsing_data_model = std::move(model);
-        run_loop3.QuitWhenIdle();
-      }));
-
-  run_loop3.Run();
+  browsing_data_model = BuildBrowsingDataModel();
   ValidateBrowsingDataEntries(browsing_data_model.get(), {});
 }
diff --git a/chrome/browser/buildflags.gni b/chrome/browser/buildflags.gni
index 3e3c261c..653d675 100644
--- a/chrome/browser/buildflags.gni
+++ b/chrome/browser/buildflags.gni
@@ -7,4 +7,8 @@
 declare_args() {
   # By default, only branded builds integrate with automatic updates.
   enable_updater = is_chrome_branded
+
+  # Detect updates and notify the user for Google Chrome across all platforms.
+  # Chromium does not use an auto-updater.
+  enable_update_notifications = is_chrome_branded
 }
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
index 39c725d0..ef01f3b7 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
@@ -171,7 +171,7 @@
   }
 
   void SetTestCustomArg(const std::string custom_arg) {
-    config_.SetKey("customArg", base::Value(custom_arg));
+    config_.Set("customArg", base::Value(custom_arg));
     extensions::TestGetConfigFunction::set_test_config_state(&config_);
   }
 
@@ -195,7 +195,7 @@
  private:
   ash::EmbeddedPolicyTestServerMixin policy_test_server_mixin_{&mixin_host_};
   ExtensionForceInstallMixin extension_force_install_mixin_{&mixin_host_};
-  base::DictionaryValue config_;
+  base::Value::Dict config_;
 };
 
 IN_PROC_BROWSER_TEST_F(LoginApitest, LaunchManagedGuestSession) {
diff --git a/chrome/browser/chromeos/extensions/login_screen/login_screen_i18n_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login_screen_i18n_apitest.cc
index e161297..019e0668 100644
--- a/chrome/browser/chromeos/extensions/login_screen/login_screen_i18n_apitest.cc
+++ b/chrome/browser/chromeos/extensions/login_screen/login_screen_i18n_apitest.cc
@@ -43,7 +43,7 @@
   ~LoginScreenI18nApitest() override = default;
 
   void SetExpectedMessage(const std::string custom_arg) {
-    config_.SetKey("customArg", base::Value(custom_arg));
+    config_.Set("customArg", base::Value(custom_arg));
     extensions::TestGetConfigFunction::set_test_config_state(&config_);
   }
 
@@ -57,7 +57,7 @@
   }
 
  private:
-  base::DictionaryValue config_;
+  base::Value::Dict config_;
 };
 
 IN_PROC_BROWSER_TEST_P(LoginScreenI18nApitest, GetMessage) {
diff --git a/chrome/browser/dips/cookie_access_filter.h b/chrome/browser/dips/cookie_access_filter.h
index d6520221..1b1a98e 100644
--- a/chrome/browser/dips/cookie_access_filter.h
+++ b/chrome/browser/dips/cookie_access_filter.h
@@ -28,8 +28,8 @@
   // `urls`. Otherwise returns false, and `result` is filled entirely with
   // kUnknown. (Note: this depends on the order of previous calls to
   // AddAccess()).
-  [[nodiscard]] bool Filter(const std::vector<GURL>& urls,
-                            std::vector<CookieAccessType>* result) const;
+  bool Filter(const std::vector<GURL>& urls,
+              std::vector<CookieAccessType>* result) const;
 
   // Returns true iff AddAccess() has never been called.
   bool is_empty() const { return accesses_.empty(); }
diff --git a/chrome/browser/dips/dips_bounce_detector.cc b/chrome/browser/dips/dips_bounce_detector.cc
index 0876db7d..318a398e 100644
--- a/chrome/browser/dips/dips_bounce_detector.cc
+++ b/chrome/browser/dips/dips_bounce_detector.cc
@@ -81,13 +81,6 @@
   base::UmaHistogramEnumeration(histogram_name, category);
 }
 
-inline void UmaHistogramCookieAccessFilterResult(bool result,
-                                                 DIPSCookieMode mode) {
-  const std::string histogram_name = base::StrCat(
-      {"Privacy.DIPS.CookieAccessFilterResult", GetHistogramSuffix(mode)});
-  base::UmaHistogramBoolean(histogram_name, result);
-}
-
 inline void UmaHistogramTimeToBounce(base::TimeDelta sample) {
   base::UmaHistogramTimes("Privacy.DIPS.TimeFromNavigationCommitToClientBounce",
                           sample);
@@ -471,10 +464,8 @@
 
   std::vector<DIPSRedirectInfoPtr> redirects;
   std::vector<CookieAccessType> access_types;
-  bool filter_success = server_state->filter.Filter(
-      navigation_handle->GetRedirectChain(), &access_types);
-  UmaHistogramCookieAccessFilterResult(filter_success,
-                                       delegate_->GetCookieMode());
+  server_state->filter.Filter(navigation_handle->GetRedirectChain(),
+                              &access_types);
 
   for (size_t i = 0; i < access_types.size() - 1; i++) {
     redirects.push_back(std::make_unique<DIPSRedirectInfo>(
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
index 805f0288..17953dc 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
@@ -9,6 +9,8 @@
 
 #include "base/bind.h"
 #include "base/files/file_util.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_refptr.h"
 #include "base/scoped_observation.h"
 #include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
@@ -135,7 +137,7 @@
 void AddUserSpecifiedSites(Profile* profile,
                            const std::string& hosts,
                            bool restricted) {
-  scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+  auto function = base::MakeRefCounted<
       api::DeveloperPrivateAddUserSpecifiedSitesFunction>();
   std::string args = base::StringPrintf(
       R"([{"siteSet":"%s","hosts":%s}])",
@@ -147,7 +149,7 @@
 void RemoveUserSpecifiedSites(Profile* profile,
                               const std::string& hosts,
                               bool restricted) {
-  scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+  auto function = base::MakeRefCounted<
       api::DeveloperPrivateRemoveUserSpecifiedSitesFunction>();
   std::string args = base::StringPrintf(
       R"([{"siteSet":"%s","hosts":%s}])",
@@ -171,7 +173,7 @@
                           bool should_succeed,
                           const char* expected_error) {
   SCOPED_TRACE(host);
-  scoped_refptr<ExtensionFunction> function =
+  auto function =
       base::MakeRefCounted<api::DeveloperPrivateAddHostPermissionFunction>();
 
   std::string args = base::StringPrintf(R"(["%s", "%s"])",
@@ -189,7 +191,7 @@
     Profile* profile,
     const std::string& site,
     std::vector<api::developer_private::MatchingExtensionInfo>* infos) {
-  scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+  auto function = base::MakeRefCounted<
       api::DeveloperPrivateGetMatchingExtensionsForSiteFunction>();
   EXPECT_TRUE(api_test_utils::RunFunction(
       function.get(), base::StringPrintf(R"(["%s"])", site.c_str()), profile))
@@ -344,9 +346,6 @@
     const std::string& key,
     const std::string& extension_id,
     bool expected_default_value) {
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateUpdateExtensionConfigurationFunction());
-
   EXPECT_EQ(expected_default_value, has_pref.Run()) << key;
 
   {
@@ -356,16 +355,20 @@
 
     base::ListValue args;
     args.Append(base::Value(std::move(parameters)));
+    auto function = base::MakeRefCounted<
+        api::DeveloperPrivateUpdateExtensionConfigurationFunction>();
     EXPECT_FALSE(RunFunction(function, args)) << key;
     EXPECT_EQ("This action requires a user gesture.", function->GetError());
 
-    function = new api::DeveloperPrivateUpdateExtensionConfigurationFunction();
+    function = base::MakeRefCounted<
+        api::DeveloperPrivateUpdateExtensionConfigurationFunction>();
     function->set_source_context_type(Feature::WEBUI_CONTEXT);
     EXPECT_TRUE(RunFunction(function, args)) << key;
     EXPECT_TRUE(has_pref.Run()) << key;
 
     ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
-    function = new api::DeveloperPrivateUpdateExtensionConfigurationFunction();
+    function = base::MakeRefCounted<
+        api::DeveloperPrivateUpdateExtensionConfigurationFunction>();
     EXPECT_TRUE(RunFunction(function, args)) << key;
     EXPECT_TRUE(has_pref.Run()) << key;
   }
@@ -379,7 +382,8 @@
     args.Append(base::Value(std::move(parameters)));
 
     ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
-    function = new api::DeveloperPrivateUpdateExtensionConfigurationFunction();
+    auto function = base::MakeRefCounted<
+        api::DeveloperPrivateUpdateExtensionConfigurationFunction>();
     EXPECT_TRUE(RunFunction(function, args)) << key;
     EXPECT_FALSE(has_pref.Run()) << key;
   }
@@ -389,8 +393,8 @@
     const base::ListValue& args,
     api::developer_private::PackStatus expected_status,
     int expected_flags) {
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivatePackDirectoryFunction());
+  auto function =
+      base::MakeRefCounted<api::DeveloperPrivatePackDirectoryFunction>();
   if (!RunFunction(function, args))
     return testing::AssertionFailure() << "Could not run function.";
 
@@ -417,8 +421,8 @@
 
 void DeveloperPrivateApiUnitTest::UpdateProfileConfigurationDevMode(
     bool dev_mode) {
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateUpdateProfileConfigurationFunction());
+  auto function = base::MakeRefCounted<
+      api::DeveloperPrivateUpdateProfileConfigurationFunction>();
   std::unique_ptr<base::ListValue> args =
       ListBuilder()
           .Append(DictionaryBuilder().Set("inDeveloperMode", dev_mode).Build())
@@ -428,8 +432,8 @@
 
 void DeveloperPrivateApiUnitTest::GetProfileConfiguration(
     std::unique_ptr<api::developer_private::ProfileInfo>* profile_info) {
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateGetProfileConfigurationFunction());
+  auto function = base::MakeRefCounted<
+      api::DeveloperPrivateGetProfileConfigurationFunction>();
   base::ListValue args;
   EXPECT_TRUE(RunFunction(function, args)) << function->GetError();
 
@@ -445,7 +449,7 @@
     base::StringPiece new_access) {
   SCOPED_TRACE(new_access);
   ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
-  scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+  auto function = base::MakeRefCounted<
       api::DeveloperPrivateUpdateExtensionConfigurationFunction>();
   std::string args =
       base::StringPrintf(R"([{"extensionId": "%s", "hostAccess": "%s"}])",
@@ -521,8 +525,7 @@
 TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateReload) {
   const Extension* extension = LoadUnpackedExtension();
   std::string extension_id = extension->id();
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateReloadFunction());
+  auto function = base::MakeRefCounted<api::DeveloperPrivateReloadFunction>();
   base::ListValue reload_args;
   reload_args.Append(extension_id);
 
@@ -603,8 +606,8 @@
   base::ListValue choose_args;
   choose_args.Append("FOLDER");
   choose_args.Append("LOAD");
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateChoosePathFunction());
+  auto function =
+      base::MakeRefCounted<api::DeveloperPrivateChoosePathFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   EXPECT_TRUE(RunFunction(function, choose_args)) << function->GetError();
   std::string path;
@@ -622,7 +625,7 @@
   choose_args.ClearList();
   choose_args.Append("FILE");
   choose_args.Append("PEM");
-  function = new api::DeveloperPrivateChoosePathFunction();
+  function = base::MakeRefCounted<api::DeveloperPrivateChoosePathFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   EXPECT_TRUE(RunFunction(function, choose_args)) << function->GetError();
   result_list = function->GetResultList();
@@ -634,7 +637,7 @@
 
   // Try canceling the file dialog.
   api::EntryPicker::SkipPickerAndAlwaysCancelForTest();
-  function = new api::DeveloperPrivateChoosePathFunction();
+  function = base::MakeRefCounted<api::DeveloperPrivateChoosePathFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   EXPECT_FALSE(RunFunction(function, choose_args));
   EXPECT_EQ(std::string("File selection was canceled."), function->GetError());
@@ -650,8 +653,8 @@
 
   // Try loading a good extension (it should succeed, and the extension should
   // be added).
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateLoadUnpackedFunction());
+  auto function =
+      base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   ExtensionIdSet current_ids = registry()->enabled_extensions().GetIDs();
   EXPECT_TRUE(RunFunction(function, base::ListValue())) << function->GetError();
@@ -668,7 +671,7 @@
   api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&path);
 
   // Try loading a bad extension (it should fail, and we should get an error).
-  function = new api::DeveloperPrivateLoadUnpackedFunction();
+  function = base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   base::ListValue unpacked_args;
   base::Value::Dict options;
@@ -700,8 +703,8 @@
     base::FilePath path = dir.UnpackedPath();
     api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&path);
 
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateLoadUnpackedFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
     absl::optional<base::Value> result =
         api_test_utils::RunFunctionAndReturnSingleResult(
@@ -727,8 +730,8 @@
     base::FilePath path = dir.UnpackedPath();
     api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&path);
 
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateLoadUnpackedFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
     absl::optional<base::Value> result =
         api_test_utils::RunFunctionAndReturnSingleResult(
@@ -759,8 +762,8 @@
     base::FilePath path = dir.UnpackedPath();
     api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&path);
 
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateLoadUnpackedFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
     absl::optional<base::Value> result =
         api_test_utils::RunFunctionAndReturnSingleResult(
@@ -792,8 +795,8 @@
   {
     // Trying to load the extension should result in a load error with the
     // retry id populated.
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateLoadUnpackedFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
     absl::optional<base::Value> result =
         api_test_utils::RunFunctionAndReturnSingleResult(
@@ -812,8 +815,8 @@
     // same retry id.  This is somewhat an implementation detail, but is
     // important to ensure we don't allocate crazy numbers of ids if the user
     // just retries continuously.
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateLoadUnpackedFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
     absl::optional<base::Value> result =
         api_test_utils::RunFunctionAndReturnSingleResult(
@@ -841,8 +844,8 @@
     base::FilePath second_path = second_dir.UnpackedPath();
     api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&second_path);
 
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateLoadUnpackedFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
     absl::optional<base::Value> result =
         api_test_utils::RunFunctionAndReturnSingleResult(
@@ -872,8 +875,8 @@
 
   {
     // Try reloading the extension by supplying the retry id. It should succeed.
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateLoadUnpackedFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
     TestExtensionRegistryObserver observer(registry());
     api_test_utils::RunFunction(function.get(),
@@ -890,8 +893,8 @@
 
   {
     // Try supplying an invalid retry id. It should fail with an error.
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateLoadUnpackedFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
     std::string error = api_test_utils::RunFunctionAndReturnError(
         function.get(),
@@ -1124,8 +1127,8 @@
   properties.message = kErrorMessage;
   properties.manifest_key = "name";
 
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateRequestFileSourceFunction());
+  auto function =
+      base::MakeRefCounted<api::DeveloperPrivateRequestFileSourceFunction>();
   base::ListValue file_source_args;
   file_source_args.Append(base::Value(properties.ToValue()));
   EXPECT_TRUE(RunFunction(function, file_source_args)) << function->GetError();
@@ -1150,8 +1153,8 @@
   // serialize/deserialize the result - which implicity tests that everything
   // has a sane value.
   {
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateGetExtensionsInfoFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateGetExtensionsInfoFunction>();
     EXPECT_TRUE(RunFunction(function, base::ListValue()))
         << function->GetError();
     const base::Value::List* results = function->GetResultList();
@@ -1167,8 +1170,8 @@
   // As a sanity check, also run the GetItemsInfo and make sure it returns a
   // sane value.
   {
-    scoped_refptr<ExtensionFunction> function(
-        new api::DeveloperPrivateGetItemsInfoFunction());
+    auto function =
+        base::MakeRefCounted<api::DeveloperPrivateGetItemsInfoFunction>();
     base::ListValue args;
     args.Append(false);
     args.Append(false);
@@ -1210,8 +1213,8 @@
                       .Set("type", type_string)
                       .Build())
           .Build();
-  scoped_refptr<ExtensionFunction> function =
-      new api::DeveloperPrivateDeleteExtensionErrorsFunction();
+  auto function = base::MakeRefCounted<
+      api::DeveloperPrivateDeleteExtensionErrorsFunction>();
   EXPECT_TRUE(RunFunction(function, *args)) << function->GetError();
   // Two errors should remain.
   const ErrorList& error_list =
@@ -1227,7 +1230,8 @@
                       .Set("errorIds", ListBuilder().Append(error_id).Build())
                       .Build())
           .Build();
-  function = new api::DeveloperPrivateDeleteExtensionErrorsFunction();
+  function = base::MakeRefCounted<
+      api::DeveloperPrivateDeleteExtensionErrorsFunction>();
   EXPECT_TRUE(RunFunction(function, *args)) << function->GetError();
   // And then there was one.
   EXPECT_EQ(1u, error_console->GetErrorsForExtension(extension->id()).size());
@@ -1238,7 +1242,8 @@
           .Append(
               DictionaryBuilder().Set("extensionId", extension->id()).Build())
           .Build();
-  function = new api::DeveloperPrivateDeleteExtensionErrorsFunction();
+  function = base::MakeRefCounted<
+      api::DeveloperPrivateDeleteExtensionErrorsFunction>();
   EXPECT_TRUE(RunFunction(function, *args)) << function->GetError();
   // No more errors!
   EXPECT_TRUE(error_console->GetErrorsForExtension(extension->id()).empty());
@@ -1253,8 +1258,8 @@
   // Attempt to repair the good extension, expect failure.
   std::unique_ptr<base::ListValue> args =
       ListBuilder().Append(extension->id()).Build();
-  scoped_refptr<ExtensionFunction> function =
-      new api::DeveloperPrivateRepairExtensionFunction();
+  auto function =
+      base::MakeRefCounted<api::DeveloperPrivateRepairExtensionFunction>();
   EXPECT_FALSE(RunFunction(function, *args));
   EXPECT_EQ("Cannot repair a healthy extension.", function->GetError());
 }
@@ -1284,8 +1289,8 @@
   // Attempt to repair the good extension, expect failure.
   std::unique_ptr<base::ListValue> args =
       ListBuilder().Append(extension_id).Build();
-  scoped_refptr<ExtensionFunction> function =
-      new api::DeveloperPrivateRepairExtensionFunction();
+  auto function =
+      base::MakeRefCounted<api::DeveloperPrivateRepairExtensionFunction>();
   EXPECT_FALSE(RunFunction(function, *args));
   EXPECT_EQ("Cannot repair a healthy extension.", function->GetError());
 
@@ -1293,7 +1298,8 @@
   // policy extension.
   service()->DisableExtension(extension_id, disable_reason::DISABLE_CORRUPTED);
   args = ListBuilder().Append(extension_id).Build();
-  function = new api::DeveloperPrivateRepairExtensionFunction();
+  function =
+      base::MakeRefCounted<api::DeveloperPrivateRepairExtensionFunction>();
   EXPECT_FALSE(RunFunction(function, *args));
   EXPECT_EQ("Cannot repair a policy-installed extension.",
             function->GetError());
@@ -1349,7 +1355,7 @@
 
   PrefService* prefs = profile()->GetPrefs();
   prefs->SetBoolean(prefs::kExtensionsUIDeveloperMode, false);
-  scoped_refptr<ExtensionFunction> function =
+  auto function =
       base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   std::string error = extension_function_test_utils::RunFunctionAndReturnError(
@@ -1382,7 +1388,7 @@
 
   EXPECT_FALSE(info->can_load_unpacked);
 
-  scoped_refptr<ExtensionFunction> function =
+  auto function =
       base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   std::string error = extension_function_test_utils::RunFunctionAndReturnError(
@@ -1425,7 +1431,7 @@
   std::unique_ptr<content::WebContents> web_contents(
       content::WebContentsTester::CreateTestWebContents(profile(), nullptr));
 
-  scoped_refptr<ExtensionFunction> function =
+  auto function =
       base::MakeRefCounted<api::DeveloperPrivateInstallDroppedFileFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
 
@@ -1451,7 +1457,7 @@
   DeveloperPrivateAPI::Get(profile())->SetDraggedPath(web_contents.get(),
                                                       crx_path);
 
-  scoped_refptr<ExtensionFunction> function =
+  auto function =
       base::MakeRefCounted<api::DeveloperPrivateInstallDroppedFileFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
 
@@ -1475,7 +1481,7 @@
   DeveloperPrivateAPI::Get(profile())->SetDraggedPath(web_contents.get(),
                                                       script_path);
 
-  scoped_refptr<ExtensionFunction> function =
+  auto function =
       base::MakeRefCounted<api::DeveloperPrivateInstallDroppedFileFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
 
@@ -1559,7 +1565,7 @@
                                         bool should_succeed,
                                         const char* expected_error) {
     SCOPED_TRACE(host);
-    scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+    auto function = base::MakeRefCounted<
         api::DeveloperPrivateRemoveHostPermissionFunction>();
     std::string args = base::StringPrintf(R"(["%s", "%s"])",
                                           extension->id().c_str(), host.data());
@@ -1774,7 +1780,7 @@
             *extension_prefs->GetRuntimeGrantedPermissions(extension->id()));
 
   {
-    scoped_refptr<ExtensionFunction> function =
+    auto function =
         base::MakeRefCounted<api::DeveloperPrivateAddHostPermissionFunction>();
     std::string args = base::StringPrintf(
         R"(["%s", "%s"])", extension->id().c_str(), "*://chromium.org/*");
@@ -1805,7 +1811,7 @@
             *extension_prefs->GetRuntimeGrantedPermissions(extension->id()));
 
   {
-    scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+    auto function = base::MakeRefCounted<
         api::DeveloperPrivateRemoveHostPermissionFunction>();
     std::string args = base::StringPrintf(
         R"(["%s", "%s"])", extension->id().c_str(), "*://chromium.org/*");
@@ -1931,7 +1937,7 @@
   DeveloperPrivateAPI::Get(profile())->SetDraggedPath(web_contents.get(),
                                                       zip_path);
 
-  scoped_refptr<ExtensionFunction> function =
+  auto function =
       base::MakeRefCounted<api::DeveloperPrivateInstallDroppedFileFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
 
@@ -1955,8 +1961,8 @@
   manager->AddUserPermittedSite(permitted_url);
   manager->AddUserRestrictedSite(restricted_url);
 
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateGetUserSiteSettingsFunction());
+  auto function =
+      base::MakeRefCounted<api::DeveloperPrivateGetUserSiteSettingsFunction>();
 
   base::ListValue args;
   EXPECT_TRUE(RunFunction(function, args)) << function->GetError();
@@ -2082,7 +2088,7 @@
       url::Origin::Create(GURL("http://b.example.com")));
   manager->AddUserRestrictedSite(url::Origin::Create(GURL("http://google.ca")));
 
-  scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+  auto function = base::MakeRefCounted<
       api::DeveloperPrivateGetUserAndExtensionSitesByEtldFunction>();
   EXPECT_TRUE(RunFunction(function, base::ListValue())) << function->GetError();
   const base::Value::List* results = function->GetResultList();
@@ -2138,7 +2144,7 @@
   AddExtensionAndGrantPermissions(profile(), service(), *extension_1);
   AddExtensionAndGrantPermissions(profile(), service(), *extension_2);
 
-  scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+  auto function = base::MakeRefCounted<
       api::DeveloperPrivateGetUserAndExtensionSitesByEtldFunction>();
   EXPECT_TRUE(RunFunction(function, base::ListValue())) << function->GetError();
   const base::Value::List* results = function->GetResultList();
@@ -2215,7 +2221,7 @@
   AddExtensionAndGrantPermissions(profile(), service(), *extension_2);
   AddExtensionAndGrantPermissions(profile(), service(), *extension_3);
 
-  scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+  auto function = base::MakeRefCounted<
       api::DeveloperPrivateGetUserAndExtensionSitesByEtldFunction>();
   EXPECT_TRUE(RunFunction(function, base::ListValue())) << function->GetError();
   const base::Value::List* results = function->GetResultList();
@@ -2269,7 +2275,7 @@
   AddExtensionAndGrantPermissions(profile(), service(), *extension_1);
 
   auto get_user_and_extension_sites = [this](const std::string& expected_json) {
-    scoped_refptr<ExtensionFunction> function = base::MakeRefCounted<
+    auto function = base::MakeRefCounted<
         api::DeveloperPrivateGetUserAndExtensionSitesByEtldFunction>();
     EXPECT_TRUE(RunFunction(function, base::ListValue()))
         << function->GetError();
@@ -2507,7 +2513,7 @@
 
   ASSERT_TRUE(profile()->IsChild());
 
-  scoped_refptr<ExtensionFunction> function =
+  auto function =
       base::MakeRefCounted<api::DeveloperPrivateLoadUnpackedFunction>();
   function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   std::string error = extension_function_test_utils::RunFunctionAndReturnError(
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc b/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc
index b2481df..07c8b32 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_apitest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_refptr.h"
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/scoped_feature_list.h"
@@ -58,8 +60,8 @@
   const Extension* app = LoadAndLaunchApp(dir);
 
   // Get the info about the app, including the inspectable views.
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateGetExtensionInfoFunction());
+  scoped_refptr<ExtensionFunction> function =
+      base::MakeRefCounted<api::DeveloperPrivateGetExtensionInfoFunction>();
   std::unique_ptr<base::Value> result(
       extension_function_test_utils::RunFunctionAndReturnSingleResult(
           function.get(), base::StringPrintf("[\"%s\"]", app->id().c_str()),
@@ -82,7 +84,7 @@
   ASSERT_TRUE(window_view);
 
   // Inspect the app window.
-  function = new api::DeveloperPrivateOpenDevToolsFunction();
+  function = base::MakeRefCounted<api::DeveloperPrivateOpenDevToolsFunction>();
   extension_function_test_utils::RunFunction(
       function.get(),
       base::StringPrintf("[{\"renderViewId\": %d, \"renderProcessId\": %d}]",
@@ -112,8 +114,8 @@
   WaitForExtensionNotIdle(extension->id());
 
   // Get the info about the extension, including the inspectable views.
-  scoped_refptr<ExtensionFunction> function(
-      new api::DeveloperPrivateGetExtensionInfoFunction());
+  scoped_refptr<ExtensionFunction> function =
+      base::MakeRefCounted<api::DeveloperPrivateGetExtensionInfoFunction>();
   std::unique_ptr<base::Value> result(
       extension_function_test_utils::RunFunctionAndReturnSingleResult(
           function.get(),
@@ -129,7 +131,7 @@
   ASSERT_EQ(api::developer_private::VIEW_TYPE_EXTENSION_GUEST, view.type);
 
   // Inspect the embedded options page.
-  function = new api::DeveloperPrivateOpenDevToolsFunction();
+  function = base::MakeRefCounted<api::DeveloperPrivateOpenDevToolsFunction>();
   extension_function_test_utils::RunFunction(
       function.get(),
       base::StringPrintf("[{\"renderViewId\": %d, \"renderProcessId\": %d}]",
diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc
index 4c527b5..ff7f2554d 100644
--- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc
+++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_unittest.cc
@@ -9,6 +9,8 @@
 #include "base/bind.h"
 #include "base/containers/span.h"
 #include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_refptr.h"
 #include "base/strings/string_piece.h"
 #include "base/values.h"
 #include "chrome/browser/ash/attestation/mock_tpm_challenge_key.h"
@@ -157,7 +159,8 @@
 class EPKChallengeMachineKeyTest : public EPKChallengeKeyTestBase {
  protected:
   EPKChallengeMachineKeyTest()
-      : func_(new EnterprisePlatformKeysChallengeMachineKeyFunction()) {
+      : func_(base::MakeRefCounted<
+              EnterprisePlatformKeysChallengeMachineKeyFunction>()) {
     func_->set_extension(extension_.get());
   }
 
@@ -229,7 +232,8 @@
 class EPKChallengeUserKeyTest : public EPKChallengeKeyTestBase {
  protected:
   EPKChallengeUserKeyTest()
-      : func_(new EnterprisePlatformKeysChallengeUserKeyFunction()) {
+      : func_(base::MakeRefCounted<
+              EnterprisePlatformKeysChallengeUserKeyFunction>()) {
     func_->set_extension(extension_.get());
   }
 
diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc
index 0ebd95d..eb8074b 100644
--- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc
+++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc
@@ -482,10 +482,9 @@
 
 IN_PROC_BROWSER_TEST_P(EnterprisePlatformKeysLoginScreenTest, Basic) {
   AddScreenplayTag();
-  base::DictionaryValue config;
-  config.SetStringKey("customArg",
-                      BuildCustomArg(/*user_session_test=*/false,
-                                     /*system_token_enabled=*/true));
+  base::Value::Dict config;
+  config.Set("customArg", BuildCustomArg(/*user_session_test=*/false,
+                                         /*system_token_enabled=*/true));
   extensions::TestGetConfigFunction::set_test_config_state(&config);
 
   extensions::ResultCatcher catcher;
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_api.cc b/chrome/browser/extensions/api/extension_action/extension_action_api.cc
index f8e6890..59162414 100644
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.cc
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.cc
@@ -242,7 +242,7 @@
   }
 
   if (event_name) {
-    std::unique_ptr<base::ListValue> args(new base::ListValue());
+    base::Value::List args;
     // The action APIs (browserAction, pageAction, action) are only available
     // to blessed extension contexts. As such, we deterministically know that
     // the right context type here is blessed.
@@ -251,9 +251,9 @@
     ExtensionTabUtil::ScrubTabBehavior scrub_tab_behavior =
         ExtensionTabUtil::GetScrubTabBehavior(extension, context_type,
                                               web_contents);
-    args->Append(ExtensionTabUtil::CreateTabObject(
-                     web_contents, scrub_tab_behavior, extension)
-                     .ToValue());
+    args.Append(ExtensionTabUtil::CreateTabObject(web_contents,
+                                                  scrub_tab_behavior, extension)
+                    .ToValue());
 
     DispatchEventToExtension(web_contents->GetBrowserContext(),
                              extension_action.extension_id(), histogram_value,
@@ -296,12 +296,12 @@
     const std::string& extension_id,
     events::HistogramValue histogram_value,
     const std::string& event_name,
-    std::unique_ptr<base::ListValue> event_args) {
+    base::Value::List event_args) {
   if (!EventRouter::Get(context))
     return;
 
-  auto event = std::make_unique<Event>(
-      histogram_value, event_name, std::move(*event_args).TakeList(), context);
+  auto event = std::make_unique<Event>(histogram_value, event_name,
+                                       std::move(event_args), context);
   event->user_gesture = EventRouter::USER_GESTURE_ENABLED;
   EventRouter::Get(context)
       ->DispatchEventToExtension(extension_id, std::move(event));
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_api.h b/chrome/browser/extensions/api/extension_action/extension_action_api.h
index a85f8b66..aa440233 100644
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.h
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.h
@@ -98,7 +98,7 @@
                                 const std::string& extension_id,
                                 events::HistogramValue histogram_value,
                                 const std::string& event_name,
-                                std::unique_ptr<base::ListValue> event_args);
+                                base::Value::List event_args);
 
   // BrowserContextKeyedAPI implementation.
   void Shutdown() override;
diff --git a/chrome/browser/extensions/api/management/management_api_unittest.cc b/chrome/browser/extensions/api/management/management_api_unittest.cc
index b7e93ab0..cca42faa4 100644
--- a/chrome/browser/extensions/api/management/management_api_unittest.cc
+++ b/chrome/browser/extensions/api/management/management_api_unittest.cc
@@ -7,6 +7,7 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/metrics/histogram_tester.h"
@@ -135,8 +136,7 @@
       absl::nullopt;
   if (use_user_gesture)
     gesture.emplace();
-  scoped_refptr<ManagementSetEnabledFunction> function =
-      base::MakeRefCounted<ManagementSetEnabledFunction>();
+  auto function = base::MakeRefCounted<ManagementSetEnabledFunction>();
   if (web_contents)
     function->SetRenderFrameHost(web_contents->GetPrimaryMainFrame());
   base::Value args(base::Value::Type::LIST);
@@ -178,8 +178,7 @@
       ExtensionBuilder("Test").Build();
   service()->AddExtension(source_extension.get());
   std::string extension_id = extension->id();
-  scoped_refptr<ManagementSetEnabledFunction> function(
-      new ManagementSetEnabledFunction());
+  auto function = base::MakeRefCounted<ManagementSetEnabledFunction>();
   function->set_extension(source_extension);
 
   base::Value disable_args(base::Value::Type::LIST);
@@ -196,7 +195,7 @@
   enable_args.Append(true);
 
   // Test re-enabling it.
-  function = new ManagementSetEnabledFunction();
+  function = base::MakeRefCounted<ManagementSetEnabledFunction>();
   EXPECT_TRUE(RunFunction(function, enable_args)) << function->GetError();
   EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
 
@@ -208,7 +207,7 @@
       ExtensionSystem::Get(profile())->management_policy();
   policy->RegisterProvider(&provider);
 
-  function = new ManagementSetEnabledFunction();
+  function = base::MakeRefCounted<ManagementSetEnabledFunction>();
   EXPECT_FALSE(RunFunction(function, disable_args));
   EXPECT_EQ(ErrorUtils::FormatErrorMessage(constants::kUserCantModifyError,
                                            extension_id),
@@ -343,8 +342,7 @@
         ScopedTestDialogAutoConfirm::ACCEPT);
 
     // Uninstall requires a user gesture, so this should fail.
-    scoped_refptr<ExtensionFunction> function(
-        new ManagementUninstallFunction());
+    auto function = base::MakeRefCounted<ManagementUninstallFunction>();
     function->set_source_context_type(Feature::WEBUI_CONTEXT);
     EXPECT_FALSE(RunFunction(function, uninstall_args));
     EXPECT_EQ(std::string(constants::kGestureNeededForUninstallError),
@@ -352,7 +350,7 @@
 
     ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
 
-    function = new ManagementUninstallFunction();
+    function = base::MakeRefCounted<ManagementUninstallFunction>();
     function->set_source_context_type(Feature::WEBUI_CONTEXT);
     EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
     EXPECT_TRUE(RunFunction(function, uninstall_args)) << function->GetError();
@@ -373,7 +371,7 @@
 
     service()->AddExtension(extension.get());
     scoped_refptr<ExtensionFunction> function =
-        new ManagementUninstallFunction();
+        base::MakeRefCounted<ManagementUninstallFunction>();
     function->set_source_context_type(Feature::WEBUI_CONTEXT);
     EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
     EXPECT_FALSE(RunFunction(function, uninstall_args));
@@ -390,7 +388,7 @@
     base::Value options(base::Value::Type::DICTIONARY);
     options.SetBoolPath("showConfirmDialog", false);
     uninstall_args.Append(std::move(options));
-    function = new ManagementUninstallFunction();
+    function = base::MakeRefCounted<ManagementUninstallFunction>();
     function->set_source_context_type(Feature::WEBUI_CONTEXT);
     EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id));
     EXPECT_FALSE(RunFunction(function, uninstall_args));
@@ -408,7 +406,7 @@
     // (even though we auto-cancel any dialog), because the dialog is never
     // shown.
     uninstall_args.GetList().erase(uninstall_args.GetList().begin());
-    function = new ManagementUninstallSelfFunction();
+    function = base::MakeRefCounted<ManagementUninstallSelfFunction>();
     // Note: this time the source is coming from the extension itself, not a
     // WebUI based context.
     function->set_extension(extension);
@@ -576,7 +574,7 @@
 
   ScopedTestDialogAutoConfirm auto_confirm(ScopedTestDialogAutoConfirm::ACCEPT);
   ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
-  scoped_refptr<ExtensionFunction> function(new ManagementUninstallFunction());
+  auto function = base::MakeRefCounted<ManagementUninstallFunction>();
   function->set_source_context_type(Feature::WEBUI_CONTEXT);
   base::Value uninstall_args(base::Value::Type::LIST);
   uninstall_args.Append(id);
@@ -593,14 +591,12 @@
   service()->BlocklistExtensionForTest(id);
   EXPECT_NE(nullptr, registry()->GetInstalledExtension(id));
 
-  scoped_refptr<ExtensionFunction> function;
-
   // Test enabling it.
   {
     base::Value enable_args(base::Value::Type::LIST);
     enable_args.Append(id);
     enable_args.Append(true);
-    function = new ManagementSetEnabledFunction();
+    auto function = base::MakeRefCounted<ManagementSetEnabledFunction>();
     EXPECT_TRUE(RunFunction(function, enable_args)) << function->GetError();
     EXPECT_FALSE(registry()->enabled_extensions().Contains(id));
     EXPECT_FALSE(registry()->disabled_extensions().Contains(id));
@@ -612,7 +608,7 @@
     disable_args.Append(id);
     disable_args.Append(false);
 
-    function = new ManagementSetEnabledFunction();
+    auto function = base::MakeRefCounted<ManagementSetEnabledFunction>();
     EXPECT_TRUE(RunFunction(function, disable_args)) << function->GetError();
     EXPECT_FALSE(registry()->enabled_extensions().Contains(id));
     EXPECT_FALSE(registry()->disabled_extensions().Contains(id));
@@ -627,12 +623,11 @@
 
   const std::string args =
       base::StringPrintf("[\"%s\"]", extension->id().c_str());
-  scoped_refptr<ExtensionFunction> function;
 
   // Initially the extension should show as enabled.
   EXPECT_TRUE(registry()->enabled_extensions().Contains(extension->id()));
   {
-    function = new ManagementGetFunction();
+    auto function = base::MakeRefCounted<ManagementGetFunction>();
     std::unique_ptr<base::Value> value(
         extension_function_test_utils::RunFunctionAndReturnSingleResult(
             function.get(), args, browser()));
@@ -655,7 +650,7 @@
   service()->CheckManagementPolicy();
   EXPECT_TRUE(registry()->disabled_extensions().Contains(extension->id()));
   {
-    function = new ManagementGetFunction();
+    auto function = base::MakeRefCounted<ManagementGetFunction>();
     std::unique_ptr<base::Value> value(
         extension_function_test_utils::RunFunctionAndReturnSingleResult(
             function.get(), args, browser()));
@@ -678,7 +673,7 @@
                               disable_reason::DISABLE_USER_ACTION);
   EXPECT_TRUE(registry()->disabled_extensions().Contains(extension->id()));
   {
-    function = new ManagementGetFunction();
+    auto function = base::MakeRefCounted<ManagementGetFunction>();
     std::unique_ptr<base::Value> value(
         extension_function_test_utils::RunFunctionAndReturnSingleResult(
             function.get(), args, browser()));
@@ -704,7 +699,7 @@
   // freely.
   EXPECT_TRUE(registry()->enabled_extensions().Contains(extension->id()));
   {
-    scoped_refptr<ExtensionFunction> function = new ManagementGetFunction();
+    auto function = base::MakeRefCounted<ManagementGetFunction>();
     std::unique_ptr<base::Value> value(
         extension_function_test_utils::RunFunctionAndReturnSingleResult(
             function.get(), args, browser()));
@@ -726,7 +721,7 @@
   service()->CheckManagementPolicy();
   EXPECT_TRUE(registry()->enabled_extensions().Contains(extension->id()));
   {
-    scoped_refptr<ExtensionFunction> function = new ManagementGetFunction();
+    auto function = base::MakeRefCounted<ManagementGetFunction>();
     std::unique_ptr<base::Value> value(
         extension_function_test_utils::RunFunctionAndReturnSingleResult(
             function.get(), args, browser()));
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
index db48166..6d53211 100644
--- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -1905,8 +1905,8 @@
   void SetUpOnMainThread() override {
     ExtensionWebRequestApiTest::SetUpOnMainThread();
     ASSERT_TRUE(StartEmbeddedTestServer());
-    GetTestConfig()->SetInteger("testWebTransportPort",
-                                server_.server_address().port());
+    GetTestConfig()->Set("testWebTransportPort",
+                         server_.server_address().port());
   }
 
  protected:
diff --git a/chrome/browser/extensions/extension_apitest.cc b/chrome/browser/extensions/extension_apitest.cc
index 7e6545c..11ff673e84 100644
--- a/chrome/browser/extensions/extension_apitest.cc
+++ b/chrome/browser/extensions/extension_apitest.cc
@@ -70,15 +70,15 @@
 void ExtensionApiTest::SetUpOnMainThread() {
   ExtensionBrowserTest::SetUpOnMainThread();
   DCHECK(!test_config_.get()) << "Previous test did not clear config state.";
-  test_config_ = std::make_unique<base::DictionaryValue>();
-  test_config_->SetStringPath(kTestDataDirectory,
-                              net::FilePathToFileURL(test_data_dir_).spec());
+  test_config_ = std::make_unique<base::Value::Dict>();
+  test_config_->Set(kTestDataDirectory,
+                    net::FilePathToFileURL(test_data_dir_).spec());
 
   if (embedded_test_server()->Started()) {
     // InitializeEmbeddedTestServer was called before |test_config_| was set.
     // Set the missing port key.
-    test_config_->SetIntPath(kEmbeddedTestServerPort,
-                             embedded_test_server()->port());
+    test_config_->SetByDottedPath(kEmbeddedTestServerPort,
+                                  embedded_test_server()->port());
   }
 
   TestGetConfigFunction::set_test_config_state(test_config_.get());
@@ -238,8 +238,8 @@
   // access the test server and local file system.  Tests can see these values
   // using the extension API function chrome.test.getConfig().
   if (test_config_) {
-    test_config_->SetIntPath(kEmbeddedTestServerPort,
-                             embedded_test_server()->port());
+    test_config_->SetByDottedPath(kEmbeddedTestServerPort,
+                                  embedded_test_server()->port());
   }
   // else SetUpOnMainThread has not been called yet. Possibly because the
   // caller needs a valid port in an overridden SetUpCommandLine method.
@@ -261,14 +261,14 @@
   if (!websocket_server_->Start())
     return false;
 
-  test_config_->SetIntPath(kTestWebSocketPort,
-                           websocket_server_->host_port_pair().port());
+  test_config_->Set(kTestWebSocketPort,
+                    websocket_server_->host_port_pair().port());
 
   return true;
 }
 
 void ExtensionApiTest::SetCustomArg(base::StringPiece custom_arg) {
-  test_config_->SetKey(kTestCustomArg, base::Value(custom_arg));
+  test_config_->Set(kTestCustomArg, base::Value(custom_arg));
 }
 
 void ExtensionApiTest::SetUpCommandLine(base::CommandLine* command_line) {
diff --git a/chrome/browser/extensions/extension_apitest.h b/chrome/browser/extensions/extension_apitest.h
index e9a8ebf6..2a7213d2 100644
--- a/chrome/browser/extensions/extension_apitest.h
+++ b/chrome/browser/extensions/extension_apitest.h
@@ -133,7 +133,7 @@
   // If it failed, what was the error message?
   std::string message_;
 
-  base::DictionaryValue* GetTestConfig() { return test_config_.get(); }
+  base::Value::Dict* GetTestConfig() { return test_config_.get(); }
 
   // Creates a new secure test server that can be used in place of the default
   // HTTP embedded_test_server defined in BrowserTestBase. The new test server
@@ -154,7 +154,7 @@
 
   // Hold details of the test, set in C++, which can be accessed by
   // javascript using chrome.test.getConfig().
-  std::unique_ptr<base::DictionaryValue> test_config_;
+  std::unique_ptr<base::Value::Dict> test_config_;
 
   // Hold the test WebSocket server.
   std::unique_ptr<net::SpawnedTestServer> websocket_server_;
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
index a2f53744..4f40f11 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
@@ -966,6 +966,7 @@
               PersistedPermissionOptions::kUpdatePersistedPermission);
           break;
         case UserAction::kLoadFromStorage:
+        case UserAction::kNone:
           break;
       }
       break;
@@ -1050,6 +1051,7 @@
         case UserAction::kOpen:
         case UserAction::kDragAndDrop:
         case UserAction::kLoadFromStorage:
+        case UserAction::kNone:
           break;
       }
       break;
@@ -1282,6 +1284,12 @@
     bool should_block) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
+  if (user_action == UserAction::kNone) {
+    std::move(callback).Run(should_block ? SensitiveEntryResult::kAbort
+                                         : SensitiveEntryResult::kAllowed);
+    return;
+  }
+
   if (should_block) {
     auto result_callback = base::BindPostTask(
         base::SequencedTaskRunner::GetCurrentDefault(), std::move(callback));
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
index 47f899b..58bafde9 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
@@ -240,6 +240,12 @@
                 permission_context(), PathType::kExternal,
                 base::FilePath(FILE_PATH_LITERAL("foo/bar")), HandleType::kFile,
                 UserAction::kOpen));
+
+  // Path outside any special directories via no user action should be allowed.
+  EXPECT_EQ(SensitiveDirectoryResult::kAllowed,
+            ConfirmSensitiveEntryAccessSync(
+                permission_context(), PathType::kLocal, kTestPath,
+                HandleType::kDirectory, UserAction::kNone));
 }
 
 TEST_F(ChromeFileSystemAccessPermissionContextTest,
@@ -402,6 +408,12 @@
                 permission_context(), PathType::kLocal,
                 base::FilePath(FILE_PATH_LITERAL("/dev/foo")),
                 HandleType::kFile, UserAction::kOpen));
+  // Even if user action is none, a blocklisted path should be blocked.
+  EXPECT_EQ(SensitiveDirectoryResult::kAbort,
+            ConfirmSensitiveEntryAccessSync(
+                permission_context(), PathType::kLocal,
+                base::FilePath(FILE_PATH_LITERAL("/dev")),
+                HandleType::kDirectory, UserAction::kNone));
 #elif BUILDFLAG(IS_WIN)
   EXPECT_EQ(SensitiveDirectoryResult::kAbort,
             ConfirmSensitiveEntryAccessSync(
@@ -451,6 +463,12 @@
                 permission_context(), PathType::kLocal,
                 temp_dir_.GetPath().AppendASCII("test.swf"), HandleType::kFile,
                 UserAction::kSave));
+  // Files with a dangerous extension from no user action should be allowed.
+  EXPECT_EQ(SensitiveDirectoryResult::kAllowed,
+            ConfirmSensitiveEntryAccessSync(
+                permission_context(), PathType::kLocal,
+                temp_dir_.GetPath().AppendASCII("test.swf"), HandleType::kFile,
+                UserAction::kNone));
   // Opening files with a dangerous extension should be allowed.
   EXPECT_EQ(SensitiveDirectoryResult::kAllowed,
             ConfirmSensitiveEntryAccessSync(
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 438560a..b86e5c0b 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -5373,7 +5373,7 @@
     // chrome://flags.  See https://crbug.com/1246928.
     "name": "ozone-platform-hint",
     "owners": [ "rjkroege", "thomasanderson", "msisov@igalia.com", "nickdiego@igalia.com", "adunaev@igalia.com" ],
-    "expiry_milestone": 110
+    "expiry_milestone": 115
   },
   {
     "name": "page-content-annotations",
@@ -5505,6 +5505,11 @@
     "expiry_milestone": 111
   },
   {
+    "name": "passwords-grouping",
+    "owners": ["vsemeniuk@google.com", "vasilii"],
+    "expiry_milestone": 111
+  },
+  {
     "name": "pcie-billboard-notification",
     "owners": [ "jimmyxgong", "cros-peripherals@google.com"],
     "expiry_milestone": 118
@@ -6789,8 +6794,8 @@
   },
   {
     "name": "use-load-simulated-request-for-error-page-navigation",
-    "owners": [ "alionadangla", "bwwilliams", "gambard" ],
-    "expiry_milestone": 105
+    "owners": [ "gambard", "bling-flags@google.com" ],
+    "expiry_milestone": 115
   },
   {
     "name": "use_messages_staging_url",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 159082c..2e87ed4e 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -4375,6 +4375,11 @@
     "Enables various experimental features related to keyword mode, its "
     "suggestions and layout.";
 
+const char kPasswordsGroupingName[] = "Passwords grouping";
+const char kPasswordsGroupingDescription[] =
+    "Enables displaying passwords grouped together using information from "
+    "the affiliation service.";
+
 const char kPasswordManagerRedesignName[] = "Password Manager new UI";
 const char kPasswordManagerRedesignDescription[] =
     "Enables new Password Manager UI on Desktop";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index dc9f33be..4375e79 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2514,6 +2514,9 @@
 extern const char kOmniboxExperimentalKeywordModeName[];
 extern const char kOmniboxExperimentalKeywordModeDescription[];
 
+extern const char kPasswordsGroupingName[];
+extern const char kPasswordsGroupingDescription[];
+
 extern const char kPasswordManagerRedesignName[];
 extern const char kPasswordManagerRedesignDescription[];
 
diff --git a/chrome/browser/media/webrtc/webrtc_text_log_handler.cc b/chrome/browser/media/webrtc/webrtc_text_log_handler.cc
index f34f92ea..44d98ae 100644
--- a/chrome/browser/media/webrtc/webrtc_text_log_handler.cc
+++ b/chrome/browser/media/webrtc/webrtc_text_log_handler.cc
@@ -486,8 +486,11 @@
 #if BUILDFLAG(IS_MAC)
   computer_model = base::mac::GetModelIdentifier();
 #elif BUILDFLAG(IS_CHROMEOS_ASH)
-  chromeos::system::StatisticsProvider::GetInstance()->GetMachineStatistic(
-      chromeos::system::kHardwareClassKey, &computer_model);
+  if (const absl::optional<base::StringPiece> computer_model_statistic =
+          chromeos::system::StatisticsProvider::GetInstance()
+              ->GetMachineStatistic(chromeos::system::kHardwareClassKey)) {
+    computer_model = std::string(computer_model_statistic.value());
+  }
 #endif
   LogToCircularBuffer("Computer model: " + computer_model);
 
diff --git a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.cc b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.cc
index 002153a..fba8971 100644
--- a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.cc
+++ b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.cc
@@ -87,7 +87,8 @@
 
 void AllPasswordsBottomSheetController::OnCredentialSelected(
     const std::u16string username,
-    const std::u16string password) {
+    const std::u16string password,
+    RequestsToFillPassword requests_to_fill_password) {
   const bool is_password_field =
       focused_field_type_ == FocusedFieldType::kFillablePasswordField;
   if (!driver_) {
@@ -95,7 +96,7 @@
     return;
   }
 
-  if (is_password_field) {
+  if (requests_to_fill_password && is_password_field) {
     // `client_` is guaranteed to be valid here.
     // Both the `client_` and `PasswordAccessoryController` are attached to
     // WebContents. And AllPasswordBottomSheetController is owned by
@@ -117,7 +118,7 @@
     }
 
     FillPassword(password);
-  } else {
+  } else if (!requests_to_fill_password) {
     driver_->FillIntoFocusedField(is_password_field, username);
   }
   // Consumes the dismissal callback to destroy the native controller and java
diff --git a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.h b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.h
index 6fb6f53..925afdf 100644
--- a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.h
+++ b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller.h
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/types/pass_key.h"
+#include "base/types/strong_alias.h"
 #include "components/autofill/core/common/mojom/autofill_types.mojom-forward.h"
 #include "components/device_reauth/biometric_authenticator.h"
 #include "components/password_manager/core/browser/password_store_consumer.h"
@@ -30,6 +31,8 @@
 class AllPasswordsBottomSheetController
     : public password_manager::PasswordStoreConsumer {
  public:
+  using RequestsToFillPassword =
+      base::StrongAlias<struct RequestsToFillPasswordTag, bool>;
   // No-op constructor for tests.
   AllPasswordsBottomSheetController(
       base::PassKey<class AllPasswordsBottomSheetControllerTest>,
@@ -61,7 +64,8 @@
 
   // Informs the controller that the user has made a selection.
   void OnCredentialSelected(const std::u16string username,
-                            const std::u16string password);
+                            const std::u16string password,
+                            RequestsToFillPassword requests_to_fill_password);
 
   // The web page view containing the focused field.
   gfx::NativeView GetNativeView();
diff --git a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller_unittest.cc b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller_unittest.cc
index e7d25f3..8a14b87 100644
--- a/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller_unittest.cc
+++ b/chrome/browser/password_manager/android/all_passwords_bottom_sheet_controller_unittest.cc
@@ -50,6 +50,9 @@
 using IsPublicSuffixMatch = UiCredential::IsPublicSuffixMatch;
 using IsAffiliationBasedMatch = UiCredential::IsAffiliationBasedMatch;
 
+using RequestsToFillPassword =
+    AllPasswordsBottomSheetController::RequestsToFillPassword;
+
 constexpr char kExampleCom[] = "https://example.com";
 constexpr char kExampleOrg[] = "http://www.example.org";
 constexpr char kExampleDe[] = "https://www.example.de";
@@ -211,7 +214,20 @@
               FillIntoFocusedField(false, std::u16string(kUsername1)));
   EXPECT_CALL(dismissal_callback(), Run());
 
-  all_passwords_controller()->OnCredentialSelected(kUsername1, kPassword);
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(false));
+}
+
+TEST_F(AllPasswordsBottomSheetControllerTest,
+       FillsOnlyUsernameIfNotPasswordFillRequested) {
+  UiCredential credential = MakeUiCredential(kUsername1, kPassword);
+
+  EXPECT_CALL(client(), GetBiometricAuthenticator).Times(0);
+
+  EXPECT_CALL(driver(), FillIntoFocusedField(true, std::u16string(kUsername1)));
+
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(false));
 }
 
 TEST_F(AllPasswordsBottomSheetControllerTest, FillsPasswordIfNoAuth) {
@@ -220,7 +236,8 @@
   EXPECT_CALL(driver(), FillIntoFocusedField(true, std::u16string(kPassword)));
   EXPECT_CALL(dismissal_callback(), Run());
 
-  all_passwords_controller()->OnCredentialSelected(kUsername1, kPassword);
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(true));
 }
 
 TEST_F(AllPasswordsBottomSheetControllerTest, FillsPasswordIfAuthNotAvailable) {
@@ -232,7 +249,8 @@
   EXPECT_CALL(driver(), FillIntoFocusedField(true, std::u16string(kPassword)));
   EXPECT_CALL(dismissal_callback(), Run());
 
-  all_passwords_controller()->OnCredentialSelected(kUsername1, kPassword);
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(true));
 }
 
 TEST_F(AllPasswordsBottomSheetControllerTest, FillsPasswordIfAuthSuccessful) {
@@ -249,7 +267,8 @@
   EXPECT_CALL(driver(), FillIntoFocusedField(true, std::u16string(kPassword)));
   EXPECT_CALL(dismissal_callback(), Run());
 
-  all_passwords_controller()->OnCredentialSelected(kUsername1, kPassword);
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(true));
 }
 
 TEST_F(AllPasswordsBottomSheetControllerTest, DoesntFillPasswordIfAuthFailed) {
@@ -267,7 +286,8 @@
       .Times(0);
   EXPECT_CALL(dismissal_callback(), Run());
 
-  all_passwords_controller()->OnCredentialSelected(kUsername1, kPassword);
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(true));
 }
 
 TEST_F(AllPasswordsBottomSheetControllerTest, CancelsAuthIfDestroyed) {
@@ -283,7 +303,8 @@
   EXPECT_CALL(driver(), FillIntoFocusedField(true, std::u16string(kPassword)))
       .Times(0);
 
-  all_passwords_controller()->OnCredentialSelected(kUsername1, kPassword);
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(true));
 
   EXPECT_CALL(*authenticator().get(),
               Cancel(BiometricAuthRequester::kAllPasswordsList));
@@ -298,7 +319,16 @@
        OnCredentialSelectedTriggersPhishGuard) {
   EXPECT_CALL(client(), OnPasswordSelected(std::u16string(kPassword)));
 
-  all_passwords_controller()->OnCredentialSelected(kUsername1, kPassword);
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(true));
+}
+
+TEST_F(AllPasswordsBottomSheetControllerTest,
+       PhishGuardIsNotCalledForUsernameInPasswordField) {
+  EXPECT_CALL(client(), OnPasswordSelected).Times(0);
+
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(false));
 }
 
 TEST_F(AllPasswordsBottomSheetControllerTest,
@@ -306,5 +336,15 @@
   createAllPasswordsController(FocusedFieldType::kFillableUsernameField);
   EXPECT_CALL(client(), OnPasswordSelected).Times(0);
 
-  all_passwords_controller()->OnCredentialSelected(kUsername1, kPassword);
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(false));
+}
+
+TEST_F(AllPasswordsBottomSheetControllerTest,
+       FillsUsernameIfPasswordFillRequestedInNonPasswordField) {
+  createAllPasswordsController(FocusedFieldType::kFillableUsernameField);
+  EXPECT_CALL(driver(), FillIntoFocusedField(_, _)).Times(0);
+
+  all_passwords_controller()->OnCredentialSelected(
+      kUsername1, kPassword, RequestsToFillPassword(true));
 }
diff --git a/chrome/browser/policy/device_management_service_configuration.cc b/chrome/browser/policy/device_management_service_configuration.cc
index e6424ae7..9f1274e 100644
--- a/chrome/browser/policy/device_management_service_configuration.cc
+++ b/chrome/browser/policy/device_management_service_configuration.cc
@@ -58,13 +58,13 @@
   chromeos::system::StatisticsProvider* provider =
       chromeos::system::StatisticsProvider::GetInstance();
 
-  std::string hwclass;
-  if (!provider->GetMachineStatistic(chromeos::system::kHardwareClassKey,
-                                     &hwclass)) {
+  const absl::optional<base::StringPiece> hwclass =
+      provider->GetMachineStatistic(chromeos::system::kHardwareClassKey);
+  if (!hwclass) {
     LOG(ERROR) << "Failed to get machine information";
   }
   os_name += ",CrOS," + base::SysInfo::GetLsbReleaseBoard();
-  os_hardware += "," + hwclass;
+  os_hardware += "," + std::string(hwclass.value_or(""));
 #endif
 
   std::string os_version("-");
diff --git a/chrome/browser/policy/networking/device_network_configuration_updater_ash.cc b/chrome/browser/policy/networking/device_network_configuration_updater_ash.cc
index dbc2d700..38b5f03 100644
--- a/chrome/browser/policy/networking/device_network_configuration_updater_ash.cc
+++ b/chrome/browser/policy/networking/device_network_configuration_updater_ash.cc
@@ -122,8 +122,9 @@
   // expansions.
   base::flat_map<std::string, std::string> substitutions;
   substitutions[::onc::substitutes::kDeviceSerialNumber] =
-      chromeos::system::StatisticsProvider::GetInstance()
-          ->GetEnterpriseMachineID();
+      std::string(chromeos::system::StatisticsProvider::GetInstance()
+                      ->GetMachineID()
+                      .value_or(""));
   substitutions[::onc::substitutes::kDeviceAssetId] =
       device_asset_id_fetcher_.Run();
 
diff --git a/chrome/browser/privacy_sandbox/android/BUILD.gn b/chrome/browser/privacy_sandbox/android/BUILD.gn
index af4b8667..f086bbb13 100644
--- a/chrome/browser/privacy_sandbox/android/BUILD.gn
+++ b/chrome/browser/privacy_sandbox/android/BUILD.gn
@@ -31,6 +31,7 @@
     "java/src/org/chromium/chrome/browser/privacy_sandbox/SpamFraudFragment.java",
     "java/src/org/chromium/chrome/browser/privacy_sandbox/Topic.java",
     "java/src/org/chromium/chrome/browser/privacy_sandbox/TopicPreference.java",
+    "java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeEEAV4.java",
   ]
   deps = [
     ":java_resources",
@@ -102,11 +103,14 @@
     "java/res/drawable-night/privacy_sandbox_illustration.xml",
     "java/res/drawable/privacy_sandbox_dialog_illustration.xml",
     "java/res/drawable/privacy_sandbox_illustration.xml",
+    "java/res/drawable/privacy_sandbox_notice_eea_illustration_v4.xml",
     "java/res/layout/privacy_sandbox_consent.xml",
     "java/res/layout/privacy_sandbox_consent_dropdown.xml",
     "java/res/layout/privacy_sandbox_header.xml",
     "java/res/layout/privacy_sandbox_notice.xml",
     "java/res/layout/privacy_sandbox_notice_bottom_sheet.xml",
+    "java/res/layout/privacy_sandbox_notice_eea_dropdown_v4.xml",
+    "java/res/layout/privacy_sandbox_notice_eea_v4.xml",
     "java/res/values/dimens.xml",
     "java/res/xml/ad_measurement_preference.xml",
     "java/res/xml/ad_personalization_preference.xml",
diff --git a/chrome/browser/privacy_sandbox/android/java/res/drawable/privacy_sandbox_notice_eea_illustration_v4.xml b/chrome/browser/privacy_sandbox/android/java/res/drawable/privacy_sandbox_notice_eea_illustration_v4.xml
new file mode 100644
index 0000000..14d2029
--- /dev/null
+++ b/chrome/browser/privacy_sandbox/android/java/res/drawable/privacy_sandbox_notice_eea_illustration_v4.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2022 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="155dp"
+    android:height="124dp"
+    android:viewportWidth="155"
+    android:viewportHeight="124">
+  <path
+      android:pathData="M132.02,0L155,10.34V25.97C155,41.01 145.22,54.87 132,59C118.8,54.87 109,41.01 109,25.97V10.34L132.02,0Z"
+      android:fillColor="#34A853"/>
+  <path
+      android:pathData="M16,93V77.09C16,72.08 20.26,68 25.5,68C30.74,68 35,72.08 35,77.09V83.86"
+      android:strokeWidth="10.7135"
+      android:fillColor="#00000000"
+      android:strokeColor="#FBBC04"/>
+  <path
+      android:pathData="M50,88H0V124H50V88Z"
+      android:fillColor="#FBBC04"/>
+  <path
+      android:pathData="M51,19C53.76,19 56,16.76 56,14C56,11.24 53.76,9 51,9C48.24,9 46,11.24 46,14C46,16.76 48.24,19 51,19Z"
+      android:fillColor="#FBBC04"/>
+  <path
+      android:pathData="M38,105C40.76,105 43,102.76 43,100C43,97.24 40.76,95 38,95C35.24,95 33,97.24 33,100C33,102.76 35.24,105 38,105Z"
+      android:fillColor="#3982F8"/>
+  <path
+      android:pathData="M68.01,119.38L69.39,110.9C69.48,110.32 70.04,109.92 70.62,110.01L79.1,111.39C79.68,111.48 80.08,112.04 79.99,112.62L78.61,121.1C78.52,121.68 77.96,122.08 77.38,121.99L68.9,120.61C68.32,120.52 67.92,119.98 68.01,119.38Z"
+      android:fillColor="#34A853"/>
+  <path
+      android:pathData="M109.84,105H99.16C98.27,105 97.72,105.91 98.15,106.64L103.49,115.45C103.95,116.18 105.05,116.18 105.51,115.45L110.85,106.64C111.28,105.91 110.73,105 109.84,105Z"
+      android:fillColor="#3982F8"/>
+  <path
+      android:pathData="M26.29,47.69L33.66,40.71C34.27,40.12 34.02,39.1 33.2,38.87L23.41,36.04C22.58,35.82 21.83,36.54 22.03,37.36L24.46,47.17C24.67,47.99 25.67,48.28 26.29,47.69Z"
+      android:fillColor="#34A853"/>
+  <path
+      android:pathData="M129.45,89.62C128.3,92.4 125.13,93.74 122.36,92.58C119.59,91.43 118.26,88.24 119.41,85.46L123.55,75.38C124.7,72.6 127.87,71.26 130.64,72.42C133.41,73.57 134.74,76.76 133.59,79.54L129.45,89.62Z"
+      android:fillColor="#FBBC04"/>
+  <path
+      android:pathData="M125.82,42L134.18,41.2C134.88,41.14 135.23,40.4 134.83,39.86L125.02,27.35C124.84,27.11 124.51,26.98 124.18,27L115.82,27.8C115.12,27.86 114.77,28.6 115.17,29.14L124.98,41.65C125.16,41.89 125.49,42.02 125.82,42Z"
+      android:fillColor="#FBBC04"/>
+  <path
+      android:pathData="M79.8,11.26L87.2,12.37L87.88,12.48L91.34,12.99C91.66,13.03 91.99,12.93 92.17,12.69L94.8,9.72C95.01,9.49 95.05,9.19 94.94,8.91L93.45,5.32C93.34,5.04 93.08,4.85 92.75,4.78L89.29,4.27L88.62,4.16L81.24,3.05C78.77,2.69 76.45,4.23 76.06,6.49C75.66,8.76 77.33,10.9 79.8,11.26Z"
+      android:fillColor="#3982F8"/>
+  <group>
+    <clip-path
+        android:pathData="M49,31h60v60h-60z"/>
+    <path
+        android:pathData="M79,76C87.28,76 94,69.28 94,61C94,52.71 87.28,46 79,46C70.72,46 64,52.71 64,61C64,69.28 70.72,76 79,76Z"
+        android:fillColor="#ffffff"/>
+    <path
+        android:pathData="M66.01,68.5L53.02,46C50.39,50.56 49,55.74 49,61C49,66.27 50.39,71.44 53.02,76C55.65,80.56 59.44,84.35 64,86.98C68.56,89.61 73.74,91 79,91L91.99,68.5V68.5C90.67,70.78 88.78,72.67 86.5,73.99C84.22,75.31 81.63,76 79,76C76.37,76 73.78,75.31 71.5,73.99C69.22,72.67 67.33,70.78 66.01,68.5Z">
+      <aapt:attr name="android:fillColor">
+        <gradient
+            android:startX="82.25"
+            android:startY="89.12"
+            android:endX="56.27"
+            android:endY="44.13"
+            android:type="linear">
+          <item android:offset="0" android:color="#FF1E8E3E"/>
+          <item android:offset="1" android:color="#FF34A853"/>
+        </gradient>
+      </aapt:attr>
+    </path>
+    <path
+        android:pathData="M91.99,68.5L79,91C84.27,91 89.44,89.61 94,86.98C98.56,84.35 102.35,80.56 104.98,76C107.61,71.44 109,66.26 109,61C109,55.73 107.61,50.56 104.98,46H79L79,46C81.63,46 84.22,46.69 86.5,48.01C88.78,49.32 90.67,51.22 91.99,53.5C93.31,55.78 94,58.37 94,61C94,63.63 93.31,66.22 91.99,68.5H91.99Z">
+      <aapt:attr name="android:fillColor">
+        <gradient
+            android:startX="74.62"
+            android:startY="91.08"
+            android:endX="100.6"
+            android:endY="46.08"
+            android:type="linear">
+          <item android:offset="0" android:color="#FFFCC934"/>
+          <item android:offset="1" android:color="#FFFBBC04"/>
+        </gradient>
+      </aapt:attr>
+    </path>
+    <path
+        android:pathData="M79,72.88C85.56,72.88 90.88,67.56 90.88,61C90.88,54.44 85.56,49.13 79,49.13C72.44,49.13 67.13,54.44 67.13,61C67.13,67.56 72.44,72.88 79,72.88Z"
+        android:fillColor="#1A73E8"/>
+    <path
+        android:pathData="M79,46H104.98C102.34,41.44 98.56,37.65 94,35.02C89.44,32.39 84.26,31 79,31C73.73,31 68.56,32.39 64,35.02C59.44,37.65 55.65,41.44 53.02,46L66.01,68.5L66.01,68.5C64.7,66.22 64,63.64 64,61C64,58.37 64.69,55.78 66.01,53.5C67.32,51.22 69.22,49.33 71.5,48.01C73.78,46.69 76.37,46 79,46Z">
+      <aapt:attr name="android:fillColor">
+        <gradient
+            android:startX="53.02"
+            android:startY="49.75"
+            android:endX="104.98"
+            android:endY="49.75"
+            android:type="linear">
+          <item android:offset="0" android:color="#FFD93025"/>
+          <item android:offset="1" android:color="#FFEA4335"/>
+        </gradient>
+      </aapt:attr>
+    </path>
+  </group>
+</vector>
diff --git a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_dropdown_v4.xml b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_dropdown_v4.xml
new file mode 100644
index 0000000..df64d22c
--- /dev/null
+++ b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_dropdown_v4.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2022 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/privacy_sandbox_notice_eea_dropdown"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView
+        android:layout_marginBottom="@dimen/promo_between_text_margin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/privacy_sandbox_m1_notice_eea_learn_more_heading_1"
+        style="@style/TextAppearance.TextMediumThick.Primary" />
+
+    <TextView
+        android:layout_marginBottom="@dimen/promo_between_text_margin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/privacy_sandbox_m1_notice_eea_learn_more_description"
+        style="@style/TextAppearance.TextMedium.Secondary" />
+
+    <TextView
+        android:layout_marginBottom="@dimen/promo_between_text_margin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/privacy_sandbox_m1_notice_eea_learn_more_heading_2"
+        style="@style/TextAppearance.TextMediumThick.Primary" />
+
+    <TextView
+        android:id="@+id/privacy_sandbox_m1_notice_eea_learn_more_bullet_one"
+        android:layout_marginBottom="@dimen/promo_between_text_margin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        style="@style/TextAppearance.TextMedium.Secondary" />
+
+    <TextView
+        android:id="@+id/privacy_sandbox_m1_notice_eea_learn_more_bullet_two"
+        android:layout_marginBottom="@dimen/promo_between_text_margin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        style="@style/TextAppearance.TextMedium.Secondary" />
+
+    <TextView
+        android:id="@+id/privacy_sandbox_m1_notice_eea_learn_more_bullet_three"
+        android:layout_marginBottom="@dimen/list_item_default_margin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        style="@style/TextAppearance.TextMedium.Secondary" />
+
+</LinearLayout>
diff --git a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v4.xml b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v4.xml
new file mode 100644
index 0000000..ebe02c6
--- /dev/null
+++ b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v4.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright 2022 The Chromium Authors
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/privacy_sandbox_dialog"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <org.chromium.components.browser_ui.widget.BoundedLinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical"
+        app:maxWidthLandscape="@dimen/privacy_sandbox_dialog_max_width"
+        app:maxWidthPortrait="@dimen/privacy_sandbox_dialog_max_width">
+
+        <org.chromium.components.browser_ui.widget.FadingEdgeScrollView
+            android:id="@+id/privacy_sandbox_notice_eea_scroll_view"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1">
+
+            <LinearLayout
+                android:id="@+id/privacy_sandbox_notice_eea_content"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_marginHorizontal="@dimen/list_item_default_margin"
+                android:layout_gravity="center_vertical"
+                android:gravity="center_horizontal"
+                android:orientation="vertical">
+
+                <ImageView
+                    android:layout_marginTop="@dimen/privacy_sandbox_dialog_illustration_margin_top"
+                    android:layout_marginBottom="@dimen/privacy_sandbox_dialog_illustration_margin_bottom"
+                    android:layout_height="wrap_content"
+                    android:layout_width="wrap_content"
+                    app:srcCompat="@drawable/privacy_sandbox_notice_eea_illustration_v4"
+                    android:importantForAccessibility="no" />
+
+                <TextView
+                    android:id="@+id/privacy_sandbox_notice_title"
+                    android:layout_marginBottom="@dimen/list_item_default_margin"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/privacy_sandbox_m1_notice_eea_title"
+                    android:gravity="center"
+                    style="@style/TextAppearance.Headline.Primary" />
+
+                <TextView
+                    android:layout_marginBottom="@dimen/list_item_default_margin"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/privacy_sandbox_m1_notice_eea_description_1"
+                    style="@style/TextAppearance.TextMedium.Secondary" />
+
+                <TextView
+                    android:id="@+id/privacy_sandbox_m1_notice_eea_bullet_one"
+                    android:layout_marginBottom="@dimen/list_item_default_margin"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/TextAppearance.TextMedium.Secondary" />
+
+                <TextView
+                    android:id="@+id/privacy_sandbox_m1_notice_eea_bullet_two"
+                    android:layout_marginBottom="@dimen/list_item_default_margin"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/TextAppearance.TextMedium.Secondary" />
+
+                <LinearLayout
+                    android:layout_marginBottom="@dimen/list_item_default_margin"
+                    android:id="@+id/dropdown_element"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center"
+                    android:orientation="horizontal">
+
+                    <TextView
+                        android:layout_weight="1"
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:minHeight="@dimen/privacy_sandbox_notice_eea_dropdown_button_height"
+                        android:text="@string/privacy_sandbox_m1_notice_eea_learn_more_expand_label"
+                        style="@style/TextAppearance.TextMedium.Secondary" />
+
+                    <org.chromium.ui.widget.CheckableImageView
+                        android:id="@+id/expand_arrow"
+                        android:layout_width="24dp"
+                        android:layout_height="@dimen/privacy_sandbox_notice_eea_dropdown_button_height"/>
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/dropdown_container"
+                    android:orientation="vertical"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:visibility="gone" />
+
+                <TextView
+                    android:layout_marginBottom="@dimen/privacy_sandbox_notice_margin_bottom"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text="@string/privacy_sandbox_m1_notice_eea_description_2"
+                    style="@style/TextAppearance.TextMedium.Secondary" />
+
+            </LinearLayout>
+
+        </org.chromium.components.browser_ui.widget.FadingEdgeScrollView>
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:weightSum="2"
+            android:layout_marginHorizontal="24dp">
+
+            <org.chromium.ui.widget.ButtonCompat
+                android:id="@+id/ack_button"
+                android:focusable="true"
+                android:layout_width="match_parent"
+                android:layout_weight="1"
+                android:layout_height="0dp"
+                android:layout_marginBottom="@dimen/privacy_sandbox_notice_button_margin_between"
+                android:text="@string/privacy_sandbox_m1_notice_eea_ack_button"
+                style="@style/FilledButton.Flat" />
+            <org.chromium.ui.widget.ButtonCompat
+                android:id="@+id/settings_button"
+                android:focusable="true"
+                android:layout_width="match_parent"
+                android:layout_weight="1"
+                android:layout_height="0dp"
+                android:layout_gravity="center_horizontal"
+                android:text="@string/privacy_sandbox_m1_notice_eea_settings_button"
+                style="@style/TextButton" />
+
+        </LinearLayout>
+    </org.chromium.components.browser_ui.widget.BoundedLinearLayout>
+</LinearLayout>
diff --git a/chrome/browser/privacy_sandbox/android/java/res/values/dimens.xml b/chrome/browser/privacy_sandbox/android/java/res/values/dimens.xml
index 5d47bdf..2cb6b95 100644
--- a/chrome/browser/privacy_sandbox/android/java/res/values/dimens.xml
+++ b/chrome/browser/privacy_sandbox/android/java/res/values/dimens.xml
@@ -14,4 +14,6 @@
   <dimen name="privacy_sandbox_consent_button_margin_between">8dp</dimen>
   <dimen name="privacy_sandbox_notice_button_margin_between">4dp</dimen>
   <dimen name="privacy_sandbox_consent_dropdown_button_height">24dp</dimen>
+  <dimen name="privacy_sandbox_notice_eea_dropdown_button_height">24dp</dimen>
+  <dimen name="privacy_sandbox_notice_margin_bottom">32dp</dimen>
 </resources>
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeEEAV4.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeEEAV4.java
new file mode 100644
index 0000000..dcda7e32
--- /dev/null
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/v4/PrivacySandboxDialogNoticeEEAV4.java
@@ -0,0 +1,200 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.privacy_sandbox.v4;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.text.SpannableString;
+import android.text.style.StyleSpan;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+import androidx.appcompat.content.res.AppCompatResources;
+import androidx.core.graphics.drawable.DrawableCompat;
+
+import org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxReferrer;
+import org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxSettingsFragmentV3;
+import org.chromium.chrome.browser.privacy_sandbox.R;
+import org.chromium.components.browser_ui.settings.SettingsLauncher;
+import org.chromium.ui.drawable.StateListDrawableBuilder;
+import org.chromium.ui.text.SpanApplier;
+import org.chromium.ui.widget.ButtonCompat;
+import org.chromium.ui.widget.CheckableImageView;
+import org.chromium.ui.widget.ChromeBulletSpan;
+
+/**
+ * Dialog in the form of a notice shown for the Privacy Sandbox.
+ */
+public class PrivacySandboxDialogNoticeEEAV4 extends Dialog implements View.OnClickListener {
+    private Context mContext;
+    private SettingsLauncher mSettingsLauncher;
+    private View mContentView;
+
+    private final CheckableImageView mExpandArrowView;
+    private LinearLayout mDropdownContainer;
+
+    public PrivacySandboxDialogNoticeEEAV4(
+            Context context, @NonNull SettingsLauncher settingsLauncher) {
+        super(context, R.style.ThemeOverlay_BrowserUI_Fullscreen);
+        mContext = context;
+        getContext();
+        mSettingsLauncher = settingsLauncher;
+        mContentView =
+                LayoutInflater.from(context).inflate(R.layout.privacy_sandbox_notice_eea_v4, null);
+        setContentView(mContentView);
+
+        ButtonCompat ackButton = mContentView.findViewById(R.id.ack_button);
+        ackButton.setOnClickListener(this);
+        ButtonCompat settingsButton = mContentView.findViewById(R.id.settings_button);
+        settingsButton.setOnClickListener(this);
+
+        // Controls for the expanding section.
+        LinearLayout dropdownElement = mContentView.findViewById(R.id.dropdown_element);
+        dropdownElement.setOnClickListener(this);
+        mDropdownContainer = mContentView.findViewById(R.id.dropdown_container);
+        mExpandArrowView = mContentView.findViewById(R.id.expand_arrow);
+        mExpandArrowView.setImageDrawable(createExpandDrawable(context));
+        mExpandArrowView.setChecked(isDropdownExpanded());
+
+        setBulletsDescription();
+    }
+
+    @Override
+    public void show() {
+        // TODO(b/254408752): Report show action.
+        super.show();
+    }
+
+    // OnClickListener:
+    @Override
+    public void onClick(View view) {
+        int id = view.getId();
+        if (id == R.id.ack_button) {
+            // TODO(b/254408752): Report notice acknowledge action.
+            dismiss();
+        } else if (id == R.id.settings_button) {
+            // TODO(b/254408752): Report open settings action.
+            dismiss();
+            // TODO(b/254408752): Launch PrivacySandboxSettingsFragmentV4 when available.
+            PrivacySandboxSettingsFragmentV3.launchPrivacySandboxSettings(
+                    mContext, mSettingsLauncher, PrivacySandboxReferrer.PRIVACY_SANDBOX_NOTICE);
+        } else if (id == R.id.dropdown_element) {
+            var content = mContentView.findViewById(R.id.privacy_sandbox_notice_eea_content);
+            ScrollView scrollView =
+                    mContentView.findViewById(R.id.privacy_sandbox_notice_eea_scroll_view);
+
+            if (isDropdownExpanded()) {
+                // TODO(b/254408752): Report notice eea more info section closed action.
+                mDropdownContainer.setVisibility(View.GONE);
+                mDropdownContainer.removeAllViews();
+
+                ((FrameLayout.LayoutParams) content.getLayoutParams()).gravity =
+                        Gravity.CENTER_VERTICAL;
+            } else {
+                mDropdownContainer.setVisibility(View.VISIBLE);
+                // TODO(b/254408752): Report notice eea more info section opened action.
+                LayoutInflater.from(mContext).inflate(
+                        R.layout.privacy_sandbox_notice_eea_dropdown_v4, mDropdownContainer);
+
+                setDropdownDescription(mDropdownContainer,
+                        R.id.privacy_sandbox_m1_notice_eea_learn_more_bullet_one,
+                        R.string.privacy_sandbox_m1_notice_eea_learn_more_bullet_1);
+                setDropdownDescription(mDropdownContainer,
+                        R.id.privacy_sandbox_m1_notice_eea_learn_more_bullet_two,
+                        R.string.privacy_sandbox_m1_notice_eea_learn_more_bullet_2);
+                setDropdownDescription(mDropdownContainer,
+                        R.id.privacy_sandbox_m1_notice_eea_learn_more_bullet_three,
+                        R.string.privacy_sandbox_m1_notice_eea_learn_more_bullet_3);
+
+                ((FrameLayout.LayoutParams) content.getLayoutParams()).gravity = Gravity.TOP;
+
+                scrollView.post(() -> {
+                    scrollView.setSmoothScrollingEnabled(true);
+                    scrollView.fullScroll(ScrollView.FOCUS_DOWN);
+                });
+            }
+
+            mExpandArrowView.setChecked(isDropdownExpanded());
+            updateDropdownControlContentDescription(view);
+            view.announceForAccessibility(getContext().getResources().getString(isDropdownExpanded()
+                            ? R.string.accessibility_expanded_group
+                            : R.string.accessibility_collapsed_group));
+        }
+    }
+
+    private void setDropdownDescription(
+            ViewGroup container, @IdRes int viewId, @StringRes int stringRes) {
+        TextView view = container.findViewById(viewId);
+        SpannableString spannableString =
+                SpanApplier.applySpans(getContext().getResources().getString(stringRes),
+                        new SpanApplier.SpanInfo(
+                                "<b>", "</b>", new StyleSpan(android.graphics.Typeface.BOLD)));
+        spannableString.setSpan(new ChromeBulletSpan(getContext()), 0, spannableString.length(), 0);
+        view.setText(spannableString);
+    }
+
+    private void setBulletsDescription() {
+        TextView bulletView1 =
+                mContentView.findViewById(R.id.privacy_sandbox_m1_notice_eea_bullet_one);
+        TextView bulletView2 =
+                mContentView.findViewById(R.id.privacy_sandbox_m1_notice_eea_bullet_two);
+
+        SpannableString bullet1 = new SpannableString(getContext().getResources().getString(
+                R.string.privacy_sandbox_m1_notice_eea_bullet_1));
+        SpannableString bullet2 = new SpannableString(getContext().getResources().getString(
+                R.string.privacy_sandbox_m1_notice_eea_bullet_2));
+
+        bullet1.setSpan(new ChromeBulletSpan(getContext()), 0, bullet1.length(), 0);
+        bulletView1.setText(bullet1);
+        bullet2.setSpan(new ChromeBulletSpan(getContext()), 0, bullet2.length(), 0);
+        bulletView2.setText(bullet2);
+    }
+
+    private void updateDropdownControlContentDescription(View dropdownElement) {
+        String dropdownButtonText = getContext().getResources().getString(
+                R.string.privacy_sandbox_m1_notice_eea_learn_more_expand_label);
+
+        String collapseOrExpandedText = getContext().getResources().getString(isDropdownExpanded()
+                        ? R.string.accessibility_expanded_group
+                        : R.string.accessibility_collapsed_group);
+
+        String description =
+                getContext().getResources().getString(R.string.concat_two_strings_with_periods,
+                        dropdownButtonText, collapseOrExpandedText);
+        dropdownElement.setContentDescription(description);
+    }
+
+    private static Drawable createExpandDrawable(Context context) {
+        StateListDrawableBuilder builder = new StateListDrawableBuilder(context);
+        StateListDrawableBuilder.State checked = builder.addState(
+                R.drawable.ic_expand_less_black_24dp, android.R.attr.state_checked);
+        StateListDrawableBuilder.State unchecked =
+                builder.addState(R.drawable.ic_expand_more_black_24dp);
+        builder.addTransition(
+                checked, unchecked, R.drawable.transition_expand_less_expand_more_black_24dp);
+        builder.addTransition(
+                unchecked, checked, R.drawable.transition_expand_more_expand_less_black_24dp);
+
+        Drawable tintableDrawable = DrawableCompat.wrap(builder.build());
+        DrawableCompat.setTintList(tintableDrawable,
+                AppCompatResources.getColorStateList(
+                        context, R.color.default_icon_color_tint_list));
+        return tintableDrawable;
+    }
+
+    private boolean isDropdownExpanded() {
+        return mDropdownContainer != null && mDropdownContainer.getVisibility() == View.VISIBLE;
+    }
+}
diff --git a/chrome/browser/reduce_accept_language/reduce_accept_language_browsertest.cc b/chrome/browser/reduce_accept_language/reduce_accept_language_browsertest.cc
index a06a3bb..e0d5e5a 100644
--- a/chrome/browser/reduce_accept_language/reduce_accept_language_browsertest.cc
+++ b/chrome/browser/reduce_accept_language/reduce_accept_language_browsertest.cc
@@ -758,6 +758,31 @@
 }
 
 IN_PROC_BROWSER_TEST_F(SameOriginReduceAcceptLanguageBrowserTest,
+                       SubresourceRequestNoRestart) {
+  base::HistogramTester histograms;
+  SetTestOptions({.content_language_in_parent = "es",
+                  .variants_in_parent = "accept-language=(es en-US)",
+                  .vary_in_parent = "accept-language"},
+                 {SameOriginImgUrl(), SimpleImgUrl()});
+  SetPrefsAcceptLanguage({"es", "en-us"});
+
+  // Initial request.
+  NavigateAndVerifyAcceptLanguageOfLastRequest(SameOriginImgUrl(), "es");
+  EXPECT_EQ(LastRequestUrl().path(), "/subresource_simple.jpg");
+
+  metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting();
+  // Ensure no restart happens.
+  histograms.ExpectBucketCount(
+      "ReduceAcceptLanguage.AcceptLanguageNegotiationRestart",
+      /*=kNavigationRestarted=*/3, 0);
+  // Total two different url requests:
+  // * same_origin_img.html: one fetch for initially adding header.
+  // * subresource_simple.jpg: no prefs read, it directly reads from the
+  // navigation commit language.
+  histograms.ExpectTotalCount("ReduceAcceptLanguage.FetchLatency", 1);
+}
+
+IN_PROC_BROWSER_TEST_F(SameOriginReduceAcceptLanguageBrowserTest,
                        SiteLanguageMatchMultipleLanguage) {
   base::HistogramTester histograms;
 
@@ -2296,7 +2321,7 @@
 
     SetOriginTrialFirstPartyToken(kValidFirstPartyToken);
 
-    // initial request.
+    // Initial request.
     NavigateAndVerifyAcceptLanguageOfLastRequest(url, "en-US");
     EXPECT_EQ(LastRequestUrl().path(), last_request_path);
 
@@ -2322,7 +2347,8 @@
   }
 
   void VerifySameOriginRequestNoRestart(
-      const absl::optional<std::string>& expect_accept_language) {
+      const absl::optional<std::string>& expect_accept_language,
+      int expect_fetch_count) {
     base::HistogramTester histograms;
     // The first request won't add the Accept-Language in navigation request
     // since it can't verify the origin trial.
@@ -2333,8 +2359,8 @@
     histograms.ExpectBucketCount(
         "ReduceAcceptLanguage.AcceptLanguageNegotiationRestart",
         /*=kNavigationRestarted=*/3, 0);
-    // One Prefs fetch when initially adding header.
-    histograms.ExpectTotalCount("ReduceAcceptLanguage.FetchLatency", 1);
+    histograms.ExpectTotalCount("ReduceAcceptLanguage.FetchLatency",
+                                expect_fetch_count);
     // Expect one storage update when response has a valid origin token.
     histograms.ExpectTotalCount("ReduceAcceptLanguage.StoreLatency", 1);
   }
@@ -2378,9 +2404,14 @@
 
   // The first request won't add the Accept-Language in navigation request
   // since it can't verify the origin trial.
-  VerifySameOriginRequestNoRestart(absl::nullopt);
+  // One fetch for initially checking whether need to add reduce Accept-Language
+  // header and one fetch for navigation request commits when visiting
+  // same_origin_request.html.
+  VerifySameOriginRequestNoRestart(/*expect_accept_language=*/absl::nullopt,
+                                   /*expect_fetch_count=*/2);
   // The second request should send out with the persist language.
-  VerifySameOriginRequestNoRestart("es");
+  VerifySameOriginRequestNoRestart(/*expect_accept_language=*/"es",
+                                   /*expect_fetch_count=*/1);
   VerifySameOriginRequestAfterTokenInvalid("es");
 }
 
@@ -2419,7 +2450,8 @@
 
     // The second request should send out with the first matched negotiation
     // language en-us.
-    VerifySameOriginRequestNoRestart("en-us");
+    VerifySameOriginRequestNoRestart(/*expect_accept_language=*/"en-us",
+                                     /*expect_fetch_count=*/1);
     VerifySameOriginRequestAfterTokenInvalid("en-us");
   }
 }
@@ -2435,9 +2467,11 @@
 
   // The first request won't add the Accept-Language in navigation request
   // since it can't verify the origin trial.
-  VerifySameOriginRequestNoRestart(absl::nullopt);
+  VerifySameOriginRequestNoRestart(/*expect_accept_language=*/absl::nullopt,
+                                   /*expect_fetch_count=*/2);
   // The second request should send out with the persist language zh.
-  VerifySameOriginRequestNoRestart("zh");
+  VerifySameOriginRequestNoRestart(/*expect_accept_language=*/"zh",
+                                   /*expect_fetch_count=*/1);
   VerifySameOriginRequestAfterTokenInvalid("zh");
 }
 
@@ -2461,6 +2495,46 @@
       /*expect_fetch_count=*/2);
 }
 
+IN_PROC_BROWSER_TEST_F(SameOriginReduceAcceptLanguageOTBrowserTest,
+                       SubresourceRequestNoRestart) {
+  base::HistogramTester histograms;
+  SetTestOptions({.content_language_in_parent = "es",
+                  .variants_in_parent = "accept-language=(es en-US)",
+                  .vary_in_parent = "accept-language"},
+                 {{SameOriginImgUrl(), SimpleImgUrl()}});
+  SetOriginTrialFirstPartyToken(kValidFirstPartyToken);
+  SetPrefsAcceptLanguage({"es", "ja"});
+
+  // Initial request.
+  NavigateAndVerifyAcceptLanguageOfLastRequest(SameOriginImgUrl(), "es");
+  EXPECT_EQ(LastRequestUrl().path(), "/subresource_simple.jpg");
+
+  metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting();
+  // Ensure no restart happens.
+  histograms.ExpectBucketCount(
+      "ReduceAcceptLanguage.AcceptLanguageNegotiationRestart",
+      /*=kNavigationRestarted=*/3, 0);
+  // Total two different url requests:
+  // * same_origin_img.html: one fetch for initially adding header and one for
+  // navigation request commits.
+  // * subresource_simple.jpg: no prefs read, it directly reads from the
+  // navigation commit language.
+  histograms.ExpectTotalCount("ReduceAcceptLanguage.FetchLatency", 2);
+
+  // Verify navigator.languages only returns an array length 1 if
+  // has valid origin trial token.
+  VerifyNavigatorLanguages({"es"});
+
+  // Second request with invalid origin token.
+  SetOriginTrialFirstPartyToken(kInvalidOriginToken);
+  // No Accept-Language added in content navigation request, network layer
+  // will add user's Accept-Language list.
+  NavigateAndVerifyAcceptLanguageOfLastRequest(SameOriginImgUrl(),
+                                               absl::nullopt);
+  EXPECT_EQ(LastRequestUrl().path(), "/subresource_simple.jpg");
+  VerifyNavigatorLanguages({"es", "ja"});
+}
+
 // Browser tests verify third party origin trial. Currently we are not
 // supporting third-party origin trial.
 class ThirdPartyReduceAcceptLanguageOTBrowserTest
@@ -2502,10 +2576,11 @@
       "ReduceAcceptLanguage.AcceptLanguageNegotiationRestart",
       /*=kNavigationRestarted=*/3, 0);
   // One fetch for initially checking whether need to add reduce Accept-Language
-  // header when visiting the following two URLs:
+  // header and one fetch for navigation request commits when visiting the
+  // following two URLs:
   // * cross_origin_iframe_url.
   // * simple_3p_request_url.
-  histograms.ExpectTotalCount("ReduceAcceptLanguage.FetchLatency", 2);
+  histograms.ExpectTotalCount("ReduceAcceptLanguage.FetchLatency", 4);
   // No persist reduce accept language happens.
   histograms.ExpectTotalCount("ReduceAcceptLanguage.StoreLatency", 0);
 
@@ -2548,11 +2623,12 @@
       "ReduceAcceptLanguage.AcceptLanguageNegotiationRestart",
       /*=kNavigationRestarted=*/3, 0);
   // One fetch for initially checking whether need to add reduce Accept-Language
-  // header when visiting the following three URLs:
+  // header and one fetch for navigation request commits when visiting the
+  // following three URLs:
   // * cross_origin_iframe_with_subrequests_url.
   // * iframe_3p_request_url.
   // * other_site_b_basic_request_url.
-  histograms.ExpectTotalCount("ReduceAcceptLanguage.FetchLatency", 3);
+  histograms.ExpectTotalCount("ReduceAcceptLanguage.FetchLatency", 6);
   // No persist reduce accept language happens.
   histograms.ExpectTotalCount("ReduceAcceptLanguage.StoreLatency", 0);
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
index 8bed595..9d0fb888 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/classic_background.js
@@ -86,6 +86,7 @@
 
   /** Initializes classic background object. */
   static init() {
+    ExtensionBridge.init();
     const background = new ChromeVoxBackground();
   }
 }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/extension_bridge.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/extension_bridge.js
index 6652b5c..bb7a617 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/extension_bridge.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/extension_bridge.js
@@ -6,17 +6,13 @@
  * @fileoverview Bridge to aid in communication between a Chrome
  * background page and content script.
  *
- * It automatically figures out where it's being run and initializes itself
- * appropriately. Then just call send() to send a message from the background
- * to the page, and addMessageListener() to provide a message listener.
+ * Use addMessageListener() to provide a message listener.
  * Messages can be any object that can be serialized using JSON.
  */
 
 export class ExtensionBridge {
   /** @private */
   constructor() {
-    /** @private {!Array<!function()>} */
-    this.disconnectListeners_ = [];
     /** @private {!Array<!function(Object, Port)>} */
     this.messageListeners_ = [];
     /** @private {number} */
@@ -28,6 +24,16 @@
   }
 
   /**
+   * Initialize the extension bridge in a background page context by registering
+   * a listener for connections from the content script.
+   * @private
+   */
+  init_() {
+    chrome.extension.onConnect.addListener(
+        port => this.onConnectHandler_(port));
+  }
+
+  /**
    * Initialize the extension bridge. Dynamically figure out whether we're in
    * the background page, content script, or in a page, and call the
    * corresponding function for more specific initialization.
@@ -49,30 +55,6 @@
   }
 
   /**
-   * Provide a function to be called when the connection is
-   * disconnected.
-   * @param {function()} listener The listener.
-   */
-  static addDisconnectListener(listener) {
-    ExtensionBridge.instance.disconnectListeners_.push(listener);
-  }
-
-  /** Removes all message listeners from the extension bridge. */
-  static removeMessageListeners() {
-    ExtensionBridge.instance.messageListeners_ = [];
-  }
-
-  /**
-   * Initialize the extension bridge in a background page context by registering
-   * a listener for connections from the content script.
-   * @private
-   */
-  init_() {
-    chrome.extension.onConnect.addListener(
-        port => this.onConnectHandler_(port));
-  }
-
-  /**
    * Listens for connections from the content scripts.
    * @param {!Port} port
    * @private
@@ -118,19 +100,11 @@
       }
     }
   }
-
-  /**
-   * Send a message from the background page to the content script of the
-   * current selected tab.
-   *
-   * @param {Object} message The message to send.
-   */
-  static send(message) {
-    ExtensionBridge.instance.portCache_.forEach(
-        port => port.postMessage(message));
-  }
 }
 
+/** @private {ExtensionBridge} */
+ExtensionBridge.instance;
+
 // Keep these constants in sync with injected/extension_bridge.js.
 
 /**
@@ -152,11 +126,3 @@
  * @const {string}
  */
 ExtensionBridge.PONG_MSG = 'ExtensionBridge.Pong';
-
-/** @const {number} */
-ExtensionBridge.MAX_PING_ATTEMPTS = 5;
-
-/** @const {number} */
-ExtensionBridge.TIME_BETWEEN_PINGS_MS = 500;
-
-ExtensionBridge.init();
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb
index b0a6e6e4..eec711c6 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{ዶላር}one{# የዶላር ምልክቶች}other{# የዶላር ምልክቶች}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">ድገም</translation>
 <translation id="366419593095697301">ፍንጭ፦ ከዚህ አጋዥ ስልጠና መውጣት ከፈለጉ Escapeን ይጫኑ።</translation>
 <translation id="3676062394766691318">መሣሪያዎን ካቀናበሩት በኋላ Search + O፣ ከዚያ T በመጫን ተመልሰው መጥተው ተጨማሪ አጋዥ ስልጠናዎችን ማየት ይችላሉ።</translation>
 <translation id="3681531118904532409">ፓፓያ ዊፕ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
index f69dd906..8869306 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
@@ -424,6 +424,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{علامة دولار واحدة}zero{# dollar signs}two{علامتا دولار (#)}few{# علامات دولار}many{# علامة دولار}other{# من علامات الدولار}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">تكرار</translation>
 <translation id="366419593095697301">‏معلومة: اضغط على مفتاح Escape إذا أردت الخروج من هذا البرنامج التعليمي.</translation>
 <translation id="3676062394766691318">‏بعد إعداد الجهاز، يمكنك الرجوع إلى هذه الصفحة والاطّلاع على مزيد من البرامج التعليمية عن طريق الضغط على مفتاح البحث + حرف O، ثم الضغط على حرف T.</translation>
 <translation id="3681531118904532409">أصفر باهت</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb
index 7416cf5..daf93be9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_az.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollar}other{# dollar işarəsi}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">təkrarlayın</translation>
 <translation id="366419593095697301">İpucu: Bu təlimatdan çıxmaq istəsəniz, Escape düyməsinə basın.</translation>
 <translation id="3676062394766691318">Cihazınızı ayarladıqdan sonra geri qayıda və Axtarış + O üzərinə, daha sonra T üzərinə basmaqla digər təlimatlara baxa bilərsiniz.</translation>
 <translation id="3681531118904532409">Sarımtıl</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
index 04bf4a5..61b6d0f 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_da.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollar}one{# dollartegn}other{# dollartegn}}</translation>
 <translation id="3659787053479271466">advar</translation>
+<translation id="3661265561216135784">gentag</translation>
 <translation id="366419593095697301">Tip! Tryk på Esc, hvis du vil forlade dette selvstudie.</translation>
 <translation id="3676062394766691318">Når du har konfigureret din enhed, kan du komme tilbage og se flere selvstudier ved at trykke på søgetasten+O efterfulgt af T.</translation>
 <translation id="3681531118904532409">Lys varm orange</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb
index 258f4c4..c448fdc 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hu.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">jelölőnégyzet menüelem</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollárjel}other{# dollárjel}}</translation>
 <translation id="3659787053479271466">riaszt</translation>
+<translation id="3661265561216135784">ismétlés</translation>
 <translation id="366419593095697301">Tipp: Az útmutatóból az Escape gomb lenyomásával léphet ki.</translation>
 <translation id="3676062394766691318">Eszköze beállítása után visszatérhet, és további útmutatókat nézhet meg a Keresés + O, majd T billentyűparancs lenyomásával.</translation>
 <translation id="3681531118904532409">Papajahab</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
index bde8553..9a8c25c 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dolar}other{# tanda dolar}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">ulangi</translation>
 <translation id="366419593095697301">Petunjuk: Tekan Escape jika ingin keluar dari tutorial ini.</translation>
 <translation id="3676062394766691318">Setelah menyiapkan perangkat, Anda dapat kembali dan melihat tutorial lainnya dengan menekan Penelusuran + O, lalu T.</translation>
 <translation id="3681531118904532409">Papaya Whip</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_is.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_is.xtb
index e1647a84..bcd1734 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_is.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_is.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dollari}one{# dollaramerki}other{# dollaramerki}}</translation>
 <translation id="3659787053479271466">viðvörun</translation>
+<translation id="3661265561216135784">endurtaka</translation>
 <translation id="366419593095697301">Ábending: Ýttu á Escape ef þú vilt loka þessari leiðsögn.</translation>
 <translation id="3676062394766691318">Þegar uppsetningu tækisins er lokið geturðu komið aftur og skoðað fleiri leiðsagnir með því að ýta á leitarlykilinn + O og svo T.</translation>
 <translation id="3681531118904532409">Fölappelsínugulur</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
index 2dd9f29..81e0792c 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_km.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{ដុល្លារ}other{# សញ្ញាដុល្លារ}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">ធ្វើឡើងវិញ</translation>
 <translation id="366419593095697301">តម្រុយ៖ ចុច Escape ប្រសិនបើ​អ្នក​ចង់​ចាកចេញពី​មេរៀននេះ​។</translation>
 <translation id="3676062394766691318">បន្ទាប់ពី​រៀបចំ​ឧបករណ៍​របស់អ្នក​រួច អ្នក​អាចត្រឡប់​មកមើល​មេរៀន​ច្រើនទៀត​បានដោយចុច​ស្វែងរក + O បន្ទាប់មកចុច T។</translation>
 <translation id="3681531118904532409">លឿងខ្ចី</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb
index 79653d4f..dad7297 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ko.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{달러 기호}other{달러 기호 #개}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">반복</translation>
 <translation id="366419593095697301">힌트: 이 가이드를 종료하려면 Esc 키를 누르세요.</translation>
 <translation id="3676062394766691318">기기를 설정한 후 다시 돌아와 검색 키 + O 키를 누를 다음 T 키를 눌러 더 많은 가이드를 볼 수 있습니다.</translation>
 <translation id="3681531118904532409">파파야 윕</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb
index 4d4834b..57c211a 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lo.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{​ໂດ​ລາ}other{# ສັນຍາລັກໂດລາ}}</translation>
 <translation id="3659787053479271466">ການເຕືອນ</translation>
+<translation id="3661265561216135784">ເຮັດຊ້ຳ</translation>
 <translation id="366419593095697301">ຄຳບອກໃບ້: ກົດ Escape ຖ້າທ່ານຕ້ອງການອອກຈາກການສອນການນຳໃຊ້ນີ້.</translation>
 <translation id="3676062394766691318">ຫຼັງຈາກທີ່ທ່ານຕັ້ງຄ່າອຸປະກອນຂອງທ່ານແລ້ວ, ທ່ານສາມາດກັບຄືນມາ ແລະ ເບິ່ງການສອນການນຳໃຊ້ເພີ່ມເຕີມໂດຍການກົດປຸ່ມຊອກຫາ + O, ແລ້ວກົດ T.</translation>
 <translation id="3681531118904532409">ສີຊົມພູປາປາຢາວິບ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
index 0abcbc4..e605ff2 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lt.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dolerio ženklas}one{# dolerio ženklas}few{# dolerio ženklai}many{# dollar signs}other{# dolerio ženklų}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">kartoti</translation>
 <translation id="366419593095697301">Užuomina: jei norite išeiti iš šios mokymo programos, paspauskite klavišą „Escape“.</translation>
 <translation id="3676062394766691318">Nustatę įrenginį galėsite grįžti ir peržiūrėti daugiau mokymo programų paspaudę paieškos klavišą ir O, tada T.</translation>
 <translation id="3681531118904532409">Švelni persikų spalva</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb
index 1dfae70d..6ff8b5e 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_lv.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">izvēlnes vienumu izvēles rūtiņa</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dolāra zīme}zero{# dolāra zīmju}one{# dolāra zīme}other{# dolāra zīmes}}</translation>
 <translation id="3659787053479271466">brīdinājums</translation>
+<translation id="3661265561216135784">atkārtot</translation>
 <translation id="366419593095697301">Norāde: nospiediet atsoļa taustiņu (Esc), ja vēlaties iziet no šīm mācībām.</translation>
 <translation id="3676062394766691318">Kad būsiet iestatījis savu ierīci, varēsiet atgriezties un skatīt citas mācības, nospiežot meklēšanas taustiņu un O, pēc tam — T.</translation>
 <translation id="3681531118904532409">Gaiša papaju</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
index d33bfa49..6c6e788 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mn.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{ доллар}other{ # долларын тэмдэгтүүд}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">давтах</translation>
 <translation id="366419593095697301">Заавар: Хэрэв та энэ практик хичээлээс гарахыг хүсвэл Escape-г дарна уу.</translation>
 <translation id="3676062394766691318">Та төхөөрөмжөө тохируулж дууссаны дараа Хайлт + O дараа нь T-г даран буцан ирж, бусад практик хичээлийг үзэх боломжтой.</translation>
 <translation id="3681531118904532409">Бага зэргийн бор туяатай цайвар ягаан</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb
index ed825b69..b1f2f88 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_my.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{ဒေါ်လာ}other{# ဒေါ်လာ သင်္ကေတများ}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">ထပ်လုပ်ရန်</translation>
 <translation id="366419593095697301">သဲလွန်စ- ဤရှင်းလင်းပို့ချချက်မှ ထွက်လိုလျှင် Escape နှိပ်ပါ။</translation>
 <translation id="3676062394766691318">သင့်စက်ပစ္စည်းကို စနစ်ထည့်သွင်းပြီးနောက် 'ရှာဖွေရေး + O' ထို့နောက် T ကို နှိပ်၍ ပြန်လာပြီး နောက်ထပ်ရှင်းလင်းပို့ချချက်များကို ကြည့်နိုင်သည်။</translation>
 <translation id="3681531118904532409">သင်္ဘာသီး ခရင်မ်</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb
index f5cc01a..50ed3905 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_pt-BR.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{cifrão}one{# indicadores de cifrão}other{# indicadores de cifrão}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">repetir</translation>
 <translation id="366419593095697301">Dica: pressione a tecla Esc para sair do tutorial.</translation>
 <translation id="3676062394766691318">Após configurar o dispositivo, você pode voltar e ver mais tutoriais pressionando a tecla de pesquisa + O e depois pressionando a tecla T.</translation>
 <translation id="3681531118904532409">Papaia</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb
index 20a605b..ad2725e 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{знак доллара}one{# знак доллара}few{# знака доллара}many{# знаков доллара}other{# dollar signs}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">повторить</translation>
 <translation id="366419593095697301">Подсказка. Чтобы выйти из этого руководства, нажмите Esc.</translation>
 <translation id="3676062394766691318">После настройки устройства вы можете посмотреть и другие руководства, нажав Поиск + O, а затем – T.</translation>
 <translation id="3681531118904532409">Папайя со взбитыми сливками</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb
index 58fc27a..25f7447 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_si.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{ඩොලරය}one{# ඩොලර ලකුණු}other{# ඩොලර ලකුණු}}</translation>
 <translation id="3659787053479271466">අවදි</translation>
+<translation id="3661265561216135784">පුනරාවර්තනය කරන්න</translation>
 <translation id="366419593095697301">ඉඟිය: ඔබ මෙම නිබන්ධනයෙන් පිටවීමට කැමති නම් Escape ඔබන්න.</translation>
 <translation id="3676062394766691318">ඔබ ඔබගේ උපාංගය පිහිටවූ පසු, ඔබට නැවත පැමිණ සෙවීම + O ඔබා, අනතුරුව T එබීමෙන් තවත් නිබන්ධන නැරඹිය හැකිය.</translation>
 <translation id="3681531118904532409">ගස් ලබු නැටි</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
index 37b581e..2aa5901 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sl.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">potokelmen</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{znak za dolar}one{# znak za dolar}two{# znaka za dolar}few{# znaki za dolar}other{# znakov za dolar}}</translation>
 <translation id="3659787053479271466">opoz</translation>
+<translation id="3661265561216135784">ponovi</translation>
 <translation id="366419593095697301">Namig: Če želite zapreti to vadnico, pritisnite tipko Escape.</translation>
 <translation id="3676062394766691318">Ko nastavite napravo, se lahko vrnete in si ogledate več vadnic, tako da pritisnete tipko za iskanje + tipko O, nato tipko T.</translation>
 <translation id="3681531118904532409">Marelična</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb
index d6c9e0d..f2fc5767 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr-Latn.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">polje za potvrdu stavke menija</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{znak za dolar}one{# znak za dolar}few{# znaka za dolar}other{# znakova za dolar}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">ponovi</translation>
 <translation id="366419593095697301">Savet: Pritisnite taster Escape ako želite da zatvorite ovaj vodič.</translation>
 <translation id="3676062394766691318">Kada podesite uređaj, možete da se vratite i pregledate još vodiča pritiskom na taster za pretragu + O, pa T.</translation>
 <translation id="3681531118904532409">Bleda rozenarandžasta</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb
index 93df7a9..520dae0 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_sr.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">поље за потврду ставке менија</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{знак за долар}one{# знак за долар}few{# знака за долар}other{# знакова за долар}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">понови</translation>
 <translation id="366419593095697301">Савет: Притисните тастер Escape ако желите да затворите овај водич.</translation>
 <translation id="3676062394766691318">Када подесите уређај, можете да се вратите и прегледате још водича притиском на тастер за претрагу + O, па T.</translation>
 <translation id="3681531118904532409">Бледа розенаранџаста</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb
index 89ee44c..d147206 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ur.xtb
@@ -424,6 +424,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{ڈالر}other{# ڈالر کے نشانات}}</translation>
 <translation id="3659787053479271466">الرٹ</translation>
+<translation id="3661265561216135784">دہرائیں</translation>
 <translation id="366419593095697301">‏تجویز: اگر آپ اس ٹیوٹوریل سے باہر نکلنا چاہتے ہیں تو Escape دبائیں۔</translation>
 <translation id="3676062394766691318">‏اپنے آلے کو سیٹ اپ کرنے کے بعد، آپ O + Search پھر T دبا کر واپس آ سکتے ہیں اور مزید ٹیوٹوریلز ملاحظہ کر سکتے ہیں۔</translation>
 <translation id="3681531118904532409">بھورا مائل ہلکا نارنجی</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb
index 6abeaabb8..0e316ad 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{dấu đô la}other{# dấu đô la}}</translation>
 <translation id="3659787053479271466">alrt</translation>
+<translation id="3661265561216135784">lặp lại</translation>
 <translation id="366419593095697301">Gợi ý: Nhấn phím Escape nếu bạn muốn thoát khỏi tài liệu hướng dẫn này.</translation>
 <translation id="3676062394766691318">Sau khi thiết lập thiết bị, bạn có thể quay lại và xem các hướng dẫn khác bằng cách nhấn tổ hợp phím Tìm kiếm + O rồi nhấn phím T.</translation>
 <translation id="3681531118904532409">Màu đu đủ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb
index 3263e2e..19d3e3b 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zh-HK.xtb
@@ -423,7 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{1 個貨幣符號}other{# 個貨幣符號}}</translation>
 <translation id="3659787053479271466">通知</translation>
-<translation id="3661265561216135784">重複執行</translation>
+<translation id="3661265561216135784">重複</translation>
 <translation id="366419593095697301">提示:㩒 Escape 掣就可以結束呢個教學課程。</translation>
 <translation id="3676062394766691318">設定裝置後,您可回到這裡查看更多教學課程,只要按下搜尋鍵 + O 鍵,然後按下 T 鍵即可。</translation>
 <translation id="3681531118904532409">蕃木瓜色</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb
index a7476d3c..ce4ef66 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_zu.xtb
@@ -423,6 +423,7 @@
 <translation id="3650317109285159359">chkmnuitm</translation>
 <translation id="3655855170848725876">{COUNT,plural, =1{idola}one{# izimpawu zedola}other{# izimpawu zedola}}</translation>
 <translation id="3659787053479271466">i-alrt</translation>
+<translation id="3661265561216135784">phinda</translation>
 <translation id="366419593095697301">Icebiso: Cindezela u-Escape uma ungathanda ukuphuma kulesi sifundo.</translation>
 <translation id="3676062394766691318">Ngemva kokusetha idivayisi yakho, ungabuya uzobuka izifundo ezengeziwe ngokucindezela okuthi Sesha + O, bese no-T.</translation>
 <translation id="3681531118904532409">I-Papaya Whip</translation>
diff --git a/chrome/browser/resources/chromeos/account_manager/BUILD.gn b/chrome/browser/resources/chromeos/account_manager/BUILD.gn
index dabbdbd..d0fc0451 100644
--- a/chrome/browser/resources/chromeos/account_manager/BUILD.gn
+++ b/chrome/browser/resources/chromeos/account_manager/BUILD.gn
@@ -3,7 +3,8 @@
 # found in the LICENSE file.
 
 import("//third_party/closure_compiler/compile_js.gni")
-import("//tools/polymer/html_to_js.gni")
+import("//tools/polymer/css_to_wrapper.gni")
+import("//tools/polymer/html_to_wrapper.gni")
 
 js_type_check("closure_compile") {
   is_polymer3 = true
@@ -37,10 +38,15 @@
   externs_list = [ "$externs_path/chrome_send.js" ]
 }
 
-html_to_js("web_components") {
-  js_files = [
-    "account_manager_shared_css.js",
-    "account_migration_welcome_app.js",
-    "account_manager_error_app.js",
+html_to_wrapper("html_wrapper_files") {
+  in_files = [
+    "account_migration_welcome_app.html",
+    "account_manager_error_app.html",
   ]
+  use_js = true
+}
+
+css_to_wrapper("css_wrapper_files") {
+  in_files = [ "account_manager_shared.css" ]
+  use_js = true
 }
diff --git a/chrome/browser/resources/chromeos/account_manager/account_manager_error_app.html b/chrome/browser/resources/chromeos/account_manager/account_manager_error_app.html
index cf129453..dbf9cfe 100644
--- a/chrome/browser/resources/chromeos/account_manager/account_manager_error_app.html
+++ b/chrome/browser/resources/chromeos/account_manager/account_manager_error_app.html
@@ -1,4 +1,4 @@
-<style include="shared-css">
+<style include="account-manager-shared">
   .main-image {
     height: 256px;
     width: 256px;
diff --git a/chrome/browser/resources/chromeos/account_manager/account_manager_error_app.js b/chrome/browser/resources/chromeos/account_manager/account_manager_error_app.js
index af19713..46c77cac 100644
--- a/chrome/browser/resources/chromeos/account_manager/account_manager_error_app.js
+++ b/chrome/browser/resources/chromeos/account_manager/account_manager_error_app.js
@@ -4,18 +4,19 @@
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import './strings.m.js';
-import './account_manager_shared_css.js';
+import './account_manager_shared.css.js';
 
 import {assert} from 'chrome://resources/js/assert.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {AccountManagerBrowserProxyImpl} from './account_manager_browser_proxy.js';
+import {getTemplate} from './account_manager_error_app.html.js';
 
 Polymer({
   is: 'account-manager-error',
 
-  _template: html`{__html_template__}`,
+  _template: getTemplate(),
 
   properties: {
     /** @private */
diff --git a/chrome/browser/resources/chromeos/account_manager/account_manager_shared.css b/chrome/browser/resources/chromeos/account_manager/account_manager_shared.css
new file mode 100644
index 0000000..01a7475
--- /dev/null
+++ b/chrome/browser/resources/chromeos/account_manager/account_manager_shared.css
@@ -0,0 +1,67 @@
+/* Copyright 2022 The Chromium Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* #css_wrapper_metadata_start
+ * #type=style
+ * #import=chrome://resources/cr_elements/cr_shared_style.css.js
+ * #import=chrome://resources/cr_elements/cr_shared_vars.css.js
+ * #include=cr-shared-style
+ * #css_wrapper_metadata_end */
+
+h1 {
+  font-size: 2em;
+  font-weight: normal;
+  margin-bottom: 8px;
+  margin-top: 28px;
+}
+
+p {
+  line-height: 1.5;
+  margin-top: 0;
+  white-space: pre-line;
+}
+
+a {
+  color: var(--cr-link-color);
+  text-decoration: none;
+}
+
+.content {
+  display: flex;
+  flex-direction: column;
+  height: calc(100% - 61px);
+  padding-bottom: 32px;
+  padding-inline-end: 0;
+  padding-inline-start: 0;
+  padding-top: 29px; /* 64px - 35px(dialog top border size) */
+}
+
+.google-logo {
+  height: 32px;
+  width: 32px;
+}
+
+.image-container {
+  align-items: center;
+  display: flex;
+  flex-grow: 1;
+  justify-content: center;
+  width: 100%;
+}
+
+.main-container {
+  display: flex;
+  flex-direction: column;
+  flex-grow: 1;
+  padding-inline-end: 64px;
+  padding-inline-start: 64px;
+}
+
+.button-container {
+  display: flex;
+  justify-content: flex-end;
+  padding-inline-end: 32px;
+  padding-inline-start: 32px;
+}
diff --git a/chrome/browser/resources/chromeos/account_manager/account_manager_shared_css.html b/chrome/browser/resources/chromeos/account_manager/account_manager_shared_css.html
deleted file mode 100644
index 0f733942..0000000
--- a/chrome/browser/resources/chromeos/account_manager/account_manager_shared_css.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <style include="cr-shared-style">
-    h1 {
-      font-size: 2em;
-      font-weight: normal;
-      margin-bottom: 8px;
-      margin-top: 28px;
-    }
-
-    p {
-      line-height: 1.5;
-      margin-top: 0;
-      white-space: pre-line;
-    }
-
-    a {
-      color: var(--cr-link-color);
-      text-decoration: none;
-    }
-
-    .content {
-      display: flex;
-      flex-direction: column;
-      height: calc(100% - 61px);
-      padding-bottom: 32px;
-      padding-inline-end: 0;
-      padding-inline-start: 0;
-      padding-top: 29px; /* 64px - 35px(dialog top border size) */
-    }
-
-    .google-logo {
-      height: 32px;
-      width: 32px;
-    }
-
-    .image-container {
-      align-items: center;
-      display: flex;
-      flex-grow: 1;
-      justify-content: center;
-      width: 100%;
-    }
-
-    .main-container {
-      display: flex;
-      flex-direction: column;
-      flex-grow: 1;
-      padding-inline-end: 64px;
-      padding-inline-start: 64px;
-    }
-
-    .button-container {
-      display: flex;
-      justify-content: flex-end;
-      padding-inline-end: 32px;
-      padding-inline-start: 32px;
-    }
-  </style>
-</template>
diff --git a/chrome/browser/resources/chromeos/account_manager/account_manager_shared_css.js b/chrome/browser/resources/chromeos/account_manager/account_manager_shared_css.js
deleted file mode 100644
index ef43ba4..0000000
--- a/chrome/browser/resources/chromeos/account_manager/account_manager_shared_css.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'chrome://resources/cr_elements/cr_shared_style.css.js';
-import 'chrome://resources/cr_elements/cr_shared_vars.css.js';
-
-const template = document.createElement('template');
-template.innerHTML = `
-<dom-module id="shared-css">{__html_template__}</dom-module>
-`;
-document.body.appendChild(template.content.cloneNode(true));
diff --git a/chrome/browser/resources/chromeos/account_manager/account_migration_welcome_app.html b/chrome/browser/resources/chromeos/account_manager/account_migration_welcome_app.html
index cddca6b..11a9cc9 100644
--- a/chrome/browser/resources/chromeos/account_manager/account_migration_welcome_app.html
+++ b/chrome/browser/resources/chromeos/account_manager/account_migration_welcome_app.html
@@ -1,4 +1,4 @@
-<style include="shared-css">
+<style include="account-manager-shared">
   .welcome-image {
     width: 338px;
   }
diff --git a/chrome/browser/resources/chromeos/account_manager/account_migration_welcome_app.js b/chrome/browser/resources/chromeos/account_manager/account_migration_welcome_app.js
index 7f401da..f6f3481f 100644
--- a/chrome/browser/resources/chromeos/account_manager/account_migration_welcome_app.js
+++ b/chrome/browser/resources/chromeos/account_manager/account_migration_welcome_app.js
@@ -4,18 +4,19 @@
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import './strings.m.js';
-import './account_manager_shared_css.js';
+import './account_manager_shared.css.js';
 
 import {assert} from 'chrome://resources/js/assert.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {AccountManagerBrowserProxy, AccountManagerBrowserProxyImpl} from './account_manager_browser_proxy.js';
+import {getTemplate} from './account_migration_welcome_app.html.js';
 
 Polymer({
   is: 'account-migration-welcome',
 
-  _template: html`{__html_template__}`,
+  _template: getTemplate(),
 
   properties: {
     /** @private */
diff --git a/chrome/browser/resources/chromeos/account_manager/components/BUILD.gn b/chrome/browser/resources/chromeos/account_manager/components/BUILD.gn
index 306e2ed7..802bdee 100644
--- a/chrome/browser/resources/chromeos/account_manager/components/BUILD.gn
+++ b/chrome/browser/resources/chromeos/account_manager/components/BUILD.gn
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 
 import("//third_party/closure_compiler/compile_js.gni")
-import("//tools/polymer/html_to_js.gni")
+import("//tools/polymer/html_to_wrapper.gni")
 
 js_type_check("closure_compile") {
   is_polymer3 = true
@@ -16,6 +16,7 @@
   ]
 }
 
-html_to_js("web_components") {
-  js_files = [ "error_screen.js" ]
+html_to_wrapper("html_wrapper_files") {
+  in_files = [ "error_screen.html" ]
+  use_js = true
 }
diff --git a/chrome/browser/resources/chromeos/account_manager/components/error_screen.js b/chrome/browser/resources/chromeos/account_manager/components/error_screen.js
index e639c50..ba61057 100644
--- a/chrome/browser/resources/chromeos/account_manager/components/error_screen.js
+++ b/chrome/browser/resources/chromeos/account_manager/components/error_screen.js
@@ -5,7 +5,10 @@
 import 'chrome://resources/cr_elements/cr_shared_vars.css.js';
 import 'chrome://resources/cr_elements/icons.html.js';
 
-import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+import {Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {getTemplate} from './error_screen.html.js';
+
 /**
  * @fileoverview Polymer element for displaying error screens with error icon,
  * title and body text.
@@ -14,7 +17,7 @@
 Polymer({
   is: 'account-manager-error-screen',
 
-  _template: html`{__html_template__}`,
+  _template: getTemplate(),
 
   properties: {
     errorTitle: {
diff --git a/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.html b/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.html
index bd83db56..e9887c7 100644
--- a/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.html
+++ b/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.html
@@ -1,4 +1,4 @@
-<style include="shared-css">
+<style include="account-manager-shared">
   :host {
     --account-item-height: 44px;
     --account-item-width: 366px;
diff --git a/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.js b/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.js
index c4fbb45..c72d52d4d 100644
--- a/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.js
+++ b/chrome/browser/resources/chromeos/arc_account_picker/arc_account_picker_app.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '../account_manager_shared_css.js';
+import '../account_manager_shared.css.js';
 import '../strings.m.js';
 
 import {getImage} from '//resources/js/icon.js';
diff --git a/chrome/browser/resources/chromeos/parent_access/BUILD.gn b/chrome/browser/resources/chromeos/parent_access/BUILD.gn
index 224cbd57..37dd46d 100644
--- a/chrome/browser/resources/chromeos/parent_access/BUILD.gn
+++ b/chrome/browser/resources/chromeos/parent_access/BUILD.gn
@@ -51,8 +51,8 @@
 
 js_library("parent_access_controller") {
   deps = [
+    "//ash/webui/common/resources:promise_resolver",
     "//ash/webui/common/resources/post_message_api:post_message_api_server",
-    "//ui/webui/resources/js:promise_resolver",
   ]
 }
 
diff --git a/chrome/browser/resources/chromeos/parent_access/parent_access_controller.js b/chrome/browser/resources/chromeos/parent_access/parent_access_controller.js
index b6abe5a..c369a3fa 100644
--- a/chrome/browser/resources/chromeos/parent_access/parent_access_controller.js
+++ b/chrome/browser/resources/chromeos/parent_access/parent_access_controller.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {PostMessageAPIServer} from 'chrome://resources/ash/common/post_message_api/post_message_api_server.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 
 /**
  * Class that implements the Chrome side of the ParentAccess PostMessageAPI.
diff --git a/chrome/browser/resources/chromeos/sys_internals/BUILD.gn b/chrome/browser/resources/chromeos/sys_internals/BUILD.gn
index 90740a3..3ce1c6e 100644
--- a/chrome/browser/resources/chromeos/sys_internals/BUILD.gn
+++ b/chrome/browser/resources/chromeos/sys_internals/BUILD.gn
@@ -18,8 +18,8 @@
     ":types",
     "line_chart:line_chart",
     "line_chart:unit_label",
+    "//ash/webui/common/resources:promise_resolver",
     "//ui/webui/resources/js:cr.m",
-    "//ui/webui/resources/js:promise_resolver",
     "//ui/webui/resources/js:util",
   ]
 
diff --git a/chrome/browser/resources/chromeos/sys_internals/index.js b/chrome/browser/resources/chromeos/sys_internals/index.js
index a7be74b..68ceae8a 100644
--- a/chrome/browser/resources/chromeos/sys_internals/index.js
+++ b/chrome/browser/resources/chromeos/sys_internals/index.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {sendWithPromise} from 'chrome://resources/js/cr.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {$} from 'chrome://resources/js/util.js';
 
 import {CPU_COLOR_SET, INFO_PAGE_PRECISION, MEMORY_COLOR_SET, PAGE_HASH, UNITBASE_MEMORY, UNITBASE_NUMBER_PER_SECOND, UNITS_MEMORY, UNITS_NUMBER_PER_SECOND, UPDATE_PERIOD, ZRAM_COLOR_SET} from './constants.js';
diff --git a/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.html b/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.html
index 58cd13a..b8e0b516 100644
--- a/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.html
+++ b/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.html
@@ -1,4 +1,4 @@
-<style include="shared-css">
+<style include="account-manager-shared">
   .image-container {
     height: 280px;
     margin-top: 5px;
diff --git a/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.ts b/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.ts
index 1648cf4..11b5ae3c 100644
--- a/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.ts
+++ b/chrome/browser/resources/inline_login/signin_blocked_by_policy_page.ts
@@ -8,7 +8,7 @@
  */
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import './account_manager_shared_css.js';
+import './account_manager_shared.css.js';
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
diff --git a/chrome/browser/resources/inline_login/signin_error_page.html b/chrome/browser/resources/inline_login/signin_error_page.html
index 84d9c62..b1515a4 100644
--- a/chrome/browser/resources/inline_login/signin_error_page.html
+++ b/chrome/browser/resources/inline_login/signin_error_page.html
@@ -1,4 +1,4 @@
-<style include="shared-css">
+<style include="account-manager-shared">
   .image-container {
     margin-top: 20px;
     height: 350px;
diff --git a/chrome/browser/resources/inline_login/signin_error_page.ts b/chrome/browser/resources/inline_login/signin_error_page.ts
index 9e6299151..77ed8f7 100644
--- a/chrome/browser/resources/inline_login/signin_error_page.ts
+++ b/chrome/browser/resources/inline_login/signin_error_page.ts
@@ -8,7 +8,7 @@
  */
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import './account_manager_shared_css.js';
+import './account_manager_shared.css.js';
 
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
diff --git a/chrome/browser/resources/inline_login/welcome_page_app.html b/chrome/browser/resources/inline_login/welcome_page_app.html
index 51cfb3dc9..c578fd9 100644
--- a/chrome/browser/resources/inline_login/welcome_page_app.html
+++ b/chrome/browser/resources/inline_login/welcome_page_app.html
@@ -1,4 +1,4 @@
-<style include="shared-css">
+<style include="account-manager-shared">
   .image-container {
     margin-top: 40px;
   }
diff --git a/chrome/browser/resources/inline_login/welcome_page_app.ts b/chrome/browser/resources/inline_login/welcome_page_app.ts
index e191c3e..18542c1 100644
--- a/chrome/browser/resources/inline_login/welcome_page_app.ts
+++ b/chrome/browser/resources/inline_login/welcome_page_app.ts
@@ -5,7 +5,7 @@
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
-import './account_manager_shared_css.js';
+import './account_manager_shared.css.js';
 
 import {getAccountAdditionOptionsFromJSON} from 'chrome://chrome-signin/arc_account_picker/arc_util.js';
 import {CrCheckboxElement} from 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
diff --git a/chrome/browser/resources/password_manager/BUILD.gn b/chrome/browser/resources/password_manager/BUILD.gn
index c0de7e0bd..4cb10ee 100644
--- a/chrome/browser/resources/password_manager/BUILD.gn
+++ b/chrome/browser/resources/password_manager/BUILD.gn
@@ -7,17 +7,16 @@
 build_webui("build") {
   grd_prefix = "password_manager"
   static_files = [
-    "images/checkup_result_banner_compromised.svg",
-    "images/checkup_result_banner_compromised_dark.svg",
-    "images/checkup_result_banner_error.svg",
-    "images/checkup_result_banner_error_dark.svg",
-    "images/checkup_result_banner_ok.svg",
-    "images/checkup_result_banner_ok_dark.svg",
-    "images/checkup_result_banner_running.svg",
-    "images/checkup_result_banner_running_dark.svg",
-    "images/password_manager_logo.svg",
-    "manifest.webmanifest",
     "password_manager.html",
+    "manifest.webmanifest",
+    "images/checkup_result_banner_error_dark.svg",
+    "images/checkup_result_banner_compromised_dark.svg",
+    "images/checkup_result_banner_running_dark.svg",
+    "images/checkup_result_banner_error.svg",
+    "images/checkup_result_banner_compromised.svg",
+    "images/checkup_result_banner_running.svg",
+    "images/checkup_result_banner_ok_dark.svg",
+    "images/checkup_result_banner_ok.svg",
   ]
   web_component_files = [
     "checkup_section.ts",
diff --git a/chrome/browser/resources/password_manager/images/password_manager_logo.svg b/chrome/browser/resources/password_manager/images/password_manager_logo.svg
deleted file mode 100644
index d1593d78..0000000
--- a/chrome/browser/resources/password_manager/images/password_manager_logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="151" height="151" viewBox="0 0 151 83" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M79.961 27.667C74.333 11.55 59.096 0 41.181 0 18.464 0 0 18.606 0 41.5S18.463 83 41.182 83c17.914 0 33.151-11.55 38.78-27.667h29.856V83h27.455V55.333H151V27.667H79.961Zm-38.78 27.666c-7.55 0-13.726-6.225-13.726-13.833 0-7.608 6.177-13.833 13.727-13.833 7.55 0 13.727 6.225 13.727 13.833 0 7.608-6.177 13.833-13.727 13.833Z" fill="#1A73E8"/></svg>
\ No newline at end of file
diff --git a/chrome/browser/resources/password_manager/manifest.webmanifest b/chrome/browser/resources/password_manager/manifest.webmanifest
index 20cca606..7b11c7b2 100644
--- a/chrome/browser/resources/password_manager/manifest.webmanifest
+++ b/chrome/browser/resources/password_manager/manifest.webmanifest
@@ -3,9 +3,9 @@
   "name": "Password Manager",
   "icons": [
     {
-      "src": "chrome://password-manager/images/password_manager_logo.svg",
-      "type": "image/svg+xml",
-      "sizes": "any"
+      "src": "chrome://theme/current-channel-logo",
+      "type": "image/png",
+      "sizes": "32x32"
     }
   ],
   "start_url": "/?source=pwa",
diff --git a/chrome/browser/resources/pdf/controller.ts b/chrome/browser/resources/pdf/controller.ts
index ea571ca..b8cf630f 100644
--- a/chrome/browser/resources/pdf/controller.ts
+++ b/chrome/browser/resources/pdf/controller.ts
@@ -81,7 +81,7 @@
     fileName: string,
     dataToSave: ArrayBuffer,
     editModeForTesting?: boolean,
-  }>;
+  }|null>;
 
   /**
    * Requests that the attachment at a certain index be saved.
@@ -347,7 +347,7 @@
 
   save(requestType: SaveRequestType) {
     const resolver =
-        new PromiseResolver<{fileName: string, dataToSave: ArrayBuffer}>();
+        new PromiseResolver<{fileName: string, dataToSave: ArrayBuffer}|null>();
     const newToken = createToken();
     this.pendingTokens_.set(newToken, resolver);
     this.postMessage_({
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn
index 9b31b91..2a3f6cd 100644
--- a/chrome/browser/resources/settings/chromeos/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -385,7 +385,7 @@
   deps = [
     ":route_observer_behavior",
     "..:router",
-    "//ui/webui/resources/js:promise_resolver",
+    "//ash/webui/common/resources:promise_resolver",
   ]
 }
 
diff --git a/chrome/browser/resources/settings/chromeos/global_scroll_target_behavior.js b/chrome/browser/resources/settings/chromeos/global_scroll_target_behavior.js
index 3dc64140..3e7dd30f 100644
--- a/chrome/browser/resources/settings/chromeos/global_scroll_target_behavior.js
+++ b/chrome/browser/resources/settings/chromeos/global_scroll_target_behavior.js
@@ -14,7 +14,7 @@
  * |setGlobalScrollTarget| should only be called once.
  */
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {Route, Router} from '../router.js';
 import {RouteObserverBehavior} from './route_observer_behavior.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/BUILD.gn
index 75621df2..431c255 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/BUILD.gn
@@ -139,16 +139,16 @@
 
 js_library("dom_switch") {
   deps = [
+    "//ash/webui/common/resources:promise_resolver",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:promise_resolver",
   ]
 }
 
 js_library("fake_page_handler") {
   deps = [
+    "//ash/webui/common/resources:promise_resolver",
     "//ui/webui/resources/cr_components/app_management:mojo_bindings_webui_js",
-    "//ui/webui/resources/js:promise_resolver",
   ]
 }
 
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/dom_switch.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/dom_switch.js
index 6f1cacd..36021eb 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/dom_switch.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/dom_switch.js
@@ -32,7 +32,7 @@
 
 // TODO(crbug.com/992795) Merge with cr-view-manager.
 import {assert} from 'chrome://resources/js/assert.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {html, PolymerElement, TemplateInstanceBase, templatize} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 /** @polymer */
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
index 1a2b70f..ba1f0a91 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/fake_page_handler.js
@@ -6,7 +6,7 @@
 import {InstallReason, InstallSource} from 'chrome://resources/cr_components/app_management/constants.js';
 import {createBoolPermission, createTriStatePermission, getTriStatePermissionValue} from 'chrome://resources/cr_components/app_management/permission_util.js';
 import {assert, assertNotReached} from 'chrome://resources/js/assert.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 
 import {AppManagementStore} from './store.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn
index 0d3ed8eb..c149e05 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/BUILD.gn
@@ -45,11 +45,11 @@
     ":languages_types",
     "..:prefs_behavior",
     "//ash/webui/common/resources:i18n_behavior",
+    "//ash/webui/common/resources:promise_resolver",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/js:assert",
     "//ui/webui/resources/js:cr.m",
     "//ui/webui/resources/js:load_time_data.m",
-    "//ui/webui/resources/js:promise_resolver",
   ]
   externs_list = [
     "$externs_path/input_method_private.js",
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/languages.js b/chrome/browser/resources/settings/chromeos/os_languages_page/languages.js
index 3298296..b2cd9d4 100644
--- a/chrome/browser/resources/settings/chromeos/os_languages_page/languages.js
+++ b/chrome/browser/resources/settings/chromeos/os_languages_page/languages.js
@@ -14,7 +14,7 @@
 
 import {assert} from 'chrome://resources/js/assert.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {CrSettingsPrefs} from '../../prefs/prefs_types.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.html b/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.html
index 7902077..386a867d 100644
--- a/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.html
+++ b/chrome/browser/resources/settings/chromeos/os_privacy_page/privacy_hub_page.html
@@ -77,6 +77,15 @@
   </settings-toggle-button>
 </template>
 
+<if expr="_google_chrome">
+  <settings-metrics-consent-toggle-button
+      class="settings-box no-padding"
+      id="metricsConsentToggle"
+      deep-link-focus-id$="[[Setting.kUsageStatsAndCrashReports]]"
+      prefs="{{prefs}}">
+  </settings-metrics-consent-toggle-button>
+</if>
+
 <settings-toggle-button
     class="settings-box"
     id="suggested-content"
@@ -85,12 +94,3 @@
     sub-label="$i18n{enableSuggestedContentDesc}"
     learn-more-url="$i18n{suggestedContentLearnMoreURL}">
 </settings-toggle-button>
-
-<if expr="_google_chrome">
-    <settings-metrics-consent-toggle-button
-        class="settings-box no-padding"
-        id="metricsConsentToggle"
-        deep-link-focus-id$="[[Setting.kUsageStatsAndCrashReports]]"
-        prefs="{{prefs}}">
-    </settings-metrics-consent-toggle-button>
-</if>
diff --git a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/SigninManager.java b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/SigninManager.java
index 324ec44..8f1bae4 100644
--- a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/SigninManager.java
+++ b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/SigninManager.java
@@ -105,10 +105,11 @@
     boolean isSigninDisabledByPolicy();
 
     /**
-     * @return Whether true if the current user is not demo user and the user has a reasonable
-     *         Google Play Services installed.
+     * Returns whether the user can sign-in (maybe after an update to Google Play services).
+     * @param requireUpdatedPlayServices Indicates whether an updated version of play services is
+     *         required or not.
      */
-    boolean isSigninSupported();
+    boolean isSigninSupported(boolean requireUpdatedPlayServices);
 
     /**
      * @return Whether force sign-in is enabled by policy.
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc
index 67f0f99..3cfd684 100644
--- a/chrome/browser/ssl/ssl_browsertest.cc
+++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -3620,8 +3620,10 @@
 // This test checks the behavior of mixed content blocking for the requests
 // from a dedicated worker by changing the settings in WebPreferences
 // with allow_running_insecure_content = false.
-IN_PROC_BROWSER_TEST_P(SSLUIWorkerFetchTest,
-                       MixedContentSettings_DisallowRunningInsecureContent) {
+// Disabled due to being flaky. crbug.com/1116670
+IN_PROC_BROWSER_TEST_P(
+    SSLUIWorkerFetchTest,
+    DISABLED_MixedContentSettings_DisallowRunningInsecureContent) {
   ChromeContentBrowserClientForMixedContentTest browser_client;
   content::ScopedContentBrowserClientSetting setting(&browser_client);
 
diff --git a/chrome/browser/subresource_filter/subresource_filter_prerender_browsertest.cc b/chrome/browser/subresource_filter/subresource_filter_prerender_browsertest.cc
index 62fa02b..5fc28a1 100644
--- a/chrome/browser/subresource_filter/subresource_filter_prerender_browsertest.cc
+++ b/chrome/browser/subresource_filter/subresource_filter_prerender_browsertest.cc
@@ -250,7 +250,7 @@
     EXPECT_CALL(observer, OnPageActivationComputed(_, _)).Times(0);
     prerender_helper_.NavigatePrimaryPage(kPrerenderingUrl);
 
-    ASSERT_EQ(web_contents()->GetPrimaryMainFrame(), prerender_rfh);
+    ASSERT_TRUE(prerender_rfh->IsInPrimaryMainFrame());
     EXPECT_TRUE(AdsBlockedInContentSettings(prerender_rfh));
   }
 }
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
index ed48d11a..66ec96ad 100644
--- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
+++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
@@ -10,7 +10,9 @@
 
 #include "base/bind.h"
 #include "base/json/json_reader.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/strings/stringprintf.h"
+#include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/supervised_user/child_accounts/kids_management_api.h"
 #include "chrome/browser/supervised_user/supervised_user_constants.h"
@@ -190,6 +192,7 @@
       network::SimpleURLLoader::RETRY_ON_NETWORK_CHANGE);
   // TODO re-add data use measurement once SimpleURLLoader supports it
   // data_use_measurement::DataUseUserData::SUPERVISED_USER
+  simple_url_loader_start_time_ = base::TimeTicks::Now();
   simple_url_loader_->DownloadToStringOfUnboundedSizeUntilCrashAndDie(
       url_loader_factory_.get(),
       base::BindOnce(&FamilyInfoFetcher::OnSimpleLoaderComplete,
@@ -364,5 +367,8 @@
     consumer_->OnFailure(ErrorCode::kServiceError);
     return;
   }
+
+  UmaHistogramTimes("Signin.ListFamilyMembersRequest.LegacyNoError.Latency",
+                    base::TimeTicks::Now() - simple_url_loader_start_time_);
   consumer_->OnGetFamilyMembersSuccess(members);
 }
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.h b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.h
index f9966de2..a2a7c87 100644
--- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.h
+++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.h
@@ -12,6 +12,7 @@
 #include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/time/time.h"
 #include "base/values.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 
@@ -131,6 +132,7 @@
   std::string access_token_;
   bool access_token_expired_;
   std::unique_ptr<network::SimpleURLLoader> simple_url_loader_;
+  base::TimeTicks simple_url_loader_start_time_;
 };
 
 #endif  // CHROME_BROWSER_SUPERVISED_USER_CHILD_ACCOUNTS_FAMILY_INFO_FETCHER_H_
diff --git a/chrome/browser/support_tool/support_packet_metadata.cc b/chrome/browser/support_tool/support_packet_metadata.cc
index a878e20..57a43993 100644
--- a/chrome/browser/support_tool/support_packet_metadata.cc
+++ b/chrome/browser/support_tool/support_packet_metadata.cc
@@ -147,12 +147,11 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 void SupportPacketMetadata::OnMachineStatisticsLoaded(
     base::OnceClosure on_metadata_contents_populated) {
-  std::string machine_serial =
-      chromeos::system::StatisticsProvider::GetInstance()
-          ->GetEnterpriseMachineID();
-  if (!machine_serial.empty()) {
-    pii_[PIIType::kSerial].insert(machine_serial);
-    metadata_[kSerialNumberKey] = machine_serial;
+  const absl::optional<base::StringPiece> machine_serial =
+      chromeos::system::StatisticsProvider::GetInstance()->GetMachineID();
+  if (machine_serial && !machine_serial->empty()) {
+    pii_[PIIType::kSerial].insert(std::string(machine_serial.value()));
+    metadata_[kSerialNumberKey] = std::string(machine_serial.value());
   }
   std::move(on_metadata_contents_populated).Run();
 }
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index c2d21e0a..31393f23 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -2045,8 +2045,6 @@
       "app_list/internal_app/internal_app_metadata.h",
       "app_list/md_icon_normalizer.cc",
       "app_list/md_icon_normalizer.h",
-      "app_list/page_break_app_item.cc",
-      "app_list/page_break_app_item.h",
       "app_list/reorder/app_list_reorder_core.cc",
       "app_list/reorder/app_list_reorder_core.h",
       "app_list/reorder/app_list_reorder_delegate.h",
diff --git a/chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.cc b/chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.cc
index 8023675e..ceb674b 100644
--- a/chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.cc
+++ b/chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.cc
@@ -80,9 +80,13 @@
 void AllPasswordsBottomSheetViewImpl::OnCredentialSelected(
     JNIEnv* env,
     const base::android::JavaParamRef<jstring>& username,
-    const base::android::JavaParamRef<jstring>& password) {
-  controller_->OnCredentialSelected(ConvertJavaStringToUTF16(env, username),
-                                    ConvertJavaStringToUTF16(env, password));
+    const base::android::JavaParamRef<jstring>& password,
+    jboolean requests_to_fill_password) {
+  controller_->OnCredentialSelected(
+      ConvertJavaStringToUTF16(env, username),
+      ConvertJavaStringToUTF16(env, password),
+      AllPasswordsBottomSheetController::RequestsToFillPassword(
+          requests_to_fill_password));
 }
 
 void AllPasswordsBottomSheetViewImpl::OnDismiss(JNIEnv* env) {
diff --git a/chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.h b/chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.h
index 8cbd3cb..796e85e 100644
--- a/chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.h
+++ b/chrome/browser/ui/android/passwords/all_passwords_bottom_sheet_view_impl.h
@@ -40,7 +40,8 @@
   void OnCredentialSelected(
       JNIEnv* env,
       const base::android::JavaParamRef<jstring>& username,
-      const base::android::JavaParamRef<jstring>& password);
+      const base::android::JavaParamRef<jstring>& password,
+      jboolean requests_to_fill_password);
 
   // Called from Java bridge when user dismisses the BottomSheet.
   // Redirects the call to the controller.
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index ba8b96e..06e8bf5f 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1107,6 +1107,50 @@
         Chrome is finding new ways to reduce tracking and keep you even safer as you browse. Chrome also <ph name="BEGIN_LINK">&lt;link&gt;</ph>estimates your interests<ph name="END_LINK">&lt;/link&gt;</ph> and enables you to manage them. Then, sites you visit can ask Chrome for your interests to show you ads.
       </message>
 
+      <!-- Privacy Sandbox v4 - Notice EEA. -->
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_TITLE" translateable="false" desc="Privacy Sandbox dialog notice EEA: title.">
+        Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lore
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_DESCRIPTION_1" translateable="false" desc="Privacy Sandbox dialog notice EEA: First section of the body, above the bullet points.">
+        Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lore Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_BULLET_1" translateable="false" desc="Privacy Sandbox dialog notice EEA: First bullet point (outside expand).">
+        Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lore Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_BULLET_2" translateable="false" desc="Privacy Sandbox dialog notice EEA: Second bullet point (outside expand).">
+        Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lore Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_LEARN_MORE_EXPAND_LABEL" translateable="false" desc="Privacy Sandbox dialog notice EEA: Text user clicks to expand the collapsed section.">
+        Lorem ipsum Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_DESCRIPTION_2" translateable="false" desc="Privacy Sandbox dialog notice EEA: Second section of text, below the expand label.">
+        Lorem ipsum Lorem ipsum Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_ACK_BUTTON" translateable="false" desc="Privacy Sandbox dialog notice EEA: Got it button.">
+        Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_SETTINGS_BUTTON" translateable="false" desc="Privacy Sandbox dialog notice EEA: Settings button.">
+        Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_LEARN_MORE_HEADING_1" translateable="false" desc="Privacy Sandbox dialog notice EEA: First header in learn more expand.">
+        Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_LEARN_MORE_DESCRIPTION" translateable="false" desc="Privacy Sandbox dialog notice EEA: First description block in expand.">
+        Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_LEARN_MORE_HEADING_2" translateable="false" desc="Privacy Sandbox dialog notice EEA: Second header in learn more expand.">
+        Lorem ipsum Lorem ipsum Lorem
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_LEARN_MORE_BULLET_1" translateable="false" desc="Privacy Sandbox dialog notice EEA: First bullet point in expand.">
+        <ph name="BEGIN_BOLD">&lt;b&gt;</ph>Lorem ipsum:<ph name="END_BOLD">&lt;/b&gt;</ph> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_LEARN_MORE_BULLET_2" translateable="false" desc="Privacy Sandbox dialog notice EEA: Second bullet point in expand.">
+        <ph name="BEGIN_BOLD">&lt;b&gt;</ph>Lorem ipsum:<ph name="END_BOLD">&lt;/b&gt;</ph> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
+      </message>
+      <message name="IDS_PRIVACY_SANDBOX_M1_NOTICE_EEA_LEARN_MORE_BULLET_3" translateable="false" desc="Privacy Sandbox dialog notice EEA: Third bullet point in expand.">
+        <ph name="BEGIN_BOLD">&lt;b&gt;</ph>Lorem ipsum:<ph name="END_BOLD">&lt;/b&gt;</ph> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
+      </message>
+
       <!-- Secure DNS Settings.  Used by //chrome/browser/privacy. -->
       <message name="IDS_SETTINGS_CUSTOM" desc="Label for a custom option in a dropdown menu.">
         Custom
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
index dd6c009..e5048e5d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">ቪዲዮ</translation>
 <translation id="4766313118839197559">የይለፍ ቃላት የሚቀመጡት በዚህ መሣሪያ ላይ ባለው የይለፍ ቃል አስተዳዳሪ ላይ ነው</translation>
 <translation id="4766678251456904326">መለያ ወደ መሣሪያው ያክሉ</translation>
+<translation id="4769095993849849966">አዲስ የፋይል ስም</translation>
 <translation id="4787736314074622408"><ph name="ITEM_TITLE" />ን መሰረዝ ይፈልጋሉ?</translation>
 <translation id="4791358705705538979">እንደ ተመዝግቦ መውጫ ያለ በመላው ድር ላይ ተግባራትን እንዲያጠናቅቁ ያግዘዎታል</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
index 065780d..0aed4d55 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Parollar bu cihazda Parol Menecerində saxlanılır</translation>
 <translation id="4766678251456904326">Cihaza hesab əlavə edin</translation>
+<translation id="4769095993849849966">Yeni fayl adı</translation>
 <translation id="4787736314074622408"><ph name="ITEM_TITLE" /> faylını silmək istəyirsiniz?</translation>
 <translation id="4791358705705538979">Sizə vebdə ödənişin tamamlanması kimi tapşırıqları yerinə yetirməkdə kömək edir</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
index 4eb5949..d8eb3f2 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -685,6 +685,7 @@
 <translation id="4763480195061959176">ভিডিও</translation>
 <translation id="4766313118839197559">এই ডিভাইসের 'পাসওয়ার্ড ম্যানেজারে' পাসওয়ার্ড সেভ করা হয়</translation>
 <translation id="4766678251456904326">ডিভাইসে অ্যাকাউন্ট যোগ করুন</translation>
+<translation id="4769095993849849966">নতুন ফাইলের নাম</translation>
 <translation id="4787736314074622408">আপনি <ph name="ITEM_TITLE" /> মুছে ফেলতে চান?</translation>
 <translation id="4791358705705538979">এটি ওয়েবে চেক-আউটের মতো টাস্ক সম্পূর্ণ করতে সাহায্য করে</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index 848ef4f6..d7efc65d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">videozapis</translation>
 <translation id="4766313118839197559">Lozinke se pohranjuju u Upravitelju lozinki na ovom uređaju.</translation>
 <translation id="4766678251456904326">Dodajte račun na uređaj</translation>
+<translation id="4769095993849849966">Novi naziv fajla</translation>
 <translation id="4787736314074622408">Želite li izbrisati fajl <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Pomaže vam s izvršavanjem zadataka na internetu, kao što je plaćanje</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
index 15ccb4e..95449f0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">Video</translation>
 <translation id="4766313118839197559">Passwörter werden auf diesem Gerät im Passwortmanager gespeichert</translation>
 <translation id="4766678251456904326">Konto zum Gerät hinzufügen</translation>
+<translation id="4769095993849849966">Neuer Dateiname</translation>
 <translation id="4787736314074622408">Möchtest du <ph name="ITEM_TITLE" /> löschen?</translation>
 <translation id="4791358705705538979">Hilft dir, Aufgaben im Internet durchzuführen, z. B. beim Bezahlen</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index 34f396f5..39d13a83 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Las contraseñas se guardan en el Administrador de contraseñas en este dispositivo</translation>
 <translation id="4766678251456904326">Agregar una cuenta al dispositivo</translation>
+<translation id="4769095993849849966">Nuevo nombre de archivo</translation>
 <translation id="4787736314074622408">¿Quieres borrar <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Te ayuda a completar tareas en la Web, como confirmaciones de compras.</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
index 61d51a30b..3129e58 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">vídeo</translation>
 <translation id="4766313118839197559">Las contraseñas se guardan en el gestor de contraseñas en este dispositivo</translation>
 <translation id="4766678251456904326">Añadir cuenta al dispositivo</translation>
+<translation id="4769095993849849966">Nuevo nombre de archivo</translation>
 <translation id="4787736314074622408">¿Eliminar <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Te ayuda a completar tareas en la Web, como la tramitación de compras</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
index 09507e8f..378f5fb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Paroolid salvestatakse rakendusse Paroolihaldur selles seadmes</translation>
 <translation id="4766678251456904326">Konto lisamine seadmesse</translation>
+<translation id="4769095993849849966">Uus failinimi</translation>
 <translation id="4787736314074622408">Kas soovite faili <ph name="ITEM_TITLE" /> kustutada?</translation>
 <translation id="4791358705705538979">Aitab teil kõikjal veebis toiminguid (nt maksmine) lõpule viia</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></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 f5e2b988..8a2871f1 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
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">ویدئو</translation>
 <translation id="4766313118839197559">گذرواژه‌ها در «مدیر گذرواژه» در این دستگاه ذخیره می‌شوند</translation>
 <translation id="4766678251456904326">افزودن حساب به دستگاه</translation>
+<translation id="4769095993849849966">نام جدید فایل</translation>
 <translation id="4787736314074622408">می‌خواهید <ph name="ITEM_TITLE" /> را حذف کنید؟</translation>
 <translation id="4791358705705538979">به شما کمک می‌کند برخی کارها، مثل تسویه‌حساب، را در وب انجام دهید</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
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 5a909ca..ffeda00e 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
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">Vidéo</translation>
 <translation id="4766313118839197559">Les mots de passe sont enregistrés dans le gestionnaire de mots de passe sur cet appareil</translation>
 <translation id="4766678251456904326">Ajouter un compte à l'appareil</translation>
+<translation id="4769095993849849966">Nouveau nom de fichier</translation>
 <translation id="4787736314074622408">Voulez-vous supprimer <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Vous aide à effectuer des tâches sur le Web (des paiements, par exemple)</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></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 e1266ea..42e6503 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
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">वीडियो</translation>
 <translation id="4766313118839197559">पासवर्ड, इस डिवाइस पर Password Manager में सेव किए गए हैं</translation>
 <translation id="4766678251456904326">डिवाइस पर खाता जोड़ें</translation>
+<translation id="4769095993849849966">नई फ़ाइल का नाम</translation>
 <translation id="4787736314074622408">क्या आपको <ph name="ITEM_TITLE" /> मिटाना है?</translation>
 <translation id="4791358705705538979">वेब पर, चेकआउट करने जैसे टास्क पूरे करने में आपकी मदद करती है</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
index 1217f18..38f8f2a3 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">A jelszavakat ezen az eszközön menti a rendszer a Jelszókezelőbe.</translation>
 <translation id="4766678251456904326">Fiók hozzáadása az eszközhöz</translation>
+<translation id="4769095993849849966">Új fájlnév</translation>
 <translation id="4787736314074622408">Törli a következőt: <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Segít a műveletek (pl. fizetés) elvégzésében a weben</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
index 3c282d9..54b9ac69 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -553,6 +553,7 @@
 <translation id="4016425174436051808">Սխալի պատճառով չհաջողվեց բաժանորդագրվել։</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# ժամ}one{# ժամ}other{# ժամ}}</translation>
 <translation id="4035877632587724847">Չթույլատրել</translation>
+<translation id="4036177530563778041">Հեշտությամբ շարունակեք այնտեղից, որտեղ կանգ էիք առել</translation>
 <translation id="4045764304651014138">Օգտագործման տվյալներ</translation>
 <translation id="405399507749852140">Դուք ծանուցում կստանաք, երբ որևէ կայքում գնիջեցում լինի</translation>
 <translation id="4056223980640387499">Սեպիա</translation>
@@ -1126,6 +1127,7 @@
 <translation id="7029390216614421513">Դիրքավորեք QR-կոդը կամ գծակոդը այս շրջանակի մեջ</translation>
 <translation id="7029809446516969842">Գաղտնաբառեր</translation>
 <translation id="7030304022046916278">Ուղարկում է URL-ները Ապահով դիտարկմանը՝ դրանք ստուգելու համար։</translation>
+<translation id="7030585293819777123">Վերսկսե՞լ ձեր վերջին առաջադրանքը</translation>
 <translation id="7037830628447527439">Մուտք գործեք Chrome ձեր Google հաշվով</translation>
 <translation id="7038956721828960940">chrome_image_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
 <translation id="7054588988317389591">Ուզո՞ւմ եք ստանալ պատկերների նկարագրություններ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
index 6eef52a..e527038c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Sandi disimpan ke Pengelola Sandi di perangkat ini</translation>
 <translation id="4766678251456904326">Tambahkan akun ke perangkat</translation>
+<translation id="4769095993849849966">Nama file baru</translation>
 <translation id="4787736314074622408">Ingin menghapus <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Membantu Anda menyelesaikan tugas, seperti checkout, di seluruh web</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
index 8277e3b..414c305 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">動画</translation>
 <translation id="4766313118839197559">パスワードは、このデバイスのパスワード マネージャーに保存されます</translation>
 <translation id="4766678251456904326">デバイスへのアカウントの追加</translation>
+<translation id="4769095993849849966">新しいファイル名</translation>
 <translation id="4787736314074622408"><ph name="ITEM_TITLE" />を削除しますか?</translation>
 <translation id="4791358705705538979">ウェブでの操作(購入手続きなど)を完了できるようにサポートします</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />)<ph name="URL" /></translation>
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 3d9e9d1..762554d 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
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">វីដេអូ</translation>
 <translation id="4766313118839197559">ពាក្យសម្ងាត់ត្រូវបានរក្សាទុកទៅក្នុងកម្មវិធីគ្រប់គ្រង​ពាក្យសម្ងាត់នៅលើឧបករណ៍នេះ</translation>
 <translation id="4766678251456904326">បញ្ចូលគណនីទៅក្នុងឧបករណ៍</translation>
+<translation id="4769095993849849966">ឈ្មោះឯកសារថ្មី</translation>
 <translation id="4787736314074622408">តើអ្នក​ចង់​លុប <ph name="ITEM_TITLE" /> ដែរឬទេ?</translation>
 <translation id="4791358705705538979">ជួយអ្នក​ក្នុងការបំពេញ​កិច្ចការ ដូចជា​បង់ប្រាក់ចេញ​នៅទូទាំង​បណ្ដាញ​ជាដើម</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
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 13a9a26..dd93c4b8 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
@@ -682,6 +682,7 @@
 <translation id="4763480195061959176">ವೀಡಿಯೊ</translation>
 <translation id="4766313118839197559">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಈ ಸಾಧನದಲ್ಲಿನ Password Manager ನಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ</translation>
 <translation id="4766678251456904326">ಸಾಧನಕ್ಕೆ ಖಾತೆಯನ್ನು ಸೇರಿಸಿ</translation>
+<translation id="4769095993849849966">ಹೊಸ ಫೈಲ್ ಹೆಸರು</translation>
 <translation id="4787736314074622408">ನೀವು <ph name="ITEM_TITLE" /> ಅನ್ನು ಅಳಿಸಲು ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="4791358705705538979">ವೆಬ್‌ನಾದ್ಯಂತ, ಚೆಕ್ಔಟ್‌ನಂತಹ ಕಾರ್ಯಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
index bcc4ea3..7a46d0e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">동영상</translation>
 <translation id="4766313118839197559">비밀번호가 이 기기의 비밀번호 관리자에 저장됩니다.</translation>
 <translation id="4766678251456904326">기기에 계정 추가</translation>
+<translation id="4769095993849849966">새 파일 이름</translation>
 <translation id="4787736314074622408"><ph name="ITEM_TITLE" /> 파일을 삭제하시겠습니까?</translation>
 <translation id="4791358705705538979">웹에서 결제와 같은 작업을 처리하도록 도와줍니다.</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
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 7588917..59eedab 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
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">vaizdo įrašas</translation>
 <translation id="4766313118839197559">Slaptažodžiai saugomi Slaptažodžių tvarkyklėje šiame įrenginyje</translation>
 <translation id="4766678251456904326">Pridėti paskyrą prie įrenginio</translation>
+<translation id="4769095993849849966">Naujo failo pavadinimas</translation>
 <translation id="4787736314074622408">Ar norite ištrinti „<ph name="ITEM_TITLE" />“?</translation>
 <translation id="4791358705705538979">Padedama jums atlikti užduotis, pvz., atsiskaitymo veiksmus, žiniatinklyje</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="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 846778bc..a054edcc 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
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">വീഡിയോ</translation>
 <translation id="4766313118839197559">നിങ്ങളുടെ ഈ ഉപകരണത്തിലെ Password Manager-ൽ പാസ്‌വേഡുകൾ സംരക്ഷിക്കുന്നു</translation>
 <translation id="4766678251456904326">ഉപകരണത്തിലേക്ക് ഒരു അക്കൗണ്ട് ചേർക്കുക</translation>
+<translation id="4769095993849849966">ഫയലിന്റെ പുതിയ പേര്</translation>
 <translation id="4787736314074622408">നിങ്ങൾക്ക് <ph name="ITEM_TITLE" /> ഇല്ലാതാക്കണോ?</translation>
 <translation id="4791358705705538979">ചെക്കൗട്ട് പോലെ, വെബിലുടനീളമുള്ള ടാസ്‌ക്കുകൾ പൂർത്തിയാക്കാൻ സഹായിക്കുന്നു</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
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 6004945..8eaaffb 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
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">ဗီဒီယို</translation>
 <translation id="4766313118839197559">စကားဝှက်များကို ဤစက်ရှိ ‘စကားဝှက်မန်နေဂျာ’ တွင် သိမ်းသည်</translation>
 <translation id="4766678251456904326">စက်သို့ အကောင့်ထည့်ရန်</translation>
+<translation id="4769095993849849966">ဖိုင်အမည်အသစ်</translation>
 <translation id="4787736314074622408"><ph name="ITEM_TITLE" /> ကို ဖျက်လိုပါသလား။</translation>
 <translation id="4791358705705538979">ဝဘ်တွင် ငွေရှင်းခြင်းကဲ့သို့ အလုပ်များအပြီးသတ်ရန် ကူညီသည်</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
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 5e801ad..cdb77740 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
@@ -682,6 +682,7 @@
 <translation id="4763480195061959176">भिडियो</translation>
 <translation id="4766313118839197559">पासवर्डहरू यो डिभाइसको पासवर्ड म्यानेजरमा सेभ गरिन्छन्</translation>
 <translation id="4766678251456904326">यन्त्रमा खाता जोड्नुहोस्</translation>
+<translation id="4769095993849849966">फाइलको नयाँ नाम</translation>
 <translation id="4787736314074622408">तपाईं <ph name="ITEM_TITLE" /> मेटाउन चाहनुहुन्छ?</translation>
 <translation id="4791358705705538979">तपाईंलाई वेबमा चेकआउट जस्ता कार्यहरू पूरा गर्न मद्दत गर्छ</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index 8be5334..25809e5f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Passord lagres i Passordlagring på denne enheten</translation>
 <translation id="4766678251456904326">Legg til en konto på enheten</translation>
+<translation id="4769095993849849966">Nytt filnavn</translation>
 <translation id="4787736314074622408">Vil du slette <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Hjelper deg med å fullføre oppgaver, som for eksempel betaling, overalt på nettet</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
index e2cdbbc..53bfc7c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">ਵੀਡਿਓ</translation>
 <translation id="4766313118839197559">ਪਾਸਵਰਡ ਇਸ ਡੀਵਾਈਸ ਦੇ ਪਾਸਵਰਡ ਪ੍ਰਬੰਧਕ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤੇ ਗਏ ਹਨ</translation>
 <translation id="4766678251456904326">ਡੀਵਾਈਸ ਵਿੱਚ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ</translation>
+<translation id="4769095993849849966">ਨਵਾਂ ਫ਼ਾਈਲ ਨਾਮ</translation>
 <translation id="4787736314074622408">ਕੀ ਤੁਸੀਂ <ph name="ITEM_TITLE" /> ਨੂੰ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?</translation>
 <translation id="4791358705705538979">ਤੁਹਾਨੂੰ ਵੈੱਬ ਵਿੱਚ ਕਾਰਜ, ਜਿਵੇਂ ਕਿ ਚੈੱਕ-ਆਊਟ, ਪੂਰੇ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
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 6371c43..81f335b 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
@@ -684,6 +684,7 @@
 <translation id="4763480195061959176">vídeo</translation>
 <translation id="4766313118839197559">As senhas são salvas no Gerenciador de senhas neste dispositivo</translation>
 <translation id="4766678251456904326">Adicionar uma conta ao dispositivo</translation>
+<translation id="4769095993849849966">Novo nome do arquivo</translation>
 <translation id="4787736314074622408">Quer excluir o arquivo <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Ajuda você a realizar tarefas na Web, como finalizações de compra</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
index 50da321..b449e847 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">vídeo</translation>
 <translation id="4766313118839197559">As palavras-passe são guardadas no Gestor de Palavras-passe neste dispositivo</translation>
 <translation id="4766678251456904326">Adicionar conta ao dispositivo</translation>
+<translation id="4769095993849849966">Novo nome do ficheiro</translation>
 <translation id="4787736314074622408">Quer eliminar <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Ajuda a concluir tarefas, como pagamentos, na Web.</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
index 60ce676..09791665 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Parolele sunt salvate în Managerul de parole pe acest dispozitiv</translation>
 <translation id="4766678251456904326">Adaugă un cont pe dispozitiv</translation>
+<translation id="4769095993849849966">Numele fișierului nou</translation>
 <translation id="4787736314074622408">Dorești să ștergi <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Te ajută în activități precum finalizarea unei achiziții, oriunde pe web</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
index f0e5801..8f7dad0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">видео</translation>
 <translation id="4766313118839197559">Пароли сохранены в Менеджере паролей на этом устройстве.</translation>
 <translation id="4766678251456904326">Добавить аккаунт на устройство</translation>
+<translation id="4769095993849849966">Новое название файла</translation>
 <translation id="4787736314074622408">Удалить файл "<ph name="ITEM_TITLE" />"?</translation>
 <translation id="4791358705705538979">Помогает вам выполнять задачи в Интернете, например оформлять покупки</translation>
 <translation id="4794291718671962615"><ph name="URL" /> (<ph name="MEGABYTES" />)</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
index d93130a..fc988e4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">වීඩියෝ</translation>
 <translation id="4766313118839197559">මුරපද මෙම උපාංගයේ මුරපද කළමනාකරු තුළ සුරැකේ</translation>
 <translation id="4766678251456904326">උපාංගයට ගිණුමක් එක් කරන්න</translation>
+<translation id="4769095993849849966">නව ගොනුවේ නම</translation>
 <translation id="4787736314074622408">ඔබට <ph name="ITEM_TITLE" /> මැකීමට අවශ්‍ය ද?</translation>
 <translation id="4791358705705538979">වෙබය පුරා, ගෙවීම වැනි කාර්ය සම්පූර්ණ කිරීමට ඔබට උදව් කරයි</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
index 52abb0b..1eda440 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Heslá sa ukladajú do Správcu hesiel v tomto zariadení</translation>
 <translation id="4766678251456904326">Pridať účet do zariadenia</translation>
+<translation id="4769095993849849966">Nový názov súboru</translation>
 <translation id="4787736314074622408">Chcete súbor <ph name="ITEM_TITLE" /> odstrániť?</translation>
 <translation id="4791358705705538979">Pomáha vám dokončiť úlohy na internete, napríklad platenie</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
index 3ed1a06f..d3934d6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Gesla so shranjena v Upravitelju gesel v tej napravi.</translation>
 <translation id="4766678251456904326">Dodajte račun v napravo</translation>
+<translation id="4769095993849849966">Novo ime datoteke</translation>
 <translation id="4787736314074622408">Ali želite izbrisati »<ph name="ITEM_TITLE" />«?</translation>
 <translation id="4791358705705538979">Pomaga vam dokončati opravila v spletu, denimo dokončanje nakupa.</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
index 492c54f..5a9b77c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -684,6 +684,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Lösenorden sparas med Lösenordshantering på den här enheten</translation>
 <translation id="4766678251456904326">Lägg till konto på enheten</translation>
+<translation id="4769095993849849966">Nytt filnamn</translation>
 <translation id="4787736314074622408">Vill du radera <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Hjälper dig att slutföra uppgifter på webben. Den kan till exempel fylla i information automatiskt när du påbörjar en kassabetalning.</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
index f01c5943..557c8c8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">video</translation>
 <translation id="4766313118839197559">Manenosiri huhifadhiwa kwenye Kidhibiti cha Manenosiri katika kifaa hiki</translation>
 <translation id="4766678251456904326">Ongeza akaunti kwenye kifaa</translation>
+<translation id="4769095993849849966">Jina jipya la faili</translation>
 <translation id="4787736314074622408">Ungependa kufuta <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Hukusaidia kukamilisha majukumu, kama vile malipo, popote kwenye wavuti</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index 3345f57..573b23e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">వీడియో</translation>
 <translation id="4766313118839197559">పాస్‌వర్డ్‌లు ఈ పరికరంలోని పాస్‌వర్డ్ మేనేజర్‌లో సేవ్ చేయబడతాయి</translation>
 <translation id="4766678251456904326">పరికరానికి మరొక ఖాతాను జోడించండి</translation>
+<translation id="4769095993849849966">కొత్త ఫైల్ పేరు</translation>
 <translation id="4787736314074622408">మీరు <ph name="ITEM_TITLE" />‌ను తొలగించాలనుకుంటున్నారా?</translation>
 <translation id="4791358705705538979">వెబ్ అంతటా చెక్అవుట్ వంటి టాస్క్‌లను పూర్తి చేయడానికి మీకు సహాయపడుతుంది</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
index a4b54861..2497839 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">视频</translation>
 <translation id="4766313118839197559">系统会将密码保存到此设备上的密码管理工具中</translation>
 <translation id="4766678251456904326">向设备添加帐号</translation>
+<translation id="4769095993849849966">新文件名</translation>
 <translation id="4787736314074622408">是否要删除 <ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">帮助您在网上完成结算等任务</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
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 f5042d63..121fde23 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
@@ -683,6 +683,7 @@
 <translation id="4763480195061959176">ividiyo</translation>
 <translation id="4766313118839197559">Amaphasiwedi alondolozwa Kwisiphathi Sephasiwedi kule divayisi</translation>
 <translation id="4766678251456904326">Engeza i-akhawunti kudivayisi</translation>
+<translation id="4769095993849849966">Igama lefayela elisha</translation>
 <translation id="4787736314074622408">Ingabe ufuna ukusula i-<ph name="ITEM_TITLE" />?</translation>
 <translation id="4791358705705538979">Kusiza ukuba uqede imisebenzi, njengokukhipha, kuyo yonke iwebhu</translation>
 <translation id="4794291718671962615">(<ph name="MEGABYTES" />) <ph name="URL" /></translation>
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarSnapshotState.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarSnapshotState.java
index 0193a16..91eef17 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarSnapshotState.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarSnapshotState.java
@@ -25,8 +25,6 @@
  * if a new bitmap capture is warranted.
  */
 public class ToolbarSnapshotState {
-    static boolean sSkipVisibleHintAssertion;
-
     /**
      * Reasons that two snapshots are different. Treat this list as append only and keep it in sync
      * with ToolbarSnapshotDifference in enums.xml, as well as the proto in
@@ -83,14 +81,7 @@
         mOptionalButtonData = optionalButtonData;
         mVisualState = visualState;
         mUrlText = urlText;
-        boolean isVisibleTextPrefixHintValid = urlText != null && visibleTextPrefixHint != null
-                && TextUtils.indexOf(urlText, visibleTextPrefixHint) >= 0;
-        mVisibleTextPrefixHint = isVisibleTextPrefixHintValid ? visibleTextPrefixHint : null;
-        if (!sSkipVisibleHintAssertion && visibleTextPrefixHint != null) {
-            assert isVisibleTextPrefixHintValid : "The visible hint, " + visibleTextPrefixHint
-                                                  + ", should always be part of the URL text, "
-                                                  + urlText;
-        }
+        mVisibleTextPrefixHint = visibleTextPrefixHint;
         mSecurityIcon = securityIcon;
         mColorStateList = colorStateList;
         mIsShowingUpdateBadgeDuringLastCapture = isShowingUpdateBadgeDuringLastCapture;
@@ -137,7 +128,10 @@
     private boolean isVisibleUrlTextSame(ToolbarSnapshotState that) {
         if (mVisibleTextPrefixHint != null
                 && TextUtils.equals(mVisibleTextPrefixHint, that.mVisibleTextPrefixHint)) {
-            return true;
+            if (TextUtils.indexOf(mUrlText, mVisibleTextPrefixHint) >= 0) return true;
+            assert false : "The visible hint, " + mVisibleTextPrefixHint
+                           + ", should always be part of the URL text, "
+                           + mUrlText;
         }
         return TextUtils.equals(mUrlText, that.mUrlText);
     }
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarSnapshotStateTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarSnapshotStateTest.java
index b8af293..e6e0df9 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarSnapshotStateTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarSnapshotStateTest.java
@@ -11,7 +11,6 @@
 import androidx.annotation.DrawableRes;
 import androidx.annotation.Nullable;
 
-import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -54,11 +53,6 @@
         mDefaultToolbarSnapshotState = new ToolbarSnapshotStateBuilder().build();
     }
 
-    @After
-    public void after() {
-        ToolbarSnapshotState.sSkipVisibleHintAssertion = false;
-    }
-
     @Test
     public void testSameSnapshots() {
         ToolbarSnapshotState otherToolbarSnapshotState = new ToolbarSnapshotStateBuilder().build();
@@ -123,13 +117,11 @@
 
     @Test
     public void testSameUrlText_DifferentHintText() {
-        ToolbarSnapshotState.sSkipVisibleHintAssertion = true;
         ToolbarSnapshotState initialToolbarSnapshotState =
                 new ToolbarSnapshotStateBuilder().setVisibleTextPrefixHint("foo").build();
         ToolbarSnapshotState otherToolbarSnapshotState = new ToolbarSnapshotStateBuilder().build();
         Assert.assertEquals(ToolbarSnapshotDifference.NONE,
                 initialToolbarSnapshotState.getAnyDifference(otherToolbarSnapshotState));
-        ToolbarSnapshotState.sSkipVisibleHintAssertion = false;
     }
 
     @Test
diff --git a/chrome/browser/ui/app_list/app_list_model_updater.cc b/chrome/browser/ui/app_list/app_list_model_updater.cc
index ea1d250..e3bc4f0 100644
--- a/chrome/browser/ui/app_list/app_list_model_updater.cc
+++ b/chrome/browser/ui/app_list/app_list_model_updater.cc
@@ -22,45 +22,17 @@
 
 syncer::StringOrdinal AppListModelUpdater::GetFirstAvailablePosition() const {
   const std::vector<ChromeAppListItem*>& top_level_items = GetTopLevelItems();
+  auto last_item =
+      std::max_element(top_level_items.begin(), top_level_items.end(),
+                       [](ChromeAppListItem* const& item1,
+                          ChromeAppListItem* const& item2) -> bool {
+                         return item1->position().LessThan(item2->position());
+                       });
 
-  // Sort the top level items by their positions.
-  std::vector<ChromeAppListItem*> sorted_items(top_level_items);
-  std::sort(sorted_items.begin(), sorted_items.end(),
-            [](ChromeAppListItem* const& item1,
-               ChromeAppListItem* const& item2) -> bool {
-              return item1->position().LessThan(item2->position());
-            });
-
-  // Find the first empty position in app list. If all pages are full, return
-  // the next position after last item.
-  int items_in_page = 0;
-  for (size_t i = 0; i < sorted_items.size(); ++i) {
-    if (!sorted_items[i]->is_page_break()) {
-      ++items_in_page;
-      continue;
-    }
-
-    // There may be multiple "page break" items at the end of page while empty
-    // pages will not be shown in app list, so skip them.
-    const int max_items_in_page =
-        ash::SharedAppListConfig::instance().GetMaxNumOfItemsPerPage();
-    if (items_in_page > 0 && items_in_page < max_items_in_page) {
-      // Sometimes two continuous items may have the same position, so skip to
-      // the next available position.
-      // |i| should always be larger than 0 here because |items_in_page| is
-      // larger than 0.
-      if (sorted_items[i - 1]->position().LessThan(
-              sorted_items[i]->position())) {
-        return sorted_items[i - 1]->position().CreateBetween(
-            sorted_items[i]->position());
-      }
-    }
-    items_in_page = 0;
-  }
-
-  if (sorted_items.empty())
+  if (last_item == top_level_items.end())
     return syncer::StringOrdinal::CreateInitialOrdinal();
-  return sorted_items.back()->position().CreateAfter();
+
+  return (*last_item)->position().CreateAfter();
 }
 
 std::vector<ChromeSearchResult*>
diff --git a/chrome/browser/ui/app_list/app_list_syncable_service.cc b/chrome/browser/ui/app_list/app_list_syncable_service.cc
index cce9f48b..42fdd9d 100644
--- a/chrome/browser/ui/app_list/app_list_syncable_service.cc
+++ b/chrome/browser/ui/app_list/app_list_syncable_service.cc
@@ -39,7 +39,6 @@
 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_item.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_model_updater.h"
-#include "chrome/browser/ui/app_list/page_break_app_item.h"
 #include "chrome/browser/ui/app_list/reorder/app_list_reorder_core.h"
 #include "chrome/browser/ui/app_list/reorder/app_list_reorder_util.h"
 #include "chrome/browser/web_applications/web_app_id_constants.h"
@@ -157,8 +156,6 @@
     const ChromeAppListItem* item) {
   if (item->is_folder())
     return sync_pb::AppListSpecifics::TYPE_FOLDER;
-  else if (item->is_page_break())
-    return sync_pb::AppListSpecifics::TYPE_PAGE_BREAK;
   else
     return sync_pb::AppListSpecifics::TYPE_APP;
 }
@@ -301,7 +298,7 @@
       return;
 
     // Only sync folders and page breaks which are added from Ash.
-    if (!item->is_folder() && !item->is_page_break())
+    if (!item->is_folder())
       return;
     DCHECK(adding_item_id_.empty());
     adding_item_id_ = item->id();  // Ignore updates while adding an item.
@@ -730,7 +727,7 @@
   if (!sync_item)
     return;  // Item is not valid.
 
-  if (app_item->is_folder() || app_item->is_page_break()) {
+  if (app_item->is_folder()) {
     model_updater_->AddItem(std::move(app_item));
   } else if (AppIsOem(app_item->id())) {
     VLOG(2) << this << ": AddItem to OEM folder: " << sync_item->ToString();
@@ -1408,18 +1405,9 @@
           false);                 // It's a folder itself.
       return;
     }
-    case sync_pb::AppListSpecifics::TYPE_OBSOLETE_URL: {
+    case sync_pb::AppListSpecifics::TYPE_OBSOLETE_URL:
+    case sync_pb::AppListSpecifics::TYPE_PAGE_BREAK:
       return;
-    }
-    case sync_pb::AppListSpecifics::TYPE_PAGE_BREAK: {
-      // This is can be either a default page break item that was installed by
-      // default for new users, or a non-default page-break item that was
-      // added by the user. the ctor of PageBreakAppItem will update the
-      // newly-created item from its |sync_item|.
-      model_updater_->AddItem(std::make_unique<PageBreakAppItem>(
-          profile_, model_updater_.get(), sync_item, sync_item->item_id));
-      return;
-    }
   }
   NOTREACHED() << "Unrecognized sync item type: " << sync_item->ToString();
 }
@@ -1681,9 +1669,6 @@
     AppListSyncableService::SyncItem* sync_item) {
   DCHECK_EQ(sync_item->item_id, app_item->id());
 
-  // Page breaker should not be added in a folder.
-  DCHECK(!app_item->is_page_break() || app_item->folder_id().empty());
-
   bool changed = false;
   // Allow sync changes for parent only for non OEM app.
   if (sync_item->parent_id != app_item->folder_id() &&
@@ -1738,8 +1723,7 @@
   // crostini folder still use the first available position as the initial
   // position due to the concern over the possible regression in OEM folders.
   bool use_first_available_position =
-      (new_item->is_folder() || new_item->is_page_break()) &&
-      new_item->id() != ash::kCrostiniFolderId;
+      new_item->is_folder() && new_item->id() != ash::kCrostiniFolderId;
   if (!ash::features::IsLauncherAppSortEnabled() ||
       use_first_available_position) {
     new_item->SetChromePosition(model_updater_->GetFirstAvailablePosition());
diff --git a/chrome/browser/ui/app_list/app_list_syncable_service_unittest.cc b/chrome/browser/ui/app_list/app_list_syncable_service_unittest.cc
index fbe00bb1..fcecba0 100644
--- a/chrome/browser/ui/app_list/app_list_syncable_service_unittest.cc
+++ b/chrome/browser/ui/app_list/app_list_syncable_service_unittest.cc
@@ -1079,64 +1079,6 @@
   EXPECT_EQ(productivity_launcher ? kFolderId : "", child_item_2->folder_id());
 }
 
-TEST_F(AppListSyncableServiceTest, AddPageBreakItems) {
-  RemoveAllExistingItems();
-
-  // Populate item list with 2 items.
-  const std::string kItemId1 = GenerateId("item_id1");
-  const std::string kItemId2 = GenerateId("item_id2");
-
-  syncer::SyncDataList sync_list;
-  sync_list.push_back(CreateAppRemoteData(kItemId1, "item_name",
-                                          "" /* parent_id */, "c" /* ordinal */,
-                                          "pinordinal"));
-  sync_list.push_back(CreateAppRemoteData(kItemId2, "item_name",
-                                          "" /* parent_id */, "d" /* ordinal */,
-                                          "pinordinal"));
-
-  app_list_syncable_service()->MergeDataAndStartSyncing(
-      syncer::APP_LIST, sync_list,
-      std::make_unique<syncer::FakeSyncChangeProcessor>(),
-      std::make_unique<syncer::SyncErrorFactoryMock>());
-  content::RunAllTasksUntilIdle();
-
-  ASSERT_TRUE(GetSyncItem(kItemId1));
-  ASSERT_TRUE(GetSyncItem(kItemId2));
-
-  // Add a "page break" items before 1st item, after 1st item and after 2nd
-  // item.
-  const std::string kPageBreakItemId1 = GenerateId("page_break_item_id1");
-  const std::string kPageBreakItemId2 = GenerateId("page_break_item_id2");
-  const std::string kPageBreakItemId3 = GenerateId("page_break_item_id3");
-  AppListModelUpdater* model_updater = GetModelUpdater();
-  std::unique_ptr<ChromeAppListItem> page_break_item1 =
-      std::make_unique<ChromeAppListItem>(profile_.get(), kPageBreakItemId1,
-                                          model_updater);
-  std::unique_ptr<ChromeAppListItem> page_break_item2 =
-      std::make_unique<ChromeAppListItem>(profile_.get(), kPageBreakItemId2,
-                                          model_updater);
-  std::unique_ptr<ChromeAppListItem> page_break_item3 =
-      std::make_unique<ChromeAppListItem>(profile_.get(), kPageBreakItemId3,
-                                          model_updater);
-  ItemTestApi(page_break_item1.get()).SetPosition(syncer::StringOrdinal("bm"));
-  page_break_item1->SetIsPageBreak(true);
-  ItemTestApi(page_break_item2.get()).SetPosition(syncer::StringOrdinal("cm"));
-  page_break_item2->SetIsPageBreak(true);
-  ItemTestApi(page_break_item3.get()).SetPosition(syncer::StringOrdinal("dm"));
-  page_break_item3->SetIsPageBreak(true);
-  app_list_syncable_service()->AddItem(std::move(page_break_item1));
-  app_list_syncable_service()->AddItem(std::move(page_break_item2));
-  app_list_syncable_service()->AddItem(std::move(page_break_item3));
-  content::RunAllTasksUntilIdle();
-
-  // Only 2nd "page break" item remains.
-  ASSERT_FALSE(GetSyncItem(kPageBreakItemId1));
-  ASSERT_TRUE(GetSyncItem(kItemId1));
-  ASSERT_TRUE(GetSyncItem(kPageBreakItemId2));
-  ASSERT_TRUE(GetSyncItem(kItemId2));
-  ASSERT_FALSE(GetSyncItem(kPageBreakItemId3));
-}
-
 TEST_F(AppListSyncableServiceTest, PruneRedundantPageBreakItems) {
   RemoveAllExistingItems();
 
@@ -1432,24 +1374,8 @@
   EXPECT_TRUE(last_app_position.CreateAfter().Equals(
       model_updater->GetFirstAvailablePosition()));
 
-  // Add a "page break" item at the end of first page.
-  std::unique_ptr<ChromeAppListItem> page_break_item =
-      std::make_unique<ChromeAppListItem>(
-          profile_.get(), GenerateId("page_break_item_id"), model_updater);
-  const syncer::StringOrdinal page_break_position =
-      last_app_position.CreateAfter();
-  ItemTestApi(page_break_item.get()).SetPosition(page_break_position);
-  page_break_item->SetIsPageBreak(true);
-  model_updater->AddItem((std::move(page_break_item)));
-  // For productivity launcher, page breaks are ignored by app list model
-  // updater.
-  if (ash::features::IsProductivityLauncherEnabled()) {
-    EXPECT_TRUE(last_app_position.CreateAfter().Equals(
-        model_updater->GetFirstAvailablePosition()));
-  } else {
-    EXPECT_TRUE(last_app_position.CreateBetween(page_break_position)
-                    .Equals(model_updater->GetFirstAvailablePosition()));
-  }
+  EXPECT_TRUE(last_app_position.CreateAfter().Equals(
+      model_updater->GetFirstAvailablePosition()));
 
   // Fill up the first page.
   std::unique_ptr<ChromeAppListItem> app_item =
@@ -1458,52 +1384,10 @@
           GenerateId("item_id" + base::NumberToString(max_items_in_first_page)),
           model_updater);
   const syncer::StringOrdinal new_item_position =
-      last_app_position.CreateBetween(page_break_position);
+      last_app_position.CreateAfter();
   ItemTestApi(app_item.get()).SetPosition(new_item_position);
   model_updater->AddItem(std::move(app_item));
-  // For productivity launcher, page breaks are ignored by app list model
-  // updater.
-  if (ash::features::IsProductivityLauncherEnabled()) {
-    EXPECT_TRUE(new_item_position.CreateAfter().Equals(
-        model_updater->GetFirstAvailablePosition()));
-  } else {
-    EXPECT_TRUE(page_break_position.CreateAfter().Equals(
-        model_updater->GetFirstAvailablePosition()));
-  }
-}
-
-// Test that installing an app between two items with the same position will put
-// that app at next available position. The test also ensures that no crash
-// occurs (See https://crbug.com/907637).
-TEST_F(AppListSyncableServiceTest, FirstAvailablePositionNotExist) {
-  RemoveAllExistingItems();
-
-  // Populate the first page with items and leave 1 empty slot at the end.
-  const int max_items_in_first_page =
-      ash::SharedAppListConfig::instance().GetMaxNumOfItemsPerPage();
-  syncer::StringOrdinal last_app_position =
-      syncer::StringOrdinal::CreateInitialOrdinal();
-  AppListModelUpdater* model_updater = GetModelUpdater();
-  for (int i = 0; i < max_items_in_first_page - 1; ++i) {
-    std::unique_ptr<ChromeAppListItem> item =
-        std::make_unique<ChromeAppListItem>(
-            profile_.get(), GenerateId("item_id" + base::NumberToString(i)),
-            model_updater);
-    ItemTestApi(item.get()).SetPosition(last_app_position);
-    model_updater->AddItem(std::move(item));
-    if (i < max_items_in_first_page - 2)
-      last_app_position = last_app_position.CreateAfter();
-  }
-
-  // Add a "page break" item at the end of first page with the same position as
-  // last app item.
-  std::unique_ptr<ChromeAppListItem> page_break_item =
-      std::make_unique<ChromeAppListItem>(
-          profile_.get(), GenerateId("page_break_item_id"), model_updater);
-  ItemTestApi(page_break_item.get()).SetPosition(last_app_position);
-  page_break_item->SetIsPageBreak(true);
-  model_updater->AddItem((std::move(page_break_item)));
-  EXPECT_TRUE(last_app_position.CreateAfter().Equals(
+  EXPECT_TRUE(new_item_position.CreateAfter().Equals(
       model_updater->GetFirstAvailablePosition()));
 }
 
diff --git a/chrome/browser/ui/app_list/app_list_util.cc b/chrome/browser/ui/app_list/app_list_util.cc
index 09071b15..e3b95a4 100644
--- a/chrome/browser/ui/app_list/app_list_util.cc
+++ b/chrome/browser/ui/app_list/app_list_util.cc
@@ -24,13 +24,13 @@
 namespace app_list {
 std::unique_ptr<ash::AppListItemMetadata> GenerateItemMetadataFromSyncItem(
     const app_list::AppListSyncableService::SyncItem& sync_item) {
+  DCHECK(sync_item.item_type != sync_pb::AppListSpecifics::TYPE_PAGE_BREAK);
+
   auto item_meta_data = std::make_unique<ash::AppListItemMetadata>();
   item_meta_data->id = sync_item.item_id;
   item_meta_data->position = sync_item.item_ordinal;
   item_meta_data->is_folder =
       (sync_item.item_type == sync_pb::AppListSpecifics::TYPE_FOLDER);
-  item_meta_data->is_page_break =
-      (sync_item.item_type == sync_pb::AppListSpecifics::TYPE_PAGE_BREAK);
   item_meta_data->name = sync_item.item_name;
   item_meta_data->folder_id = sync_item.parent_id;
   if (ash::features::IsLauncherItemColorSyncEnabled())
diff --git a/chrome/browser/ui/app_list/chrome_app_list_item.cc b/chrome/browser/ui/app_list/chrome_app_list_item.cc
index 4ab9d643..8fe333f6 100644
--- a/chrome/browser/ui/app_list/chrome_app_list_item.cc
+++ b/chrome/browser/ui/app_list/chrome_app_list_item.cc
@@ -222,10 +222,6 @@
     updater->SetItemIsSystemFolder(id(), is_system_folder);
 }
 
-void ChromeAppListItem::SetIsPageBreak(bool is_page_break) {
-  metadata_->is_page_break = is_page_break;
-}
-
 void ChromeAppListItem::SetIsNewInstall(bool is_new_install) {
   metadata_->is_new_install = is_new_install;
   AppListModelUpdater* updater = model_updater();
diff --git a/chrome/browser/ui/app_list/chrome_app_list_item.h b/chrome/browser/ui/app_list/chrome_app_list_item.h
index bf74e792..6c0cfe6 100644
--- a/chrome/browser/ui/app_list/chrome_app_list_item.h
+++ b/chrome/browser/ui/app_list/chrome_app_list_item.h
@@ -67,7 +67,6 @@
   bool is_system_folder() const { return metadata_->is_system_folder; }
   const gfx::ImageSkia& icon() const { return metadata_->icon; }
   const ash::IconColor& icon_color() const { return metadata_->icon_color; }
-  bool is_page_break() const { return metadata_->is_page_break; }
   bool is_new_install() const { return metadata_->is_new_install; }
   bool is_ephemeral() const { return metadata_->is_ephemeral; }
 
@@ -84,7 +83,6 @@
   void SetIcon(const gfx::ImageSkia& icon, bool is_place_holder_icon);
   void SetAppStatus(ash::AppStatus app_status);
   void SetFolderId(const std::string& folder_id);
-  void SetIsPageBreak(bool is_page_break);
   void SetIsSystemFolder(bool is_system_folder);
   void SetIsNewInstall(bool is_new_install);
 
diff --git a/chrome/browser/ui/app_list/chrome_app_list_item_manager.cc b/chrome/browser/ui/app_list/chrome_app_list_item_manager.cc
index 3fed69e..84c371d 100644
--- a/chrome/browser/ui/app_list/chrome_app_list_item_manager.cc
+++ b/chrome/browser/ui/app_list/chrome_app_list_item_manager.cc
@@ -109,8 +109,7 @@
     ChromeAppListItem* item = entry.second.get();
     DCHECK(item->position().IsValid())
         << "Item with invalid position: id=" << item->id()
-        << ", name=" << item->name() << ", is_folder=" << item->is_folder()
-        << ", is_page_break=" << item->is_page_break();
+        << ", name=" << item->name() << ", is_folder=" << item->is_folder();
     if (item->folder_id().empty() && item->position().IsValid())
       top_level_items.emplace_back(item);
   }
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 1d1be20c..d1f6f6f1 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
@@ -163,14 +163,6 @@
   std::unique_ptr<ash::AppListItemMetadata> item_data =
       app_item->CloneMetadata();
 
-  // With ProductivityLauncher, ignore page break items because empty slots
-  // only exist on the last launcher page. Therefore syncing on page break items
-  // is unnecessary.
-  if (item_data->is_page_break &&
-      ash::features::IsProductivityLauncherEnabled()) {
-    return;
-  }
-
   // Add to Chrome first leave all updates to observer methods.
   item_manager_->AddChromeItem(std::move(app_item));
   const std::string folder_id = item_data->folder_id;
@@ -188,7 +180,6 @@
     const std::string& folder_id,
     bool add_from_local) {
   DCHECK(!app_item->is_folder());
-  DCHECK(!app_item->is_page_break());
 
   if (is_under_temporary_sort()) {
     // Store `app_item`'s position before calculating a new position under the
@@ -683,32 +674,13 @@
     // Otherwise, we detect an item is created in Ash which is not added into
     // our Chrome list yet. This only happens when a folder is created or when a
     // page break is added.
-    DCHECK(item->is_folder() || item->is_page_break());
+    DCHECK(item->is_folder());
     std::unique_ptr<ChromeAppListItem> new_item =
         std::make_unique<ChromeAppListItem>(profile_, item->id(), this);
     new_item->SetMetadata(item->CloneMetadata());
     chrome_item = item_manager_->AddChromeItem(std::move(new_item));
   }
 
-  // Do not propagate the addition of page break items from Ash side to remote
-  // side if ProductivityLauncher feature is enabled. Because:
-  // (1) If a remote device enables ProductivityLauncher as well, it will
-  // generate a page break item by its own when the current launcher page has no
-  // space for extra icons. In other words, it does not need to sync on page
-  // break items with other devices.
-  // (2) If a remote device disables the feature flag, syncing on page break
-  // items with those with the flag enabled does not bring the consistent
-  // launcher layout.
-  // TODO(crbug.com/1233729): Simply stopping the syncs on page break items may
-  // lead to overflow pages on the device with the feature flag disabled.
-  // Therefore we should handle the page break item sync in a better way.
-  // TODO(crbug.com/1234588): Ideally we should not send page breaks from/to the
-  // app list controller if the feature to remove spaces is enabled.
-  if (chrome_item->is_page_break() &&
-      ash::features::IsProductivityLauncherEnabled()) {
-    return;
-  }
-
   // Notify observers that an item is added to the AppListModel in ash.
   // Note that items of apps are added from Chrome side so there would be an
   // existing |chrome_item| when running here.
@@ -743,7 +715,7 @@
     temporary_sort_manager_->DeletePermanentPosition(item->id());
   }
 
-  if (!item->is_folder() && !item->is_page_break())
+  if (!item->is_folder())
     return;
 
   ChromeAppListItem* chrome_item = FindItem(item->id());
diff --git a/chrome/browser/ui/app_list/page_break_app_item.cc b/chrome/browser/ui/app_list/page_break_app_item.cc
deleted file mode 100644
index f2ade98..0000000
--- a/chrome/browser/ui/app_list/page_break_app_item.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/app_list/page_break_app_item.h"
-
-// static
-const char PageBreakAppItem::kItemType[] = "DefaultPageBreak";
-
-PageBreakAppItem::PageBreakAppItem(
-    Profile* profile,
-    AppListModelUpdater* model_updater,
-    const app_list::AppListSyncableService::SyncItem* sync_item,
-    const std::string& app_id)
-    : ChromeAppListItem(profile, app_id) {
-  SetIsPageBreak(true);
-
-  if (sync_item) {
-    DCHECK_EQ(sync_item->item_type, sync_pb::AppListSpecifics::TYPE_PAGE_BREAK);
-    if (sync_item->item_ordinal.IsValid()) {
-      InitFromSync(sync_item);
-      return;
-    }
-  }
-
-  SetPosition(CalculateDefaultPositionIfApplicable());
-
-  // Set model updater last to avoid being called during construction.
-  set_model_updater(model_updater);
-}
-
-PageBreakAppItem::~PageBreakAppItem() = default;
-
-// ChromeAppListItem:
-void PageBreakAppItem::Activate(int event_flags) {
-  NOTREACHED();
-}
-
-const char* PageBreakAppItem::GetItemType() const {
-  return kItemType;
-}
diff --git a/chrome/browser/ui/app_list/page_break_app_item.h b/chrome/browser/ui/app_list/page_break_app_item.h
deleted file mode 100644
index c264af131..0000000
--- a/chrome/browser/ui/app_list/page_break_app_item.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2018 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_APP_LIST_PAGE_BREAK_APP_ITEM_H_
-#define CHROME_BROWSER_UI_APP_LIST_PAGE_BREAK_APP_ITEM_H_
-
-#include "chrome/browser/ui/app_list/chrome_app_list_item.h"
-
-// Represents a page break item in the app list.
-class PageBreakAppItem : public ChromeAppListItem {
- public:
-  static const char kItemType[];
-
-  // If a page break item with ID |app_id| exists in the local sync items as
-  // |sync_item| (i.e. non-null), then this newly created item will be updated
-  // from |sync_item|.
-  PageBreakAppItem(Profile* profile,
-                   AppListModelUpdater* model_updater,
-                   const app_list::AppListSyncableService::SyncItem* sync_item,
-                   const std::string& app_id);
-
-  PageBreakAppItem(const PageBreakAppItem&) = delete;
-  PageBreakAppItem& operator=(const PageBreakAppItem&) = delete;
-
-  ~PageBreakAppItem() override;
-
-  // ChromeAppListItem:
-  void Activate(int event_flags) override;
-  const char* GetItemType() const override;
-};
-
-#endif  // CHROME_BROWSER_UI_APP_LIST_PAGE_BREAK_APP_ITEM_H_
diff --git a/chrome/browser/ui/app_list/reorder/app_list_reorder_util.h b/chrome/browser/ui/app_list/reorder/app_list_reorder_util.h
index e52a1ee..b03c67f 100644
--- a/chrome/browser/ui/app_list/reorder/app_list_reorder_util.h
+++ b/chrome/browser/ui/app_list/reorder/app_list_reorder_util.h
@@ -124,9 +124,6 @@
     const absl::optional<std::string>& ignored_id) {
   std::vector<SyncItemWrapper<T>> wrappers;
   for (const auto* app_list_item : app_list_items) {
-    if (app_list_item->is_page_break())
-      continue;
-
     if (ignored_id && *ignored_id == app_list_item->id())
       continue;
 
diff --git a/chrome/browser/ui/app_list/test/fake_app_list_model_updater.cc b/chrome/browser/ui/app_list/test/fake_app_list_model_updater.cc
index 58cea17..f889b28d 100644
--- a/chrome/browser/ui/app_list/test/fake_app_list_model_updater.cc
+++ b/chrome/browser/ui/app_list/test/fake_app_list_model_updater.cc
@@ -123,8 +123,7 @@
   for (auto& item : items_) {
     DCHECK(item->position().IsValid())
         << "Item with invalid position: id=" << item->id()
-        << ", name=" << item->name() << ", is_folder=" << item->is_folder()
-        << ", is_page_break=" << item->is_page_break();
+        << ", name=" << item->name() << ", is_folder=" << item->is_folder();
     if (item->folder_id().empty() && item->position().IsValid())
       top_level_items.emplace_back(item.get());
   }
diff --git a/chrome/browser/ui/hats/hats_service.cc b/chrome/browser/ui/hats/hats_service.cc
index d4dfe3b..5e8b232f 100644
--- a/chrome/browser/ui/hats/hats_service.cc
+++ b/chrome/browser/ui/hats/hats_service.cc
@@ -75,6 +75,8 @@
     "ts-trusted-surface";
 constexpr char kHatsSurveyTriggerTrustSafetyTransactions[] = "ts-transactions";
 constexpr char kHatsSurveyTriggerWhatsNew[] = "whats-new";
+constexpr char kHatsSurveyTriggerTrustSafetyV2TrustedSurface[] =
+    "ts-v2-trusted-surface";
 
 constexpr char kHatsNextSurveyTriggerIDTesting[] =
     "HLpeYy5Av0ugnJ3q1cK0XzzA8UHv";
@@ -248,6 +250,13 @@
       std::vector<std::string>{"Stable channel", "3P cookies blocked",
                                "Privacy Sandbox enabled"});
 
+  // Trust & Safety Sentiment surveys - Version 2.
+  survey_configs.emplace_back(
+      &features::kTrustSafetySentimentSurveyV2,
+      kHatsSurveyTriggerTrustSafetyV2TrustedSurface,
+      features::kTrustSafetySentimentSurveyV2TrustedSurfaceTriggerId.Get(),
+      std::vector<std::string>{"Interacted with Page Info"});
+
   // Accuracy tips survey.
   survey_configs.emplace_back(
       &accuracy_tips::features::kAccuracyTipsSurveyFeature,
diff --git a/chrome/browser/ui/hats/hats_service.h b/chrome/browser/ui/hats/hats_service.h
index 081abdd..45a4b71 100644
--- a/chrome/browser/ui/hats/hats_service.h
+++ b/chrome/browser/ui/hats/hats_service.h
@@ -61,6 +61,7 @@
 extern const char kHatsSurveyTriggerTrustSafetyPrivacySettings[];
 extern const char kHatsSurveyTriggerTrustSafetyTrustedSurface[];
 extern const char kHatsSurveyTriggerTrustSafetyTransactions[];
+extern const char kHatsSurveyTriggerTrustSafetyV2TrustedSurface[];
 extern const char kHatsSurveyTriggerWhatsNew[];
 
 // The Trigger ID for a test HaTS Next survey which is available for testing
diff --git a/chrome/browser/ui/hats/trust_safety_sentiment_service.cc b/chrome/browser/ui/hats/trust_safety_sentiment_service.cc
index 9389b021..3627c9e 100644
--- a/chrome/browser/ui/hats/trust_safety_sentiment_service.cc
+++ b/chrome/browser/ui/hats/trust_safety_sentiment_service.cc
@@ -31,25 +31,47 @@
 namespace {
 
 base::TimeDelta GetMinTimeToPrompt() {
-  return features::kTrustSafetySentimentSurveyMinTimeToPrompt.Get();
+  return base::FeatureList::IsEnabled(features::kTrustSafetySentimentSurveyV2)
+             ? features::kTrustSafetySentimentSurveyV2MinTimeToPrompt.Get()
+             : features::kTrustSafetySentimentSurveyMinTimeToPrompt.Get();
 }
 
 base::TimeDelta GetMaxTimeToPrompt() {
-  return features::kTrustSafetySentimentSurveyMaxTimeToPrompt.Get();
+  return base::FeatureList::IsEnabled(features::kTrustSafetySentimentSurveyV2)
+             ? features::kTrustSafetySentimentSurveyV2MaxTimeToPrompt.Get()
+             : features::kTrustSafetySentimentSurveyMaxTimeToPrompt.Get();
 }
 
 int GetRequiredNtpCount() {
-  return base::RandInt(
-      features::kTrustSafetySentimentSurveyNtpVisitsMinRange.Get(),
-      features::kTrustSafetySentimentSurveyNtpVisitsMaxRange.Get());
+  return base::FeatureList::IsEnabled(features::kTrustSafetySentimentSurveyV2)
+             ? base::RandInt(
+                   features::kTrustSafetySentimentSurveyV2NtpVisitsMinRange
+                       .Get(),
+                   features::kTrustSafetySentimentSurveyV2NtpVisitsMaxRange
+                       .Get())
+             : base::RandInt(
+                   features::kTrustSafetySentimentSurveyNtpVisitsMinRange.Get(),
+                   features::kTrustSafetySentimentSurveyNtpVisitsMaxRange
+                       .Get());
 }
 
 int GetMaxRequiredNtpCount() {
-  return features::kTrustSafetySentimentSurveyNtpVisitsMaxRange.Get();
+  return base::FeatureList::IsEnabled(features::kTrustSafetySentimentSurveyV2)
+             ? features::kTrustSafetySentimentSurveyV2NtpVisitsMaxRange.Get()
+             : features::kTrustSafetySentimentSurveyNtpVisitsMaxRange.Get();
 }
 
 std::string GetHatsTriggerForFeatureArea(
     TrustSafetySentimentService::FeatureArea feature_area) {
+  if (base::FeatureList::IsEnabled(features::kTrustSafetySentimentSurveyV2)) {
+    switch (feature_area) {
+      case (TrustSafetySentimentService::FeatureArea::kTrustedSurface):
+        return kHatsSurveyTriggerTrustSafetyV2TrustedSurface;
+      default:
+        NOTREACHED();
+        return "";
+    }
+  }
   switch (feature_area) {
     case (TrustSafetySentimentService::FeatureArea::kPrivacySettings):
       return kHatsSurveyTriggerTrustSafetyPrivacySettings;
@@ -80,7 +102,53 @@
   }
 }
 
+// Checks that this feature is valid for the current version.
+bool VersionCheck(TrustSafetySentimentService::FeatureArea feature_area) {
+  bool isV2 =
+      base::FeatureList::IsEnabled(features::kTrustSafetySentimentSurveyV2);
+  switch (feature_area) {
+    // Version 1 only
+    case (TrustSafetySentimentService::FeatureArea::kPrivacySettings):
+    case (TrustSafetySentimentService::FeatureArea::kTransactions):
+    case (TrustSafetySentimentService::FeatureArea::
+              kPrivacySandbox3ConsentAccept):
+    case (TrustSafetySentimentService::FeatureArea::
+              kPrivacySandbox3ConsentDecline):
+    case (TrustSafetySentimentService::FeatureArea::
+              kPrivacySandbox3NoticeDismiss):
+    case (TrustSafetySentimentService::FeatureArea::kPrivacySandbox3NoticeOk):
+    case (TrustSafetySentimentService::FeatureArea::
+              kPrivacySandbox3NoticeSettings):
+    case (TrustSafetySentimentService::FeatureArea::
+              kPrivacySandbox3NoticeLearnMore):
+      return isV2 == false;
+    // Version 2 only
+    // Both Versions
+    case (TrustSafetySentimentService::FeatureArea::kTrustedSurface):
+      return true;
+    default:
+      NOTREACHED();
+      return false;
+  }
+}
+
 bool ProbabilityCheck(TrustSafetySentimentService::FeatureArea feature_area) {
+  if (!VersionCheck(feature_area)) {
+    return false;
+  }
+
+  if (base::FeatureList::IsEnabled(features::kTrustSafetySentimentSurveyV2)) {
+    switch (feature_area) {
+      case (TrustSafetySentimentService::FeatureArea::kTrustedSurface):
+        return base::RandDouble() <
+               features::kTrustSafetySentimentSurveyV2TrustedSurfaceProbability
+                   .Get();
+      default:
+        NOTREACHED();
+        return false;
+    }
+  }
+
   switch (feature_area) {
     case (TrustSafetySentimentService::FeatureArea::kPrivacySettings):
       return base::RandDouble() <
@@ -342,10 +410,13 @@
 void TrustSafetySentimentService::PageInfoClosed() {
   DCHECK(page_info_state_);
 
+  base::TimeDelta threshold =
+      base::FeatureList::IsEnabled(features::kTrustSafetySentimentSurveyV2)
+          ? features::kTrustSafetySentimentSurveyV2TrustedSurfaceTime.Get()
+          : features::kTrustSafetySentimentSurveyTrustedSurfaceTime.Get();
   // Record a trigger if either the user had page info open for the required
   // time, or if they interacted with it.
-  if (base::Time::Now() - page_info_state_->opened_time >=
-          features::kTrustSafetySentimentSurveyTrustedSurfaceTime.Get() ||
+  if (base::Time::Now() - page_info_state_->opened_time >= threshold ||
       page_info_state_->interacted) {
     TriggerOccurred(
         FeatureArea::kTrustedSurface,
diff --git a/chrome/browser/ui/hats/trust_safety_sentiment_service.h b/chrome/browser/ui/hats/trust_safety_sentiment_service.h
index c335a817..d49679e 100644
--- a/chrome/browser/ui/hats/trust_safety_sentiment_service.h
+++ b/chrome/browser/ui/hats/trust_safety_sentiment_service.h
@@ -116,6 +116,10 @@
                            PrivacySettingsProductSpecificData);
   FRIEND_TEST_ALL_PREFIXES(TrustSafetySentimentServiceTest,
                            InteractedWithPrivacySandbox3ConsentAccept);
+  FRIEND_TEST_ALL_PREFIXES(TrustSafetySentimentServiceTest,
+                           Eligibility_V2Enabled);
+  FRIEND_TEST_ALL_PREFIXES(TrustSafetySentimentServiceTest,
+                           Eligibility_V1FeatureWhileV2Enabled);
 
   // Struct representing a trigger (user action relevant to T&S) that previously
   // occurred, and is awaiting the appropriate eligibility steps before causing
diff --git a/chrome/browser/ui/hats/trust_safety_sentiment_service_unittest.cc b/chrome/browser/ui/hats/trust_safety_sentiment_service_unittest.cc
index 67f7b6b..469ac67e 100644
--- a/chrome/browser/ui/hats/trust_safety_sentiment_service_unittest.cc
+++ b/chrome/browser/ui/hats/trust_safety_sentiment_service_unittest.cc
@@ -116,6 +116,30 @@
         });
   }
 
+  struct FeatureParamsV2 {
+    std::string min_time_to_prompt = "2m";
+    std::string max_time_to_prompt = "60m";
+    std::string ntp_visits_min_range = "2";
+    std::string ntp_visits_max_range = "4";
+    std::string trusted_surface_time = "5s";
+    std::string trusted_surface_probability = "0.4";
+    std::string trusted_surface_trigger_id = "trusted-surface-test";
+  };
+
+  void SetupFeatureParametersV2(FeatureParamsV2 params) {
+    feature_list()->InitAndEnableFeatureWithParameters(
+        features::kTrustSafetySentimentSurveyV2,
+        {
+            {"min-time-to-prompt", params.min_time_to_prompt},
+            {"max-time-to-prompt", params.max_time_to_prompt},
+            {"ntp-visits-min-range", params.ntp_visits_min_range},
+            {"ntp-visits-max-range", params.ntp_visits_max_range},
+            {"trusted-surface-time", params.trusted_surface_time},
+            {"trusted-surface-probability", params.trusted_surface_probability},
+            {"trusted-surface-trigger-id", params.trusted_surface_trigger_id},
+        });
+  }
+
   void CheckHistograms(
       const std::set<TrustSafetySentimentService::FeatureArea>& triggered_areas,
       const std::set<TrustSafetySentimentService::FeatureArea>&
@@ -764,3 +788,86 @@
                    TrustSafetySentimentService::FeatureArea::kIneligible},
                   {TrustSafetySentimentService::FeatureArea::kPrivacySettings});
 }
+
+TEST_F(TrustSafetySentimentServiceTest, Eligibility_V2Enabled) {
+  // A survey from version 2 is only shown if the right conditions are met.
+  FeatureParamsV2 params;
+  params.trusted_surface_probability = "1.0";
+  params.min_time_to_prompt = "2m";
+  params.max_time_to_prompt = "4m";
+  params.ntp_visits_min_range = "2";
+  params.ntp_visits_max_range = "2";
+  SetupFeatureParametersV2(params);
+
+  EXPECT_CALL(*mock_hats_service(), LaunchSurvey(_, _, _, _, _)).Times(0);
+  service()->TriggerOccurred(
+      TrustSafetySentimentService::FeatureArea::kTrustedSurface, {});
+
+  service()->OpenedNewTabPage();
+  service()->OpenedNewTabPage();
+
+  // Survey should not shown because although the ntp visits condition is met,
+  // the time is not.
+  CheckHistograms({TrustSafetySentimentService::FeatureArea::kTrustedSurface},
+                  {});
+  testing::Mock::VerifyAndClearExpectations(mock_hats_service());
+
+  task_environment()->AdvanceClock(base::Minutes(3));
+  // Assert the V2 survey is called and not the V1.
+  EXPECT_CALL(
+      *mock_hats_service(),
+      LaunchSurvey(kHatsSurveyTriggerTrustSafetyTrustedSurface, _, _, _, _))
+      .Times(0);
+  EXPECT_CALL(
+      *mock_hats_service(),
+      LaunchSurvey(kHatsSurveyTriggerTrustSafetyV2TrustedSurface, _, _, _, _));
+
+  // A survey should be shown because we are now within the right time.
+  service()->OpenedNewTabPage();
+  CheckHistograms({TrustSafetySentimentService::FeatureArea::kTrustedSurface},
+                  {TrustSafetySentimentService::FeatureArea::kTrustedSurface});
+}
+
+TEST_F(TrustSafetySentimentServiceTest, Eligibility_V1FeatureWhileV2Enabled) {
+  // A survey from V1 only is not shown because V2 is enabled.
+  FeatureParams params;
+  params.privacy_settings_probability = "1.0";
+  params.min_time_to_prompt = "0s";
+  params.ntp_visits_min_range = "0";
+  params.ntp_visits_max_range = "0";
+  feature_list()->InitWithFeaturesAndParameters(
+      {{features::kTrustSafetySentimentSurvey,
+        {
+            {"min-time-to-prompt", params.min_time_to_prompt},
+            {"max-time-to-prompt", params.max_time_to_prompt},
+            {"ntp-visits-min-range", params.ntp_visits_min_range},
+            {"ntp-visits-max-range", params.ntp_visits_max_range},
+            {"trusted-surface-probability", params.trusted_surface_probability},
+            {"trusted-surface-trigger-id", params.trusted_surface_trigger_id},
+        }},
+       {features::kTrustSafetySentimentSurveyV2, {}}},
+      {});
+
+  EXPECT_CALL(*mock_hats_service(), LaunchSurvey(_, _, _, _, _)).Times(0);
+  service()->TriggerOccurred(
+      TrustSafetySentimentService::FeatureArea::kPrivacySettings, {});
+
+  service()->OpenedNewTabPage();
+
+  // Survey should not shown be shown as triggered because v2 enabled.
+  CheckHistograms({}, {});
+  testing::Mock::VerifyAndClearExpectations(mock_hats_service());
+
+  // Disable V2 and now the same trigger should work.
+  feature_list()->Reset();
+  SetupFeatureParameters(params);
+
+  EXPECT_CALL(
+      *mock_hats_service(),
+      LaunchSurvey(kHatsSurveyTriggerTrustSafetyPrivacySettings, _, _, _, _));
+  service()->TriggerOccurred(
+      TrustSafetySentimentService::FeatureArea::kPrivacySettings, {});
+  service()->OpenedNewTabPage();
+  CheckHistograms({TrustSafetySentimentService::FeatureArea::kPrivacySettings},
+                  {TrustSafetySentimentService::FeatureArea::kPrivacySettings});
+}
diff --git a/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc b/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc
index ee088bf..7adc3f48 100644
--- a/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc
+++ b/chrome/browser/ui/keyboard_lock_interactive_browsertest.cc
@@ -196,8 +196,14 @@
                                          false, false, false);
 }
 
+// https://crbug.com/1382717 Flaky on Linux
+#if BUILDFLAG(IS_LINUX)
+#define MAYBE_RequestedButNotActive DISABLED_RequestedButNotActive
+#else
+#define MAYBE_RequestedButNotActive RequestedButNotActive
+#endif
 IN_PROC_BROWSER_TEST_F(KeyboardLockInteractiveBrowserTest,
-                       RequestedButNotActive) {
+                       MAYBE_RequestedButNotActive) {
   ASSERT_NO_FATAL_FAILURE(StartFullscreenLockPage());
   ASSERT_TRUE(DisablePreventDefaultOnTestPage());
   ASSERT_TRUE(KeyboardLockApiExists());
diff --git a/chrome/browser/ui/views/permissions/chip_controller.cc b/chrome/browser/ui/views/permissions/chip_controller.cc
index 5d027582..543b769 100644
--- a/chrome/browser/ui/views/permissions/chip_controller.cc
+++ b/chrome/browser/ui/views/permissions/chip_controller.cc
@@ -387,7 +387,7 @@
       chip_->SetVisible(true);
       chip_->AnimateExpand(kExpandDuration);
     }
-
+    chip_->RequestFocus();
     chip_->SetCallback(base::BindRepeating(&ChipController::ShowPageInfoDialog,
                                            base::Unretained(this)));
     collapse_timer_.Start(FROM_HERE, kConfirmationDisplayDuration, this,
diff --git a/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view.cc b/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view.cc
index d8d447d6..70ddbe0 100644
--- a/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view.cc
+++ b/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view.cc
@@ -19,6 +19,7 @@
 #include "components/web_modal/web_contents_modal_dialog_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
+#include "net/base/url_util.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/views/layout/fill_layout.h"
 
@@ -28,6 +29,26 @@
 constexpr int kDefaultConsentDialogHeight = 569;
 constexpr int kDefaultNoticeDialogHeight = 494;
 
+GURL GetDialogURL(PrivacySandboxService::PromptType prompt_type) {
+  GURL base_url = GURL(chrome::kChromeUIPrivacySandboxDialogURL);
+  GURL combined_dialog_url =
+      base_url.Resolve(chrome::kChromeUIPrivacySandboxDialogCombinedPath);
+  switch (prompt_type) {
+    case PrivacySandboxService::PromptType::kConsent:
+    case PrivacySandboxService::PromptType::kNotice:
+      return base_url;
+    case PrivacySandboxService::PromptType::kM1Consent:
+      return combined_dialog_url;
+    case PrivacySandboxService::PromptType::kM1NoticeROW:
+      return base_url.Resolve(chrome::kChromeUIPrivacySandboxDialogNoticePath);
+    case PrivacySandboxService::PromptType::kM1NoticeEEA:
+      return net::AppendQueryParameter(combined_dialog_url, "step", "notice");
+    case PrivacySandboxService::PromptType::kNone:
+      NOTREACHED();
+      return GURL();
+  }
+}
+
 class PrivacySandboxDialogDelegate : public views::DialogDelegate {
  public:
   explicit PrivacySandboxDialogDelegate(Browser* browser) : browser_(browser) {
@@ -83,10 +104,11 @@
   dialog_created_time_ = base::TimeTicks::Now();
   web_view_ =
       AddChildView(std::make_unique<views::WebView>(browser->profile()));
-  web_view_->LoadInitialURL(GURL(chrome::kChromeUIPrivacySandboxDialogURL));
+  web_view_->LoadInitialURL(GetDialogURL(prompt_type));
 
   auto width =
       views::LayoutProvider::Get()->GetSnappedDialogWidth(kDialogWidth);
+  // TODO(crbug.com/1378703): Adjust default values for new prompt types.
   auto height = prompt_type == PrivacySandboxService::PromptType::kConsent
                     ? kDefaultConsentDialogHeight
                     : kDefaultNoticeDialogHeight;
diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.cc b/chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.cc
index d474fd08..9fe89c1 100644
--- a/chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.cc
+++ b/chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.cc
@@ -77,8 +77,8 @@
   return model_->GetColorsModel();
 }
 
-ui::ColorId ReadAnythingController::GetForegroundColorId() {
-  return model_->GetForegroundColorId();
+void ReadAnythingController::SetIconColorIds(ui::ColorId color_id) {
+  return model_->SetIconColorIds(color_id);
 }
 
 void ReadAnythingController::OnLineSpacingChanged(int new_index) {
diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.h b/chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.h
index 0fd1ca0..ee4ad09a 100644
--- a/chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.h
+++ b/chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.h
@@ -60,7 +60,7 @@
   void OnFontSizeChanged(bool increase) override;
   void OnColorsChanged(int new_index) override;
   ui::ComboboxModel* GetColorsModel() override;
-  ui::ColorId GetForegroundColorId() override;
+  void SetIconColorIds(ui::ColorId color_id) override;
   void OnLineSpacingChanged(int new_index) override;
   ui::ComboboxModel* GetLineSpacingModel() override;
   void OnLetterSpacingChanged(int new_index) override;
diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_model.cc b/chrome/browser/ui/views/side_panel/read_anything/read_anything_model.cc
index afa29b86..5b184ff 100644
--- a/chrome/browser/ui/views/side_panel/read_anything/read_anything_model.cc
+++ b/chrome/browser/ui/views/side_panel/read_anything/read_anything_model.cc
@@ -16,7 +16,6 @@
 #include "chrome/browser/ui/views/side_panel/read_anything/read_anything_constants.h"
 #include "chrome/grit/component_extension_resources.h"
 #include "chrome/grit/generated_resources.h"
-#include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/models/image_model.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -24,7 +23,6 @@
 #include "ui/gfx/image/image_skia_operations.h"
 #include "ui/gfx/paint_vector_icon.h"
 
-using read_anything::mojom::ReadAnythingTheme;
 using read_anything::mojom::Spacing;
 
 ReadAnythingModel::ReadAnythingModel()
@@ -69,8 +67,8 @@
 
   colors_combobox_index_ = colors_model_->GetStartingStateIndex();
   auto& initial_colors = colors_model_->GetColorsAt(colors_combobox_index_);
-  foreground_color_ = initial_colors.foreground;
-  background_color_ = initial_colors.background;
+  foreground_color_id_ = initial_colors.foreground_color_id;
+  background_color_id_ = initial_colors.background_color_id;
   SetIconColorIds(initial_colors.foreground_color_id);
 
   line_spacing = line_spacing_model_->GetLineSpacingAt(
@@ -103,9 +101,8 @@
 
   colors_combobox_index_ = new_index;
   auto& new_colors = colors_model_->GetColorsAt(new_index);
-  foreground_color_ = new_colors.foreground;
-  background_color_ = new_colors.background;
-  SetIconColorIds(new_colors.foreground_color_id);
+  foreground_color_id_ = new_colors.foreground_color_id;
+  background_color_id_ = new_colors.background_color_id;
 
   NotifyThemeChanged();
 }
@@ -116,13 +113,6 @@
   letter_spacing_model_->SetIconColorId(color_id);
 }
 
-ui::ColorId ReadAnythingModel::GetForegroundColorId() {
-  // Check that the index is valid.
-  DCHECK(colors_model_->IsValidColorsIndex(colors_combobox_index_));
-
-  return colors_model_->GetForegroundColorId(colors_combobox_index_);
-}
-
 void ReadAnythingModel::SetSelectedLineSpacingByIndex(size_t new_index) {
   // Check that the index is valid.
   DCHECK(line_spacing_model_->IsValidLineSpacingIndex(new_index));
@@ -183,9 +173,9 @@
 
 void ReadAnythingModel::NotifyThemeChanged() {
   for (Observer& obs : observers_) {
-    obs.OnReadAnythingThemeChanged(ReadAnythingTheme::New(
-        font_name_, font_scale_, foreground_color_, background_color_,
-        line_spacing_, letter_spacing_));
+    obs.OnReadAnythingThemeChanged(font_name_, font_scale_,
+                                   foreground_color_id_, background_color_id_,
+                                   line_spacing_, letter_spacing_);
   }
 }
 
@@ -263,22 +253,21 @@
 
 ReadAnythingColorsModel::ReadAnythingColorsModel() {
   // Define the possible sets of colors available to the user.
-  // TODO (crbug.com/1266555): Define default colors from system theme.
   ColorInfo kDefaultColors = {u"Default", IDS_READ_ANYTHING_DEFAULT_PNG,
-                              gfx::kGoogleGrey800, gfx::kGoogleGrey050,
-                              ui::kColorReadAnythingForegroundLight};
+                              ui::kColorReadAnythingForeground,
+                              ui::kColorReadAnythingBackground};
 
   ColorInfo kLightColors = {u"Light", IDS_READ_ANYTHING_LIGHT_PNG,
-                            gfx::kGoogleGrey800, gfx::kGoogleGrey050,
-                            ui::kColorReadAnythingForegroundLight};
+                            ui::kColorReadAnythingForegroundLight,
+                            ui::kColorReadAnythingBackgroundLight};
 
   ColorInfo kDarkColors = {u"Dark", IDS_READ_ANYTHING_DARK_PNG,
-                           gfx::kGoogleGrey200, gfx::kGoogleGrey900,
-                           ui::kColorReadAnythingForegroundDark};
+                           ui::kColorReadAnythingForegroundDark,
+                           ui::kColorReadAnythingBackgroundDark};
 
   ColorInfo kYellowColors = {u"Yellow", IDS_READ_ANYTHING_YELLOW_PNG,
-                             gfx::kGoogleGrey800, gfx::kGoogleYellow200,
-                             ui::kColorReadAnythingForegroundYellow};
+                             ui::kColorReadAnythingForegroundYellow,
+                             ui::kColorReadAnythingBackgroundYellow};
 
   colors_choices_.emplace_back(kDefaultColors);
   colors_choices_.emplace_back(kLightColors);
@@ -299,10 +288,6 @@
   return colors_choices_[index];
 }
 
-ui::ColorId ReadAnythingColorsModel::GetForegroundColorId(size_t index) {
-  return GetColorsAt(index).foreground_color_id;
-}
-
 absl::optional<size_t> ReadAnythingColorsModel::GetDefaultIndex() const {
   return default_index_;
 }
diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_model.h b/chrome/browser/ui/views/side_panel/read_anything/read_anything_model.h
index 4ee4909..215f566 100644
--- a/chrome/browser/ui/views/side_panel/read_anything/read_anything_model.h
+++ b/chrome/browser/ui/views/side_panel/read_anything/read_anything_model.h
@@ -12,7 +12,6 @@
 #include "base/observer_list.h"
 #include "base/observer_list_types.h"
 #include "chrome/common/accessibility/read_anything.mojom.h"
-#include "third_party/skia/include/core/SkColor.h"
 #include "ui/accessibility/ax_node_id_forward.h"
 #include "ui/accessibility/ax_tree_update.h"
 #include "ui/base/models/combobox_model.h"
@@ -77,19 +76,15 @@
     int icon_asset;
 
     // The foreground color, used for text and icon hints.
-    SkColor foreground;
+    ui::ColorId foreground_color_id;
 
     // The background color, used for text background.
-    SkColor background;
-
-    // The foreground color as a ColorId, used for separators.
-    ui::ColorId foreground_color_id;
+    ui::ColorId background_color_id;
   };
 
   bool IsValidColorsIndex(size_t index);
   void SetDefaultColorsIndexFromPref(size_t index);
   ColorInfo& GetColorsAt(size_t index);
-  ui::ColorId GetForegroundColorId(size_t index);
   void SetIconColorId(ui::ColorId color_id);
 
   // Simple pass-through method so Init can set the starting state colors.
@@ -220,7 +215,12 @@
         const ui::AXTreeUpdate& snapshot,
         const std::vector<ui::AXNodeID>& content_node_ids) {}
     virtual void OnReadAnythingThemeChanged(
-        read_anything::mojom::ReadAnythingThemePtr new_theme) = 0;
+        std::string& font_name,
+        double font_scale,
+        ui::ColorId foreground_color_id,
+        ui::ColorId background_color_id,
+        read_anything::mojom::Spacing line_spacing,
+        read_anything::mojom::Spacing letter_spacing) = 0;
   };
 
   ReadAnythingModel();
@@ -244,6 +244,7 @@
   double GetValidFontScale(double font_scale);
   void DecreaseTextSize();
   void IncreaseTextSize();
+  void SetIconColorIds(ui::ColorId color_id);
   void SetSelectedColorsByIndex(size_t new_index);
   void SetSelectedLineSpacingByIndex(size_t new_index);
   void SetSelectedLetterSpacingByIndex(size_t new_index);
@@ -251,7 +252,6 @@
   ReadAnythingFontModel* GetFontModel() { return font_model_.get(); }
   double GetFontScale() { return font_scale_; }
   ReadAnythingColorsModel* GetColorsModel() { return colors_model_.get(); }
-  ui::ColorId GetForegroundColorId();
   ReadAnythingLineSpacingModel* GetLineSpacingModel() {
     return line_spacing_model_.get();
   }
@@ -262,14 +262,13 @@
  private:
   void NotifyAXTreeDistilled();
   void NotifyThemeChanged();
-  void SetIconColorIds(ui::ColorId color_id);
 
   // State:
 
   // Members of read_anything::mojom::ReadAnythingTheme:
   std::string font_name_;
-  SkColor foreground_color_;
-  SkColor background_color_;
+  ui::ColorId foreground_color_id_;
+  ui::ColorId background_color_id_;
 
   // A scale multiplier for font size (internal use only, not shown to user).
   float font_scale_;
diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_model_unittest.cc b/chrome/browser/ui/views/side_panel/read_anything/read_anything_model_unittest.cc
index d86a793..2604935 100644
--- a/chrome/browser/ui/views/side_panel/read_anything/read_anything_model_unittest.cc
+++ b/chrome/browser/ui/views/side_panel/read_anything/read_anything_model_unittest.cc
@@ -14,7 +14,6 @@
 
 #include "ui/accessibility/accessibility_features.h"
 
-using read_anything::mojom::ReadAnythingThemePtr;
 using testing::_;
 using testing::FloatNear;
 
@@ -27,7 +26,12 @@
               (override));
   MOCK_METHOD(void,
               OnReadAnythingThemeChanged,
-              (ReadAnythingThemePtr new_theme),
+              (std::string & font_name,
+               double font_scale,
+               ui::ColorId foreground_color_id,
+               ui::ColorId background_color_id,
+               read_anything::mojom::Spacing line_spacing,
+               read_anything::mojom::Spacing letter_spacing),
               (override));
 };
 
@@ -63,10 +67,12 @@
   model_->AddObserver(&model_observer_1_);
 
   EXPECT_CALL(model_observer_1_, OnAXTreeDistilled(_, _)).Times(0);
-  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   EXPECT_CALL(model_observer_2_, OnAXTreeDistilled(_, _)).Times(0);
-  EXPECT_CALL(model_observer_2_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_2_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   model_->AddObserver(&model_observer_2_);
 }
@@ -76,13 +82,16 @@
   model_->AddObserver(&model_observer_2_);
 
   EXPECT_CALL(model_observer_1_, OnAXTreeDistilled(_, _)).Times(0);
-  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   EXPECT_CALL(model_observer_2_, OnAXTreeDistilled(_, _)).Times(0);
-  EXPECT_CALL(model_observer_2_, OnReadAnythingThemeChanged(_)).Times(0);
+  EXPECT_CALL(model_observer_2_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(0);
 
   EXPECT_CALL(model_observer_3_, OnAXTreeDistilled(_, _)).Times(0);
-  EXPECT_CALL(model_observer_3_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_3_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   model_->RemoveObserver(&model_observer_2_);
   model_->AddObserver(&model_observer_3_);
@@ -91,7 +100,8 @@
 TEST_F(ReadAnythingModelTest, NotificationsOnSetSelectedFontIndex) {
   model_->AddObserver(&model_observer_1_);
 
-  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   model_->SetSelectedFontByIndex(2);
 }
@@ -110,7 +120,8 @@
 TEST_F(ReadAnythingModelTest, NotificationsOnDecreasedFontSize) {
   model_->AddObserver(&model_observer_1_);
 
-  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   model_->DecreaseTextSize();
 
@@ -120,7 +131,8 @@
 TEST_F(ReadAnythingModelTest, NotificationsOnIncreasedFontSize) {
   model_->AddObserver(&model_observer_1_);
 
-  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   model_->IncreaseTextSize();
 
@@ -130,7 +142,8 @@
 TEST_F(ReadAnythingModelTest, NotificationsOnSetSelectedColorsIndex) {
   model_->AddObserver(&model_observer_1_);
 
-  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   model_->SetSelectedColorsByIndex(2);
 }
@@ -138,7 +151,8 @@
 TEST_F(ReadAnythingModelTest, NotificationsOnSetSelectedLineSpacingIndex) {
   model_->AddObserver(&model_observer_1_);
 
-  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   model_->SetSelectedLineSpacingByIndex(2);
 }
@@ -146,7 +160,8 @@
 TEST_F(ReadAnythingModelTest, NotificationsOnSetSelectedLetterSpacingIndex) {
   model_->AddObserver(&model_observer_1_);
 
-  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_)).Times(1);
+  EXPECT_CALL(model_observer_1_, OnReadAnythingThemeChanged(_, _, _, _, _, _))
+      .Times(1);
 
   model_->SetSelectedLetterSpacingByIndex(2);
 }
diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view.cc b/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view.cc
index 15c20710..18d51f3 100644
--- a/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view.cc
+++ b/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view.cc
@@ -115,6 +115,12 @@
   coordinator_->AddModelObserver(this);
 }
 
+// After this view is added to the widget, we have access to the color provider
+// to apply the initial theme skcolors.
+void ReadAnythingToolbarView::AddedToWidget() {
+  ChangeColorsCallback();
+}
+
 void ReadAnythingToolbarView::DecreaseFontSizeCallback() {
   if (delegate_)
     delegate_->OnFontSizeChanged(/* increase = */ false);
@@ -151,26 +157,41 @@
 }
 
 void ReadAnythingToolbarView::OnReadAnythingThemeChanged(
-    read_anything::mojom::ReadAnythingThemePtr new_theme) {
-  SetBackground(views::CreateSolidBackground(new_theme->background_color));
+    std::string& font_name,
+    double font_scale,
+    ui::ColorId foreground_color_id,
+    ui::ColorId background_color_id,
+    read_anything::mojom::Spacing line_spacing,
+    read_anything::mojom::Spacing letter_spacing) {
+  if (!GetColorProvider())
+    return;
+
+  const SkColor background_skcolor =
+      GetColorProvider()->GetColor(background_color_id);
+  const SkColor foreground_skcolor =
+      GetColorProvider()->GetColor(foreground_color_id);
+
+  SetBackground(views::CreateSolidBackground(background_skcolor));
   font_combobox_->SetBackground(
-      views::CreateSolidBackground(new_theme->background_color));
+      views::CreateSolidBackground(background_skcolor));
   colors_combobox_->SetBackground(
-      views::CreateSolidBackground(new_theme->background_color));
+      views::CreateSolidBackground(background_skcolor));
   lines_combobox_->SetBackground(
-      views::CreateSolidBackground(new_theme->background_color));
+      views::CreateSolidBackground(background_skcolor));
   letter_spacing_combobox_->SetBackground(
-      views::CreateSolidBackground(new_theme->background_color));
+      views::CreateSolidBackground(background_skcolor));
 
   decrease_text_size_button_->UpdateIcon(gfx::CreateVectorIcon(
-      kTextDecreaseIcon, kSmallIconSize, new_theme->foreground_color));
+      kTextDecreaseIcon, kSmallIconSize, foreground_skcolor));
 
   increase_text_size_button_->UpdateIcon(gfx::CreateVectorIcon(
-      kTextIncreaseIcon, kLargeIconSize, new_theme->foreground_color));
+      kTextIncreaseIcon, kLargeIconSize, foreground_skcolor));
 
   for (views::Separator* separator : separators_) {
-    separator->SetColorId(delegate_->GetForegroundColorId());
+    separator->SetColorId(foreground_color_id);
   }
+
+  delegate_->SetIconColorIds(foreground_color_id);
 }
 
 std::unique_ptr<views::View> ReadAnythingToolbarView::Separator() {
@@ -187,7 +208,6 @@
   separator_container->SetLayoutManager(std::move(separator_layout_manager));
 
   auto separator = std::make_unique<views::Separator>();
-  separator->SetColorId(delegate_->GetForegroundColorId());
   separators_.push_back(
       separator_container->AddChildView(std::move(separator)));
 
diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view.h b/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view.h
index 9d6ec35..da88dce 100644
--- a/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view.h
+++ b/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view.h
@@ -32,7 +32,7 @@
     virtual void OnFontSizeChanged(bool increase) = 0;
     virtual void OnColorsChanged(int new_index) = 0;
     virtual ui::ComboboxModel* GetColorsModel() = 0;
-    virtual ui::ColorId GetForegroundColorId() = 0;
+    virtual void SetIconColorIds(ui::ColorId color_id) = 0;
     virtual void OnLineSpacingChanged(int new_index) = 0;
     virtual ui::ComboboxModel* GetLineSpacingModel() = 0;
     virtual void OnLetterSpacingChanged(int new_index) = 0;
@@ -49,7 +49,12 @@
 
   // ReadAnythingModel::Observer:
   void OnReadAnythingThemeChanged(
-      read_anything::mojom::ReadAnythingThemePtr new_theme) override;
+      std::string& font_name,
+      double font_scale,
+      ui::ColorId foreground_color_id,
+      ui::ColorId background_color_id,
+      read_anything::mojom::Spacing line_spacing,
+      read_anything::mojom::Spacing letter_spacing) override;
 
   // ReadAnythingCoordinator::Observer:
   void OnCoordinatorDestroyed() override;
@@ -64,6 +69,7 @@
   void ChangeLetterSpacingCallback();
 
   // views::View:
+  void AddedToWidget() override;
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
 
   std::unique_ptr<views::View> Separator();
diff --git a/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view_browsertest.cc b/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view_browsertest.cc
index 5c9eb759..f4cef61 100644
--- a/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view_browsertest.cc
+++ b/chrome/browser/ui/views/side_panel/read_anything/read_anything_toolbar_view_browsertest.cc
@@ -21,7 +21,7 @@
   MOCK_METHOD(void, OnFontSizeChanged, (bool increase), (override));
   MOCK_METHOD(void, OnColorsChanged, (int new_index), (override));
   MOCK_METHOD(ui::ComboboxModel*, GetColorsModel, (), (override));
-  MOCK_METHOD(ui::ColorId, GetForegroundColorId, (), (override));
+  MOCK_METHOD(void, SetIconColorIds, (ui::ColorId color_id), (override));
   MOCK_METHOD(void, OnLineSpacingChanged, (int new_index), (override));
   MOCK_METHOD(ui::ComboboxModel*, GetLineSpacingModel, (), (override));
   MOCK_METHOD(void, OnLetterSpacingChanged, (int new_index), (override));
@@ -86,10 +86,7 @@
     toolbar_view_->ChangeLetterSpacingCallback();
   }
 
-  void OnReadAnythingThemeChanged(
-      read_anything::mojom::ReadAnythingThemePtr new_theme) {
-    toolbar_view_->OnReadAnythingThemeChanged(std::move(new_theme));
-  }
+  void Separator() { toolbar_view_->Separator(); }
 
  protected:
   MockReadAnythingToolbarViewDelegate toolbar_delegate_;
@@ -121,14 +118,6 @@
   ChangeColorsCallback();
 }
 
-IN_PROC_BROWSER_TEST_F(ReadAnythingToolbarViewTest, ChangeSeparatorColor) {
-  // GetForegroundColorId() called for each separator (2 separators total)
-  EXPECT_CALL(toolbar_delegate_, GetForegroundColorId()).Times(2);
-
-  auto theme = read_anything::mojom::ReadAnythingTheme::New();
-  OnReadAnythingThemeChanged(std::move(theme));
-}
-
 IN_PROC_BROWSER_TEST_F(ReadAnythingToolbarViewTest, ChangeLineSpacingCallback) {
   EXPECT_CALL(toolbar_delegate_, OnLineSpacingChanged(1)).Times(1);
 
diff --git a/chrome/browser/ui/webui/about_ui.cc b/chrome/browser/ui/webui/about_ui.cc
index 75d89a11..28871062 100644
--- a/chrome/browser/ui/webui/about_ui.cc
+++ b/chrome/browser/ui/webui/about_ui.cc
@@ -149,12 +149,12 @@
   std::string region = "us";
   chromeos::system::StatisticsProvider* provider =
       chromeos::system::StatisticsProvider::GetInstance();
-  bool region_found =
-      provider->GetMachineStatistic(chromeos::system::kRegionKey, &region);
-  if (region_found) {
+  if (const absl::optional<base::StringPiece> region_statistic =
+          provider->GetMachineStatistic(chromeos::system::kRegionKey)) {
     // We only need the first part of the complex region codes like ca.ansi.
-    std::vector<std::string> region_pieces = base::SplitString(
-        region, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+    std::vector<std::string> region_pieces =
+        base::SplitString(region_statistic.value(), ".", base::TRIM_WHITESPACE,
+                          base::SPLIT_WANT_NONEMPTY);
     if (!region_pieces.empty())
       region = region_pieces[0];
   } else {
diff --git a/chrome/browser/ui/webui/ash/account_manager/account_manager_error_ui.cc b/chrome/browser/ui/webui/ash/account_manager/account_manager_error_ui.cc
index b94f955..692acfa 100644
--- a/chrome/browser/ui/webui/ash/account_manager/account_manager_error_ui.cc
+++ b/chrome/browser/ui/webui/ash/account_manager/account_manager_error_ui.cc
@@ -45,12 +45,14 @@
 #endif
 
   // Add required resources.
-  html_source->AddResourcePath("account_manager_shared_css.js",
+  html_source->AddResourcePath("account_manager_shared.css.js",
                                IDR_ACCOUNT_MANAGER_SHARED_CSS_JS);
   html_source->AddResourcePath("account_manager_browser_proxy.js",
                                IDR_ACCOUNT_MANAGER_BROWSER_PROXY_JS);
   html_source->AddResourcePath("account_manager_error_app.js",
                                IDR_ACCOUNT_MANAGER_ERROR_APP_JS);
+  html_source->AddResourcePath("account_manager_error_app.html.js",
+                               IDR_ACCOUNT_MANAGER_ERROR_APP_HTML_JS);
 
   html_source->SetDefaultResource(IDR_ACCOUNT_MANAGER_ERROR_HTML);
 
diff --git a/chrome/browser/ui/webui/ash/account_manager/account_migration_welcome_ui.cc b/chrome/browser/ui/webui/ash/account_manager/account_migration_welcome_ui.cc
index a9e2a23f..22e893e 100644
--- a/chrome/browser/ui/webui/ash/account_manager/account_migration_welcome_ui.cc
+++ b/chrome/browser/ui/webui/ash/account_manager/account_migration_welcome_ui.cc
@@ -104,7 +104,9 @@
   // Add required resources.
   html_source->AddResourcePath("account_migration_welcome_app.js",
                                IDR_ACCOUNT_MIGRATION_WELCOME_APP_JS);
-  html_source->AddResourcePath("account_manager_shared_css.js",
+  html_source->AddResourcePath("account_migration_welcome_app.html.js",
+                               IDR_ACCOUNT_MIGRATION_WELCOME_APP_HTML_JS);
+  html_source->AddResourcePath("account_manager_shared.css.js",
                                IDR_ACCOUNT_MANAGER_SHARED_CSS_JS);
   html_source->AddResourcePath("account_manager_browser_proxy.js",
                                IDR_ACCOUNT_MANAGER_BROWSER_PROXY_JS);
diff --git a/chrome/browser/ui/webui/password_manager/password_manager_ui.cc b/chrome/browser/ui/webui/password_manager/password_manager_ui.cc
index 9d216d50..35a63860 100644
--- a/chrome/browser/ui/webui/password_manager/password_manager_ui.cc
+++ b/chrome/browser/ui/webui/password_manager/password_manager_ui.cc
@@ -11,7 +11,6 @@
 #include "chrome/browser/ui/webui/webui_util.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/common/webui_url_constants.h"
-#include "chrome/grit/browser_resources.h"
 #include "chrome/grit/generated_resources.h"
 #include "chrome/grit/password_manager_resources.h"
 #include "chrome/grit/password_manager_resources_map.h"
@@ -21,10 +20,6 @@
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/webui/web_ui_util.h"
 
-#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
-#include "chrome/grit/chrome_unscaled_resources.h"
-#endif
-
 namespace {
 
 content::WebUIDataSource* CreatePasswordsUIHTMLSource(Profile* profile) {
@@ -87,14 +82,6 @@
           IDS_PASSWORD_MANAGER_UI_PASSWORDS_DESCRIPTION,
           base::ASCIIToUTF16(chrome::kPasswordManagerLearnMoreURL)));
 
-#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
-  // Overwrite ubranded logo for Chrome-branded builds.
-  // This path is used in the manifest of the PasswordManager web app
-  // (chrome/browser/resources/password_manager/manifest.webmanifest).
-  source->AddResourcePath("images/password_manager_logo.svg",
-                          IDR_CHROME_PASSWORD_MANAGER_LOGO);
-#endif
-
   return source;
 }
 
diff --git a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_handler.cc b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_handler.cc
index ed9050ef..3da88a6e 100644
--- a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_handler.cc
+++ b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_handler.cc
@@ -8,6 +8,15 @@
 #include "chrome/browser/privacy_sandbox/privacy_sandbox_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 
+namespace {
+
+bool IsConsent(PrivacySandboxService::PromptType prompt_type) {
+  return prompt_type == PrivacySandboxService::PromptType::kConsent ||
+         prompt_type == PrivacySandboxService::PromptType::kM1Consent;
+}
+
+}  // namespace
+
 PrivacySandboxDialogHandler::PrivacySandboxDialogHandler(
     base::OnceClosure close_callback,
     base::OnceCallback<void(int)> resize_callback,
@@ -58,7 +67,7 @@
     return;
 
   // If user hasn't made a decision, notify the service.
-  if (prompt_type_ == PrivacySandboxService::PromptType::kConsent) {
+  if (IsConsent(prompt_type_)) {
     NotifyServiceAboutPromptAction(
         PrivacySandboxService::PromptAction::kConsentClosedNoDecision);
   } else {
@@ -115,7 +124,7 @@
 
   // Notify the service that the DOM was loaded and the dialog was shown to
   // user.
-  if (prompt_type_ == PrivacySandboxService::PromptType::kConsent) {
+  if (IsConsent(prompt_type_)) {
     NotifyServiceAboutPromptAction(
         PrivacySandboxService::PromptAction::kConsentShown);
   } else {
diff --git a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc
index c17b45f..9ede9b5 100644
--- a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc
+++ b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc
@@ -32,11 +32,12 @@
       base::make_span(kPrivacySandboxResources, kPrivacySandboxResourcesSize),
       IDR_PRIVACY_SANDBOX_PRIVACY_SANDBOX_DIALOG_HTML);
 
-  // TODO(crbug.com/1378703): Add path constants to webui_url_constants.h.
   source->AddResourcePath(
-      "combined", IDR_PRIVACY_SANDBOX_PRIVACY_SANDBOX_COMBINED_DIALOG_HTML);
+      chrome::kChromeUIPrivacySandboxDialogCombinedPath,
+      IDR_PRIVACY_SANDBOX_PRIVACY_SANDBOX_COMBINED_DIALOG_HTML);
   source->AddResourcePath(
-      "notice", IDR_PRIVACY_SANDBOX_PRIVACY_SANDBOX_NOTICE_DIALOG_HTML);
+      chrome::kChromeUIPrivacySandboxDialogNoticePath,
+      IDR_PRIVACY_SANDBOX_PRIVACY_SANDBOX_NOTICE_DIALOG_HTML);
 
   static constexpr webui::LocalizedString kStrings[] = {
       {"privacySandboxTitle", IDS_SETTINGS_PRIVACY_SANDBOX_TITLE},
diff --git a/chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.cc b/chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.cc
index e18e5c2..f95bf0a7 100644
--- a/chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.cc
+++ b/chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.cc
@@ -11,20 +11,24 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/views/side_panel/read_anything/read_anything_controller.h"
+#include "content/public/browser/web_ui.h"
 #include "ui/accessibility/ax_tree_update.h"
 
 using read_anything::mojom::Page;
 using read_anything::mojom::PageHandler;
-using read_anything::mojom::ReadAnythingThemePtr;
+using read_anything::mojom::ReadAnythingTheme;
 
 ReadAnythingPageHandler::ReadAnythingPageHandler(
     mojo::PendingRemote<Page> page,
-    mojo::PendingReceiver<PageHandler> receiver)
-    : receiver_(this, std::move(receiver)), page_(std::move(page)) {
+    mojo::PendingReceiver<PageHandler> receiver,
+    content::WebUI* web_ui)
+    : browser_(chrome::FindLastActive()),
+      receiver_(this, std::move(receiver)),
+      page_(std::move(page)),
+      web_ui_(web_ui) {
   // Register |this| as a |ReadAnythingModel::Observer| with the coordinator
   // for the component. This will allow the IPC to update the front-end web ui.
 
-  browser_ = chrome::FindLastActive();
   if (!browser_)
     return;
 
@@ -68,8 +72,21 @@
 }
 
 void ReadAnythingPageHandler::OnReadAnythingThemeChanged(
-    ReadAnythingThemePtr new_theme_ptr) {
-  page_->OnThemeChanged(std::move(new_theme_ptr));
+    std::string& font_name,
+    double font_scale,
+    ui::ColorId foreground_color_id,
+    ui::ColorId background_color_id,
+    read_anything::mojom::Spacing line_spacing,
+    read_anything::mojom::Spacing letter_spacing) {
+  content::WebContents* web_contents = web_ui_->GetWebContents();
+  SkColor foreground_skcolor =
+      web_contents->GetColorProvider().GetColor(foreground_color_id);
+  SkColor background_skcolor =
+      web_contents->GetColorProvider().GetColor(background_color_id);
+
+  page_->OnThemeChanged(
+      ReadAnythingTheme::New(font_name, font_scale, foreground_skcolor,
+                             background_skcolor, line_spacing, letter_spacing));
 }
 
 void ReadAnythingPageHandler::OnLinkClicked(const GURL& url,
diff --git a/chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.h b/chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.h
index 0a66766..5175ac6 100644
--- a/chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.h
+++ b/chrome/browser/ui/webui/side_panel/read_anything/read_anything_page_handler.h
@@ -41,7 +41,8 @@
 
   ReadAnythingPageHandler(
       mojo::PendingRemote<read_anything::mojom::Page> page,
-      mojo::PendingReceiver<read_anything::mojom::PageHandler> receiver);
+      mojo::PendingReceiver<read_anything::mojom::PageHandler> receiver,
+      content::WebUI* web_ui);
   ReadAnythingPageHandler(const ReadAnythingPageHandler&) = delete;
   ReadAnythingPageHandler& operator=(const ReadAnythingPageHandler&) = delete;
   ~ReadAnythingPageHandler() override;
@@ -54,7 +55,12 @@
       const ui::AXTreeUpdate& snapshot,
       const std::vector<ui::AXNodeID>& content_node_ids) override;
   void OnReadAnythingThemeChanged(
-      read_anything::mojom::ReadAnythingThemePtr new_theme) override;
+      std::string& font_name,
+      double font_scale,
+      ui::ColorId foreground_color_id,
+      ui::ColorId background_color_id,
+      read_anything::mojom::Spacing line_spacing,
+      read_anything::mojom::Spacing letter_spacing) override;
 
   // ReadAnythingCoordinator::Observer:
   void OnCoordinatorDestroyed() override;
@@ -63,10 +69,12 @@
   raw_ptr<ReadAnythingCoordinator> coordinator_;
   raw_ptr<ReadAnythingPageHandler::Delegate> delegate_;
 
-  raw_ptr<Browser> browser_;
+  const raw_ptr<Browser> browser_;
 
-  mojo::Receiver<read_anything::mojom::PageHandler> receiver_;
-  mojo::Remote<read_anything::mojom::Page> page_;
+  const mojo::Receiver<read_anything::mojom::PageHandler> receiver_;
+  const mojo::Remote<read_anything::mojom::Page> page_;
+
+  const raw_ptr<content::WebUI> web_ui_;
 };
 
 #endif  // CHROME_BROWSER_UI_WEBUI_SIDE_PANEL_READ_ANYTHING_READ_ANYTHING_PAGE_HANDLER_H_
diff --git a/chrome/browser/ui/webui/side_panel/read_anything/read_anything_ui.cc b/chrome/browser/ui/webui/side_panel/read_anything/read_anything_ui.cc
index 108585b..cb115d1 100644
--- a/chrome/browser/ui/webui/side_panel/read_anything/read_anything_ui.cc
+++ b/chrome/browser/ui/webui/side_panel/read_anything/read_anything_ui.cc
@@ -54,7 +54,7 @@
     mojo::PendingReceiver<read_anything::mojom::PageHandler> receiver) {
   DCHECK(page);
   read_anything_page_handler_ = std::make_unique<ReadAnythingPageHandler>(
-      std::move(page), std::move(receiver));
+      std::move(page), std::move(receiver), web_ui());
   if (embedder())
     embedder()->ShowUI();
 }
diff --git a/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc b/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
index 55c99f0..37f59d9 100644
--- a/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
+++ b/chrome/browser/ui/webui/side_panel/reading_list/reading_list_ui.cc
@@ -176,7 +176,7 @@
     mojo::PendingReceiver<read_anything::mojom::PageHandler> receiver) {
   DCHECK(page);
   read_anything_page_handler_ = std::make_unique<ReadAnythingPageHandler>(
-      std::move(page), std::move(receiver));
+      std::move(page), std::move(receiver), web_ui());
 }
 
 void ReadingListUI::BindInterface(
diff --git a/chrome/browser/ui/webui/signin/inline_login_ui.cc b/chrome/browser/ui/webui/signin/inline_login_ui.cc
index 2d0dbca7..dcfe18b3 100644
--- a/chrome/browser/ui/webui/signin/inline_login_ui.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_ui.cc
@@ -136,7 +136,9 @@
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   static constexpr webui::ResourcePath kResources[] = {
-    {"account_manager_shared_css.js", IDR_ACCOUNT_MANAGER_SHARED_CSS_JS},
+    {"account_manager_shared.css.js", IDR_ACCOUNT_MANAGER_SHARED_CSS_JS},
+    {"error_screen.html.js",
+     IDR_ACCOUNT_MANAGER_COMPONENTS_ERROR_SCREEN_HTML_JS},
     {"error_screen.js", IDR_ACCOUNT_MANAGER_COMPONENTS_ERROR_SCREEN_JS},
     // Resources for the server-based edu coexistence flow.
     {"edu-coexistence", IDR_EDU_COEXISTENCE_EDU_COEXISTENCE_HTML},
diff --git a/chrome/browser/upgrade_detector/upgrade_detector_impl.cc b/chrome/browser/upgrade_detector/upgrade_detector_impl.cc
index 3e6b200..facef73 100644
--- a/chrome/browser/upgrade_detector/upgrade_detector_impl.cc
+++ b/chrome/browser/upgrade_detector/upgrade_detector_impl.cc
@@ -23,7 +23,6 @@
 #include "base/time/default_tick_clock.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
-#include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/buildflags.h"
@@ -71,11 +70,11 @@
 constexpr auto kOutdatedBuildAge = base::Days(7) * 8;
 
 constexpr bool ShouldDetectOutdatedBuilds() {
-#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+#if BUILDFLAG(ENABLE_UPDATE_NOTIFICATIONS)
   return true;
-#else   // BUILDFLAG(GOOGLE_CHROME_BRANDING)
+#else
   return false;
-#endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
+#endif
 }
 
 // Check if one of the outdated simulation switches was present on the command
@@ -474,9 +473,7 @@
     variations_service->AddObserver(this);
   }
 
-  // On Windows, only enable upgrade notifications for Google Chrome builds.
-  // Chromium does not use an auto-updater.
-#if !BUILDFLAG(IS_WIN) || BUILDFLAG(GOOGLE_CHROME_BRANDING)
+#if BUILDFLAG(ENABLE_UPDATE_NOTIFICATIONS)
 
   // On macOS, only enable upgrade notifications if the updater (Keystone) is
   // present.
@@ -485,9 +482,6 @@
     return;
 #endif
 
-  // On non-macOS non-Windows, always enable upgrade notifications regardless
-  // of branding.
-
   // Start checking for outdated builds sometime after startup completes.
   content::GetUIThreadTaskRunner({base::TaskPriority::BEST_EFFORT,
                                   base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})
@@ -499,7 +493,7 @@
   auto* const build_state = g_browser_process->GetBuildState();
   build_state->AddObserver(this);
   installed_version_poller_.emplace(build_state);
-#endif
+#endif  // BUILDFLAG(ENABLE_UPDATE_NOTIFICATIONS)
 }
 
 void UpgradeDetectorImpl::Shutdown() {
diff --git a/chrome/browser/web_applications/isolated_web_apps/install_isolated_web_app_from_command_line_browsertest.cc b/chrome/browser/web_applications/isolated_web_apps/install_isolated_web_app_from_command_line_browsertest.cc
index 06afa09..6d50dd5 100644
--- a/chrome/browser/web_applications/isolated_web_apps/install_isolated_web_app_from_command_line_browsertest.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/install_isolated_web_app_from_command_line_browsertest.cc
@@ -131,12 +131,9 @@
   std::vector<uint8_t> BuildBundle() {
     web_package::WebBundleSigner::KeyPair key_pair =
         web_package::WebBundleSigner::KeyPair::CreateRandom();
-    base::expected<web_package::Ed25519PublicKey, std::string> public_key =
-        web_package::Ed25519PublicKey::Create(key_pair.public_key);
-    DCHECK(public_key.has_value());
     web_package::SignedWebBundleId bundle_id =
         web_package::SignedWebBundleId::CreateForEd25519PublicKey(
-            public_key.value());
+            key_pair.public_key);
     web_package::WebBundleBuilder builder;
 
     builder.AddPrimaryURL("isolated-app://" + bundle_id.id());
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 259d88a..7d2958f 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1668578082-32e3fc11b8739a810535ae7996c90a33ebe45244.profdata
+chrome-win32-main-1668588915-78c9a318566b6154d0cca34c7b1985a95b534579.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 8f65fdb6..723881a 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1668578082-cf05e74035dd10afb7c94223d78978f82b294cfb.profdata
+chrome-win64-main-1668588915-793b67747d63c8c1a1cf8850175e637871ff83c8.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index a36b95dc..43d9cbb 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -1236,6 +1236,24 @@
     &kTrustSafetySentimentSurveyV2, "ntp-visits-min-range", 2};
 const base::FeatureParam<int> kTrustSafetySentimentSurveyV2NtpVisitsMaxRange{
     &kTrustSafetySentimentSurveyV2, "ntp-visits-max-range", 4};
+// The feature area probabilities for each feature area considered as part of
+// the Trust & Safety sentiment survey.
+// TODO(crbug.com/1382134): Calculate initial probabilities and remove 0.0
+const base::FeatureParam<double>
+    kTrustSafetySentimentSurveyV2TrustedSurfaceProbability{
+        &kTrustSafetySentimentSurveyV2, "trusted-surface-probability", 0.0};
+// The HaTS trigger IDs, which determine which survey is delivered from the HaTS
+// backend.
+const base::FeatureParam<std::string>
+    kTrustSafetySentimentSurveyV2TrustedSurfaceTriggerId{
+        &kTrustSafetySentimentSurveyV2, "trusted-surface-trigger-id", ""};
+// The time the user must have the Trusted Surface bubble open to be considered.
+// Alternatively the user can interact with the bubble, in which case this time
+// is irrelevant.
+const base::FeatureParam<base::TimeDelta>
+    kTrustSafetySentimentSurveyV2TrustedSurfaceTime{
+        &kTrustSafetySentimentSurveyV2, "trusted-surface-time",
+        base::Seconds(5)};
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index 37632c74..8bedde0 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -704,6 +704,15 @@
 COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::FeatureParam<int>
     kTrustSafetySentimentSurveyV2NtpVisitsMaxRange;
+COMPONENT_EXPORT(CHROME_FEATURES)
+extern const base::FeatureParam<double>
+    kTrustSafetySentimentSurveyV2TrustedSurfaceProbability;
+COMPONENT_EXPORT(CHROME_FEATURES)
+extern const base::FeatureParam<std::string>
+    kTrustSafetySentimentSurveyV2TrustedSurfaceTriggerId;
+COMPONENT_EXPORT(CHROME_FEATURES)
+extern const base::FeatureParam<base::TimeDelta>
+    kTrustSafetySentimentSurveyV2TrustedSurfaceTime;
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kUploadZippedSystemLogs);
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
index 6806218..70ba0aab 100644
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -166,6 +166,8 @@
 const char kChromeUIPrivacySandboxDialogHost[] = "privacy-sandbox-dialog";
 const char kChromeUIPrivacySandboxDialogURL[] =
     "chrome://privacy-sandbox-dialog";
+const char kChromeUIPrivacySandboxDialogCombinedPath[] = "combined";
+const char kChromeUIPrivacySandboxDialogNoticePath[] = "notice";
 const char kChromeUIQuitHost[] = "quit";
 const char kChromeUIQuitURL[] = "chrome://quit/";
 const char kChromeUIQuotaInternalsHost[] = "quota-internals";
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
index 5d5d330..5e2a9d1 100644
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -161,6 +161,8 @@
 extern const char kChromeUIPrintURL[];
 extern const char kChromeUIPrivacySandboxDialogHost[];
 extern const char kChromeUIPrivacySandboxDialogURL[];
+extern const char kChromeUIPrivacySandboxDialogCombinedPath[];
+extern const char kChromeUIPrivacySandboxDialogNoticePath[];
 extern const char kChromeUIProfileInternalsHost[];
 extern const char kChromeUIQuitHost[];
 extern const char kChromeUIQuitURL[];
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 3a7a6976..627ee001 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -270,6 +270,9 @@
     "//components/safe_browsing/core/browser/db:v4_test_util",
     "//components/safe_browsing/core/browser/tailored_security_service:tailored_security_service",
     "//components/search_engines:test_support",
+    "//components/services/storage:storage",
+    "//components/services/storage:test_support",
+    "//components/services/storage/shared_storage/public/mojom",
     "//components/sessions:test_support",
     "//components/signin/public/base:test_support",
     "//components/startup_metric_utils/browser",
diff --git a/chrome/test/DEPS b/chrome/test/DEPS
index 8c24cdf..831c74d3 100644
--- a/chrome/test/DEPS
+++ b/chrome/test/DEPS
@@ -60,6 +60,7 @@
   "+components/security_interstitials/content",
   "+components/services/language_detection/public/cpp",
   "+components/services/quarantine",
+  "+components/services/storage/shared_storage",
   "+components/sessions",
   "+components/signin/public",
   "+components/spellcheck",
diff --git a/chrome/test/data/webui/chromeos/BUILD.gn b/chrome/test/data/webui/chromeos/BUILD.gn
index e4febf3..c4fcdae1 100644
--- a/chrome/test/data/webui/chromeos/BUILD.gn
+++ b/chrome/test/data/webui/chromeos/BUILD.gn
@@ -29,9 +29,9 @@
 
 js_library("fake_network_config_mojom") {
   deps = [
+    "//ash/webui/common/resources:promise_resolver",
     "//ash/webui/common/resources/network:onc_mojo",
     "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:promise_resolver",
   ]
 }
 
@@ -39,7 +39,7 @@
 }
 
 js_library("test_browser_proxy") {
-  deps = [ "//ui/webui/resources/js:promise_resolver" ]
+  deps = [ "//ash/webui/common/resources:promise_resolver" ]
 }
 
 js_library("test_util") {
diff --git a/chrome/test/data/webui/chromeos/fake_network_config_mojom.js b/chrome/test/data/webui/chromeos/fake_network_config_mojom.js
index 773fd12e..ca02ed22 100644
--- a/chrome/test/data/webui/chromeos/fake_network_config_mojom.js
+++ b/chrome/test/data/webui/chromeos/fake_network_config_mojom.js
@@ -8,7 +8,7 @@
 
 import {OncMojo} from 'chrome://resources/ash/common/network/onc_mojo.js';
 import {assert, assertNotReached} from 'chrome://resources/js/assert.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {AlwaysOnVpnMode, AlwaysOnVpnProperties, CellularSimState, ConfigProperties, CrosNetworkConfigObserverRemote, DeviceStateProperties, FilterType, GlobalPolicy, InhibitReason, ManagedProperties, NetworkCertificate, NetworkFilter, NetworkStateProperties, NO_LIMIT, StartConnectResult, UInt32Value, VpnProvider} from 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/cros_network_config.mojom-webui.js';
 import {ConnectionStateType, DeviceStateType, NetworkType} from 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/network_types.mojom-webui.js';
 import {Time} from 'chrome://resources/mojo/mojo/public/mojom/base/time.mojom-webui.js';
diff --git a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
index cc2541d..bc57e9d 100644
--- a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
+++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
@@ -6,7 +6,7 @@
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {setScanServiceForTesting} from 'chrome://scanning/mojo_interface_provider.js';
 import {MAX_NUM_SAVED_SCANNERS, ScannerArr, ScannerSetting, ScanSettings, StartMultiPageScanResponse} from 'chrome://scanning/scanning_app_types.js';
 import {getColorModeString, getPageSizeString, tokenToString} from 'chrome://scanning/scanning_app_util.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/BUILD.gn b/chrome/test/data/webui/chromeos/shimless_rma/BUILD.gn
index 347b1513..7874908 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/BUILD.gn
+++ b/chrome/test/data/webui/chromeos/shimless_rma/BUILD.gn
@@ -117,11 +117,11 @@
 js_library("onboarding_choose_destination_page_test") {
   deps = [
     "..:chai_assert",
+    "//ash/webui/common/resources:promise_resolver",
     "//ash/webui/shimless_rma/resources:fake_shimless_rma_service",
     "//ash/webui/shimless_rma/resources:mojo_interface_provider",
     "//ash/webui/shimless_rma/resources:onboarding_choose_destination_page",
     "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:promise_resolver",
   ]
   externs_list = [ "$externs_path/mocha-2.5.js" ]
 }
@@ -169,13 +169,13 @@
 js_library("onboarding_select_components_page_test") {
   deps = [
     "..:chai_assert",
+    "//ash/webui/common/resources:promise_resolver",
     "//ash/webui/shimless_rma/resources:fake_shimless_rma_service",
     "//ash/webui/shimless_rma/resources:mojo_interface_provider",
     "//ash/webui/shimless_rma/resources:onboarding_select_components_page",
     "//ash/webui/shimless_rma/resources:repair_component_chip",
     "//ash/webui/shimless_rma/resources:shimless_rma",
     "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:promise_resolver",
   ]
   externs_list = [ "$externs_path/mocha-2.5.js" ]
 }
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/critical_error_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/critical_error_page_test.js
index 79c03460..d02fe8e 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/critical_error_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/critical_error_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {CriticalErrorPage} from 'chrome://shimless-rma/critical_error_page.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/hardware_error_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/hardware_error_page_test.js
index 152574b..53f1c31 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/hardware_error_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/hardware_error_page_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {HardwareErrorPage} from 'chrome://shimless-rma/hardware_error_page.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_destination_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_destination_page_test.js
index 81e6736..9e3eebbe 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_destination_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_destination_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {OnboardingChooseDestinationPageElement} from 'chrome://shimless-rma/onboarding_choose_destination_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_wipe_device_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_wipe_device_page_test.js
index 69867bf..cf9fb52 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_wipe_device_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_wipe_device_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {OnboardingChooseWipeDevicePage} from 'chrome://shimless-rma/onboarding_choose_wipe_device_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_wp_disable_method_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_wp_disable_method_page_test.js
index dfee3f30..d8f31a70 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_wp_disable_method_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_choose_wp_disable_method_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {OnboardingChooseWpDisableMethodPage} from 'chrome://shimless-rma/onboarding_choose_wp_disable_method_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_enter_rsu_wp_disable_code_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_enter_rsu_wp_disable_code_page_test.js
index a9cf766..9dadbe8 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_enter_rsu_wp_disable_code_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_enter_rsu_wp_disable_code_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {fakeRsuChallengeQrCode} from 'chrome://shimless-rma/fake_data.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_landing_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_landing_page_test.js
index a0552941..4b8ebe7 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_landing_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_landing_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {fakeStates} from 'chrome://shimless-rma/fake_data.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_select_components_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_select_components_page_test.js
index 352c4c9c..7dd3d09 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_select_components_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_select_components_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {getDeepActiveElement} from 'chrome://resources/js/util.js';
 import {fakeComponentsForRepairStateTest} from 'chrome://shimless-rma/fake_data.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_update_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_update_page_test.js
index fca325d3..441d059 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_update_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_update_page_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {OnboardingUpdatePageElement} from 'chrome://shimless-rma/onboarding_update_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_wait_for_manual_wp_disable_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_wait_for_manual_wp_disable_page_test.js
index 3784e359..147a378a 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_wait_for_manual_wp_disable_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_wait_for_manual_wp_disable_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {fakeRsuChallengeQrCode} from 'chrome://shimless-rma/fake_data.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_wp_disable_complete_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_wp_disable_complete_page_test.js
index 8108189..e746889 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/onboarding_wp_disable_complete_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/onboarding_wp_disable_complete_page_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {OnboardingWpDisableCompletePage} from 'chrome://shimless-rma/onboarding_wp_disable_complete_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/reboot_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/reboot_page_test.js
index bec6f47..0517503 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/reboot_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/reboot_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {RebootPage} from 'chrome://shimless-rma/reboot_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_failed_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_failed_page_test.js
index 4d124d5..192419d 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_failed_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_failed_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {getDeepActiveElement} from 'chrome://resources/js/util.js';
 import {fakeCalibrationComponentsWithFails, fakeCalibrationComponentsWithoutFails} from 'chrome://shimless-rma/fake_data.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_run_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_run_page_test.js
index 7950db4..5277252 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_run_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_run_page_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {ReimagingCalibrationRunPage} from 'chrome://shimless-rma/reimaging_calibration_run_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_setup_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_setup_page_test.js
index 882a921..4c287a2 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_setup_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_calibration_setup_page_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {ReimagingCalibrationSetupPage} from 'chrome://shimless-rma/reimaging_calibration_setup_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_device_information_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_device_information_page_test.js
index 8854f87..d039dcd 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_device_information_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_device_information_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {fakeDeviceRegions, fakeDeviceSkus, fakeDeviceWhiteLabels} from 'chrome://shimless-rma/fake_data.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_firmware_update_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_firmware_update_page_test.js
index 89e6990..4411de2 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_firmware_update_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_firmware_update_page_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {UpdateRoFirmwarePage} from 'chrome://shimless-rma/reimaging_firmware_update_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_provisioning_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_provisioning_page_test.js
index e42a8423..479de7ca 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/reimaging_provisioning_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/reimaging_provisioning_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {PROVISIONING_ERROR_CODE_PREFIX, ReimagingProvisioningPage} from 'chrome://shimless-rma/reimaging_provisioning_page.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/shimless_rma_app_test.js b/chrome/test/data/webui/chromeos/shimless_rma/shimless_rma_app_test.js
index 3120ddb..d741a1f5 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/shimless_rma_app_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/shimless_rma_app_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {fakeCalibrationComponentsWithFails, fakeChromeVersion, fakeStates} from 'chrome://shimless-rma/fake_data.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/wrapup_finalize_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/wrapup_finalize_page_test.js
index ed3d809..dd10ee8 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/wrapup_finalize_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/wrapup_finalize_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {ShimlessRma} from 'chrome://shimless-rma/shimless_rma.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/wrapup_repair_complete_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/wrapup_repair_complete_page_test.js
index b4b45e60..752c885 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/wrapup_repair_complete_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/wrapup_repair_complete_page_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {ShimlessRma} from 'chrome://shimless-rma/shimless_rma.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/wrapup_restock_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/wrapup_restock_page_test.js
index b8e364d..2eee9284 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/wrapup_restock_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/wrapup_restock_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {ShimlessRma} from 'chrome://shimless-rma/shimless_rma.js';
diff --git a/chrome/test/data/webui/chromeos/shimless_rma/wrapup_wait_for_manual_wp_enable_page_test.js b/chrome/test/data/webui/chromeos/shimless_rma/wrapup_wait_for_manual_wp_enable_page_test.js
index d5eb1e2..469f9a4c 100644
--- a/chrome/test/data/webui/chromeos/shimless_rma/wrapup_wait_for_manual_wp_enable_page_test.js
+++ b/chrome/test/data/webui/chromeos/shimless_rma/wrapup_wait_for_manual_wp_enable_page_test.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 import {FakeShimlessRmaService} from 'chrome://shimless-rma/fake_shimless_rma_service.js';
 import {setShimlessRmaServiceForTesting} from 'chrome://shimless-rma/mojo_interface_provider.js';
 import {ShimlessRma} from 'chrome://shimless-rma/shimless_rma.js';
diff --git a/chrome/test/data/webui/chromeos/test_browser_proxy.js b/chrome/test/data/webui/chromeos/test_browser_proxy.js
index 6ba3128..b634a3f 100644
--- a/chrome/test/data/webui/chromeos/test_browser_proxy.js
+++ b/chrome/test/data/webui/chromeos/test_browser_proxy.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {assert} from 'chrome://resources/js/assert.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 
 /**
  * @typedef {{resolver: !PromiseResolver,
diff --git a/chrome/test/data/webui/chromeos/test_store.js b/chrome/test/data/webui/chromeos/test_store.js
index 4b6b3652..e93fc80 100644
--- a/chrome/test/data/webui/chromeos/test_store.js
+++ b/chrome/test/data/webui/chromeos/test_store.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {Action, Store} from 'chrome://resources/ash/common/store/store.js';
-import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
+import {PromiseResolver} from 'chrome://resources/ash/common/promise_resolver.js';
 
 /**
  * This is a generic test store, designed to replace a real Store instance
diff --git a/chrome/test/data/webui/js/promise_resolver_test.ts b/chrome/test/data/webui/js/promise_resolver_test.ts
index ebe56ad..b91cc69a 100644
--- a/chrome/test/data/webui/js/promise_resolver_test.ts
+++ b/chrome/test/data/webui/js/promise_resolver_test.ts
@@ -3,25 +3,9 @@
 // found in the LICENSE file.
 
 import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
-import {assertFalse, assertThrows, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 
 suite('PromiseResolverModuleTest', function() {
-  test('members read only', function() {
-    const resolver = new PromiseResolver<void>();
-    assertThrows(function() {
-      // Ignore 'readonly' TS warning to check that a runtime exception is
-      // thrown as well.
-      // @ts-ignore:next-line
-      resolver.promise = Promise.resolve();
-    });
-    assertThrows(function() {
-      resolver.resolve = function() {};
-    });
-    assertThrows(function() {
-      resolver.reject = function() {};
-    });
-  });
-
   test('resolves', function(done) {
     const resolver = new PromiseResolver<void>();
     resolver.promise.then(done);
diff --git a/chrome/updater/test/integration_tests_win.cc b/chrome/updater/test/integration_tests_win.cc
index 90f60bd..370ee2a 100644
--- a/chrome/updater/test/integration_tests_win.cc
+++ b/chrome/updater/test/integration_tests_win.cc
@@ -360,13 +360,13 @@
 void SetupAppCommand(UpdaterScope scope,
                      const std::wstring& app_id,
                      const std::wstring& command_id,
+                     const std::wstring& parameters,
                      base::ScopedTempDir& temp_dir) {
   base::CommandLine cmd_exe_command_line(base::CommandLine::NO_PROGRAM);
   SetupCmdExe(scope, cmd_exe_command_line, temp_dir);
   CreateAppCommandRegistry(
       scope, app_id, command_id,
-      base::StrCat(
-          {cmd_exe_command_line.GetCommandLineString(), L" /c \"exit %1\""}));
+      base::StrCat({cmd_exe_command_line.GetCommandLineString(), parameters}));
 }
 
 base::Process LaunchOfflineInstallProcess(bool is_legacy_install,
@@ -1108,6 +1108,28 @@
             ERROR_SUCCESS);
 }
 
+HRESULT ProcessLaunchCmdElevated(
+    Microsoft::WRL::ComPtr<IProcessLauncher> process_launcher,
+    const std::wstring& appid,
+    const std::wstring& commandid,
+    const int expected_exit_code) {
+  ULONG_PTR proc_handle = 0;
+  HRESULT hr = process_launcher->LaunchCmdElevated(
+      appid.c_str(), commandid.c_str(), ::GetCurrentProcessId(), &proc_handle);
+  if (FAILED(hr))
+    return hr;
+
+  EXPECT_NE(static_cast<ULONG_PTR>(0), proc_handle);
+
+  const base::Process process(reinterpret_cast<HANDLE>(proc_handle));
+  int exit_code = 0;
+  EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(),
+                                             &exit_code));
+  EXPECT_EQ(exit_code, expected_exit_code);
+
+  return hr;
+}
+
 void ExpectLegacyProcessLauncherSucceeds(UpdaterScope scope) {
   // ProcessLauncher is only implemented for kSystem at the moment.
   if (scope != UpdaterScope::kSystem)
@@ -1119,29 +1141,28 @@
 
   constexpr wchar_t kAppId1[] = L"{831EF4D0-B729-4F61-AA34-91526481799D}";
   constexpr wchar_t kCommandId[] = L"CmdExit0";
-  ULONG_PTR proc_handle = 0;
-  DWORD caller_proc_id = ::GetCurrentProcessId();
 
   // Succeeds when the command is present in the registry.
   base::ScopedTempDir temp_dir;
   SetupLaunchCommandElevated(kAppId1, kCommandId, L" /c \"exit 5420\"",
                              temp_dir);
-  EXPECT_HRESULT_SUCCEEDED(process_launcher->LaunchCmdElevated(
-      kAppId1, kCommandId, caller_proc_id, &proc_handle));
-  EXPECT_NE(static_cast<ULONG_PTR>(0), proc_handle);
 
-  base::Process process = base::Process(reinterpret_cast<HANDLE>(proc_handle));
-  int exit_code = 0;
-  EXPECT_TRUE(process.WaitForExitWithTimeout(TestTimeouts::action_max_timeout(),
-                                             &exit_code));
-  EXPECT_EQ(exit_code, 5420);
+  // Succeeds when the command is present in the registry.
+  ASSERT_HRESULT_SUCCEEDED(
+      ProcessLaunchCmdElevated(process_launcher, kAppId1, kCommandId, 5420));
 
   DeleteLaunchCommandElevated(kAppId1, kCommandId);
+  EXPECT_EQ(
+      HRESULT_FROM_WIN32(ERROR_BAD_COMMAND),
+      ProcessLaunchCmdElevated(process_launcher, kAppId1, kCommandId, 5420));
 
-  EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_BAD_COMMAND),
-            process_launcher->LaunchCmdElevated(kAppId1, kCommandId,
-                                                caller_proc_id, &proc_handle));
-  EXPECT_EQ(static_cast<ULONG_PTR>(0), proc_handle);
+  base::ScopedTempDir app_command_temp_dir;
+  SetupAppCommand(scope, kAppId1, kCommandId, L" /c \"exit 11555\"",
+                  app_command_temp_dir);
+  ASSERT_HRESULT_SUCCEEDED(
+      ProcessLaunchCmdElevated(process_launcher, kAppId1, kCommandId, 11555));
+
+  DeleteAppClientKey(scope, kAppId1);
 }
 
 void ExpectLegacyAppCommandWebSucceeds(UpdaterScope scope,
@@ -1156,7 +1177,7 @@
   const std::wstring appid = base::UTF8ToWide(app_id);
   const std::wstring commandid = base::UTF8ToWide(command_id);
 
-  SetupAppCommand(scope, appid, commandid, temp_dir);
+  SetupAppCommand(scope, appid, commandid, L" /c \"exit %1\"", temp_dir);
 
   Microsoft::WRL::ComPtr<IAppBundleWeb> bundle;
   InitializeBundle(scope, bundle);
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index e8663937..c71d036 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-15240.0.0
\ No newline at end of file
+15245.0.0
\ No newline at end of file
diff --git a/chromeos/ash/components/login/auth/auth_factor_editor.cc b/chromeos/ash/components/login/auth/auth_factor_editor.cc
index 84c3d7e..46178df 100644
--- a/chromeos/ash/components/login/auth/auth_factor_editor.cc
+++ b/chromeos/ash/components/login/auth/auth_factor_editor.cc
@@ -20,6 +20,7 @@
 #include "chromeos/ash/components/login/auth/cryptohome_parameter_utils.h"
 #include "chromeos/ash/components/login/auth/public/cryptohome_key_constants.h"
 #include "chromeos/ash/components/login/auth/public/user_context.h"
+#include "chromeos/ash/components/login/auth/recovery/service_constants.h"
 #include "components/device_event_log/device_event_log.h"
 #include "components/user_manager/user.h"
 
@@ -426,7 +427,7 @@
   //  perhaps configurable via a command line switch for testing.
   cryptohome::AuthFactorInput input(
       cryptohome::AuthFactorInput::RecoveryCreation{
-          .pub_key = "STUB MEDIATOR PUB KEY",
+          .pub_key = GetRecoveryHsmPublicKey(),
           .user_gaia_id = context->GetGaiaID(),
           .device_user_id = context->GetDeviceId()});
 
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb
index e9ef497..4984f81 100644
--- a/chromeos/strings/chromeos_strings_am.xtb
+++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -711,6 +711,7 @@
 <translation id="7882358943899516840">የአቅራቢ አይነት</translation>
 <translation id="7882501334836096755">ይፋዊ ቁልፍ</translation>
 <translation id="7890841768028788197">የውስጥ መነካት የሚችል ማያ</translation>
+<translation id="7915220255123750251">የአውታረ መረብ ኤፒኤን ቅንብሮችን ያስተዳድሩ። ኤፒኤኖች በተንቀሳቃሽ ስልክ አውታረ መረብ እና በይነመረብ መካከል ግንኙነት ይመሰርታሉ።</translation>
 <translation id="7936303884198020182">ምንም የስም አገልጋዮች አልተገኙም</translation>
 <translation id="7942349550061667556">ቀይ</translation>
 <translation id="7943235353293548836">የማያቋርጥ እንደነቃ አቆይ ክፍተት</translation>
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb
index 80ca51b..6988faa 100644
--- a/chromeos/strings/chromeos_strings_az.xtb
+++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">Provayder növü</translation>
 <translation id="7882501334836096755">İctimai açar</translation>
 <translation id="7890841768028788197">Daxili taçskrin</translation>
+<translation id="7915220255123750251">Şəbəkə APN ayarlarını idarə edin. APN-lər mobil şəbəkə ilə internet arasında əlaqə yaradır.</translation>
 <translation id="7936303884198020182">Ad serveri tapılmadı</translation>
 <translation id="7942349550061667556">Qırmızı</translation>
 <translation id="7943235353293548836">Davamlı aktivlik mesajı intervalı</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index b267ab6..57eae45 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">পরিষেবা প্রদানকারীর ধরন</translation>
 <translation id="7882501334836096755">সর্বজনীন 'কী'</translation>
 <translation id="7890841768028788197">ইন্টার্নাল টাচস্ক্রিন</translation>
+<translation id="7915220255123750251">নেটওয়ার্ক APN সেটিংস ম্যানেজ করুন। APN একটি সেলুলার নেটওয়ার্ক এবং ইন্টারনেটের মধ্যে কানেকশন তৈরি করে।</translation>
 <translation id="7936303884198020182">ডোমেন নেম সার্ভার খুঁজে পাওয়া যায়নি</translation>
 <translation id="7942349550061667556">লাল</translation>
 <translation id="7943235353293548836">অবিরাম সক্রিয়-রাখা ইন্টারভ্যাল</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb
index b6836ad..2de07e8 100644
--- a/chromeos/strings/chromeos_strings_bs.xtb
+++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Vrsta davatelja usluge</translation>
 <translation id="7882501334836096755">Javni ključ</translation>
 <translation id="7890841768028788197">Interni ekran na dodir</translation>
+<translation id="7915220255123750251">Upravljajte mrežnim postavkama za APN. APN-ovi uspostavljaju vezu između mobilne mreže i interneta.</translation>
 <translation id="7936303884198020182">Nije pronađen nijedan server naziva</translation>
 <translation id="7942349550061667556">Crvena</translation>
 <translation id="7943235353293548836">Dosljedan interval keep-alive poruka</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index 0136a48..96021af9 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -711,6 +711,7 @@
 <translation id="7882358943899516840">Providertyp</translation>
 <translation id="7882501334836096755">Öffentlicher Schlüssel</translation>
 <translation id="7890841768028788197">Interner Touchscreen</translation>
+<translation id="7915220255123750251">Hier kannst du die APN-Netzwerkeinstellungen verwalten. APNs stellen eine Verbindung zwischen einem Mobilfunknetz und dem Internet her.</translation>
 <translation id="7936303884198020182">Es wurden keine Nameserver gefunden</translation>
 <translation id="7942349550061667556">Rot</translation>
 <translation id="7943235353293548836">Persistentes Keepalive-Intervall</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb
index d3b390e1..038ef56b 100644
--- a/chromeos/strings/chromeos_strings_en-GB.xtb
+++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -473,6 +473,7 @@
 <translation id="5499114900554609492">Couldn't complete scan</translation>
 <translation id="5499762266711462226">Keyboard colour is based on the wallpaper</translation>
 <translation id="5502931783115429516">Android not running</translation>
+<translation id="551689408806449779">Device has been disconnected. Try reconnecting to test</translation>
 <translation id="5519195206574732858">LTE</translation>
 <translation id="554517032089923082">GTC</translation>
 <translation id="5559898619118303662">Automatically switch to Dark theme at sunset</translation>
@@ -502,6 +503,7 @@
 <translation id="5860033963881614850">Off</translation>
 <translation id="5860491529813859533">Turn on</translation>
 <translation id="5866840822086176774">Very strong</translation>
+<translation id="5876385649737594562">Turn on to select options</translation>
 <translation id="588258955323874662">Full screen</translation>
 <translation id="5895138241574237353">Restart</translation>
 <translation id="5901630391730855834">Yellow</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index 2021cd9..10b74a82 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Tipo de proveedor</translation>
 <translation id="7882501334836096755">Clave pública</translation>
 <translation id="7890841768028788197">Pantalla táctil interna</translation>
+<translation id="7915220255123750251">Administra la configuración del APN de red. Los APNs establecen una conexión entre Internet y una red móvil.</translation>
 <translation id="7936303884198020182">no se encontraron servidores de nombres</translation>
 <translation id="7942349550061667556">Rojo</translation>
 <translation id="7943235353293548836">Intervalo keepalive persistente</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb
index 80c67c9..b5f50d9 100644
--- a/chromeos/strings/chromeos_strings_es.xtb
+++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">Tipo de proveedor</translation>
 <translation id="7882501334836096755">Clave pública</translation>
 <translation id="7890841768028788197">Pantalla táctil interna</translation>
+<translation id="7915220255123750251">Gestiona los ajustes de APN de la red. Los APNs establecen una conexión entre una red móvil e Internet.</translation>
 <translation id="7936303884198020182">No se han encontrado servidores de nombres</translation>
 <translation id="7942349550061667556">Rojo</translation>
 <translation id="7943235353293548836">Intervalo keepalive persistente</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb
index d4d7483..007a834 100644
--- a/chromeos/strings/chromeos_strings_et.xtb
+++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Teenusepakkuja tüüp</translation>
 <translation id="7882501334836096755">Avalik võti</translation>
 <translation id="7890841768028788197">Sisemine puuteekraan</translation>
+<translation id="7915220255123750251">Hallake võrgu APN-ide seadeid. APN-id loovad ühenduse mobiilsidevõrgu ja interneti vahel.</translation>
 <translation id="7936303884198020182">Ei leitud ühtegi nimeserverit</translation>
 <translation id="7942349550061667556">Punane</translation>
 <translation id="7943235353293548836">Püsiva säilitamissõnumi intervall</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb
index 838c0037..6dc82ad 100644
--- a/chromeos/strings/chromeos_strings_fa.xtb
+++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">نوع ارائه‌دهنده</translation>
 <translation id="7882501334836096755">کلید عمومی</translation>
 <translation id="7890841768028788197">صفحه لمسی داخلی</translation>
+<translation id="7915220255123750251">‏مدیریت تنظیمات APN شبکه. APN اتصالی میان شبکه تلفن همراه و اینترنت برقرار می‌کند.</translation>
 <translation id="7936303884198020182">سرور نام دامنه پیدا نشد</translation>
 <translation id="7942349550061667556">قرمز</translation>
 <translation id="7943235353293548836">فاصله زمانی زنده‌نگهداری دائم</translation>
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb
index e1c1f20..ce73c6d4 100644
--- a/chromeos/strings/chromeos_strings_fr-CA.xtb
+++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Type de fournisseur</translation>
 <translation id="7882501334836096755">Clé publique</translation>
 <translation id="7890841768028788197">Écran tactile interne</translation>
+<translation id="7915220255123750251">Gérez les paramètres de NPA du réseau. Les NPA établissent une connexion entre un réseau cellulaire et Internet.</translation>
 <translation id="7936303884198020182">Aucun serveur de nom n'a été trouvé</translation>
 <translation id="7942349550061667556">Rouge</translation>
 <translation id="7943235353293548836">Intervalle de connexion persistante</translation>
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb
index a8e22b1..6456925 100644
--- a/chromeos/strings/chromeos_strings_hi.xtb
+++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -711,6 +711,7 @@
 <translation id="7882358943899516840">कंपनी का प्रकार</translation>
 <translation id="7882501334836096755">सार्वजनिक कुंजी</translation>
 <translation id="7890841768028788197">टचस्क्रीन</translation>
+<translation id="7915220255123750251">नेटवर्क एपीएन सेटिंग मैनेज करें. एपीएन, मोबाइल नेटवर्क और इंटरनेट के बीच कनेक्शन बनाते हैं.</translation>
 <translation id="7936303884198020182">कोई भी नाम सर्वर नहीं मिला</translation>
 <translation id="7942349550061667556">लाल</translation>
 <translation id="7943235353293548836">परसिस्टेंट कीपअलाइव इंटरवल</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb
index 76b381e5..4bf9889 100644
--- a/chromeos/strings/chromeos_strings_hu.xtb
+++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Szolgáltató típusa</translation>
 <translation id="7882501334836096755">Nyilvános kulcs</translation>
 <translation id="7890841768028788197">Belső érintőképernyő</translation>
+<translation id="7915220255123750251">Kezelheti a hálózati APN-beállításokat. Az APN-ek kapcsolatot létesítenek a mobilhálózat és az internet között.</translation>
 <translation id="7936303884198020182">Nem találhatók névszerverek</translation>
 <translation id="7942349550061667556">Piros</translation>
 <translation id="7943235353293548836">Folyamatos keepalive-időintervallum</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb
index 9fb0a83..e0c27d8 100644
--- a/chromeos/strings/chromeos_strings_id.xtb
+++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Jenis penyedia</translation>
 <translation id="7882501334836096755">Kunci publik</translation>
 <translation id="7890841768028788197">Layar sentuh internal</translation>
+<translation id="7915220255123750251">Kelola setelan APN jaringan. APN membuat koneksi antara jaringan seluler dan internet.</translation>
 <translation id="7936303884198020182">Tidak ada server nama yang ditemukan</translation>
 <translation id="7942349550061667556">Merah</translation>
 <translation id="7943235353293548836">Interval keepalive persisten</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb
index 0836813..4527417 100644
--- a/chromeos/strings/chromeos_strings_ja.xtb
+++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -711,6 +711,7 @@
 <translation id="7882358943899516840">プロバイダの種類</translation>
 <translation id="7882501334836096755">公開鍵</translation>
 <translation id="7890841768028788197">内部タッチスクリーン</translation>
+<translation id="7915220255123750251">ネットワークの APN 設定を管理します。APN は、モバイル ネットワークとインターネットの間の接続を確立します。</translation>
 <translation id="7936303884198020182">ネームサーバーが見つかりませんでした</translation>
 <translation id="7942349550061667556">赤</translation>
 <translation id="7943235353293548836">PersistentKeepAlive 送信間隔</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb
index 3c7f4765..3d606239 100644
--- a/chromeos/strings/chromeos_strings_km.xtb
+++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">ប្រភេទអ្នកផ្តល់សេវាកម្ម</translation>
 <translation id="7882501334836096755">សោ​សាធារណៈ</translation>
 <translation id="7890841768028788197">អេក្រង់ថាច់​ដែលភ្ជាប់មក​ជាមួយស្រាប់</translation>
+<translation id="7915220255123750251">គ្រប់គ្រង​ការ​កំណត់ APN បណ្ដាញ។ APN បង្កើត​ការ​តភ្ជាប់​រវាង​បណ្ដាញ​ចល័ត និង​អ៊ីនធឺណិត។</translation>
 <translation id="7936303884198020182">រកមិនឃើញ DNS ទេ</translation>
 <translation id="7942349550061667556">ក្រហម</translation>
 <translation id="7943235353293548836">ចន្លោះពេល​នៃការរក្សាឱ្យនៅដំណើរការ​ជាប់លាប់</translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb
index f875c97..503e4fd 100644
--- a/chromeos/strings/chromeos_strings_kn.xtb
+++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">ಪೂರೈಕೆದಾರರ ಪ್ರಕಾರ</translation>
 <translation id="7882501334836096755">ಸಾರ್ವಜನಿಕ ಕೀ</translation>
 <translation id="7890841768028788197">ಆಂತರಿಕ ಟಚ್‌ಸ್ಕ್ರೀನ್</translation>
+<translation id="7915220255123750251">ನೆಟ್‌ವರ್ಕ್ APN ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ. APN ಗಳು ಸೆಲ್ಯುಲಾರ್ ನೆಟ್‌ವರ್ಕ್ ಹಾಗೂ ಇಂಟರ್ನೆಟ್ ನಡುವೆ ಕನೆಕ್ಷನ್ ಅನ್ನು ಸ್ಥಾಪಿಸುತ್ತವೆ.</translation>
 <translation id="7936303884198020182">ಹೆಸರು ಇಲ್ಲದ ಸರ್ವರ್‌ಗಳು ಕಂಡುಬಂದಿವೆ.</translation>
 <translation id="7942349550061667556">ಕೆಂಪು</translation>
 <translation id="7943235353293548836">ನಿರಂತರ ಕೀಪ್-ಅಲೈವ್ ಇಂಟರ್‌ವಲ್</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index bec8fc2..a330f6b 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">공급자 유형</translation>
 <translation id="7882501334836096755">공개 키</translation>
 <translation id="7890841768028788197">내부 터치스크린</translation>
+<translation id="7915220255123750251">네트워크 APN 설정을 관리하세요. APN은 셀룰러 네트워크와 인터넷 간의 연결을 설정합니다.</translation>
 <translation id="7936303884198020182">네임서버를 찾을 수 없습니다.</translation>
 <translation id="7942349550061667556">빨간색</translation>
 <translation id="7943235353293548836">영구 연결 유지 간격</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index ec979d0..7d66056 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Teikėjo tipas</translation>
 <translation id="7882501334836096755">Viešasis raktas</translation>
 <translation id="7890841768028788197">Vidinis jutiklinis ekranas</translation>
+<translation id="7915220255123750251">Tvarkyti tinklo APN nustatymus. APN užmezga ryšį tarp mobiliojo ryšio tinklo ir interneto.</translation>
 <translation id="7936303884198020182">Domenų pavadinimų serverių nerasta</translation>
 <translation id="7942349550061667556">Raudona</translation>
 <translation id="7943235353293548836">Nuolatinio palaikymo intervalas</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb
index 1411a7d..63b02af 100644
--- a/chromeos/strings/chromeos_strings_ml.xtb
+++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">പ്രൊവൈഡര്‍ തരം:</translation>
 <translation id="7882501334836096755">എല്ലാവർക്കുമായുള്ള കീ</translation>
 <translation id="7890841768028788197">ആന്തരിക ടച്ച്സ്ക്രീൻ</translation>
+<translation id="7915220255123750251">നെറ്റ്‌വർക്ക് APN ക്രമീകരണം മാനേജ് ചെയ്യുക. സെല്ലുലാർ നെറ്റ്‌വർക്കിനും ഇന്റർനെറ്റിനും ഇടയിൽ APN-കൾ കണക്ഷൻ സ്ഥാപിക്കുന്നു.</translation>
 <translation id="7936303884198020182">നെയിം സെർവറുകളൊന്നും കണ്ടെത്തിയില്ല</translation>
 <translation id="7942349550061667556">ചുവപ്പ്</translation>
 <translation id="7943235353293548836">സജീവമായി നിലനിർത്താനുള്ള സ്ഥിര ഇടവേള</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index 4146e451..63ba4f3e 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">ထောက်ပံ့သူအမျိုးစား</translation>
 <translation id="7882501334836096755">အများသုံးကီး</translation>
 <translation id="7890841768028788197">အတွင်းပိုင်း တို့ထိမျက်နှာပြင်</translation>
+<translation id="7915220255123750251">ကွန်ရက် APN ဆက်တင်များကို စီမံနိုင်သည်။ APN များက ဆယ်လူလာ ကွန်ရက်နှင့် အင်တာနက်အကြား ချိတ်ဆက်ပေးသည်။</translation>
 <translation id="7936303884198020182">အမည်ဆာဗာတစ်ခုမျှ ရှာမတွေ့ပါ</translation>
 <translation id="7942349550061667556">အနီရောင်</translation>
 <translation id="7943235353293548836">အမြဲတမ်း ဆက်ချိတ်ထားခြင်း ကြားကာလ</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb
index 5e4ef629..518a914a 100644
--- a/chromeos/strings/chromeos_strings_ne.xtb
+++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">प्रदायकको प्रकार</translation>
 <translation id="7882501334836096755">सार्वजनिक की</translation>
 <translation id="7890841768028788197">इन्टर्नल टचस्क्रिन</translation>
+<translation id="7915220255123750251">नेटवर्क APN सम्बन्धी सेटिङ मिलाउनुहोस्। APN ले मोबाइल नेटवर्क र इन्टरनेटबिचको कनेक्सन बनाउँछ।</translation>
 <translation id="7936303884198020182">कुनै पनि डोमेन नेम सर्भर फेला परेन</translation>
 <translation id="7942349550061667556">रातो</translation>
 <translation id="7943235353293548836">पर्सिस्टेन्ट किपअलाइभ इन्टर्भल</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb
index b2dea25..d1e1ba8 100644
--- a/chromeos/strings/chromeos_strings_no.xtb
+++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Leverandørtype</translation>
 <translation id="7882501334836096755">Offentlig nøkkel</translation>
 <translation id="7890841768028788197">Intern berøringsskjerm</translation>
+<translation id="7915220255123750251">Administrer APN-innstillingene for nettverket. APN oppretter en tilkobling mellom et mobilnettverk og internett.</translation>
 <translation id="7936303884198020182">Fant ingen navnetjenere</translation>
 <translation id="7942349550061667556">Rød</translation>
 <translation id="7943235353293548836">Vedvarende keepalive-intervall</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb
index 8eaf62c5..b170c80 100644
--- a/chromeos/strings/chromeos_strings_pa.xtb
+++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">ਪ੍ਰਦਾਨਕ ਕਿਸਮ</translation>
 <translation id="7882501334836096755">ਜਨਤਕ ਕੁੰਜੀ</translation>
 <translation id="7890841768028788197">ਅੰਦਰੂਨੀ ਟੱਚਸਕ੍ਰੀਨ</translation>
+<translation id="7915220255123750251">ਨੈੱਟਵਰਕ APN ਸੈਟਿੰਗਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ। APN ਸੈਲਿਊਲਰ ਨੈੱਟਵਰਕ ਅਤੇ ਇੰਟਰਨੈੱਟ ਵਿਚਕਾਰ ਕਨੈਕਸ਼ਨ ਸਥਾਪਤ ਕਰਦੇ ਹਨ।</translation>
 <translation id="7936303884198020182">ਕੋਈ ਨਾਮ ਸਰਵਰ ਨਹੀਂ ਮਿਲਿਆ</translation>
 <translation id="7942349550061667556">ਲਾਲ</translation>
 <translation id="7943235353293548836">ਸਥਾਈ ਕੀਪ-ਅਲਾਇਵ ਅੰਤਰਾਲ</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb
index cff06b06..bd09a13 100644
--- a/chromeos/strings/chromeos_strings_pt-BR.xtb
+++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -711,6 +711,7 @@
 <translation id="7882358943899516840">Tipo de provedor</translation>
 <translation id="7882501334836096755">Chave pública</translation>
 <translation id="7890841768028788197">Tela touchscreen interna</translation>
+<translation id="7915220255123750251">Gerenciar configurações do APN de rede. Os APNs estabelecem uma conexão entre a rede celular e a Internet.</translation>
 <translation id="7936303884198020182">Nenhum servidor de nomes encontrado</translation>
 <translation id="7942349550061667556">Vermelho</translation>
 <translation id="7943235353293548836">Intervalo de sinal de atividade permanente</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 5a9b148..e281020 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Tipo de fornecedor</translation>
 <translation id="7882501334836096755">Chave pública</translation>
 <translation id="7890841768028788197">Ecrã tátil interno</translation>
+<translation id="7915220255123750251">Faça a gestão das definições do APN (Nome do Ponto de Acesso) da rede. Os APNs estabelecem uma ligação entre uma rede móvel e a Internet.</translation>
 <translation id="7936303884198020182">Não foram encontrados servidores de nomes.</translation>
 <translation id="7942349550061667556">Vermelho</translation>
 <translation id="7943235353293548836">Intervalo keep-alive persistente</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb
index cdbf92fa..d6dc82c6 100644
--- a/chromeos/strings/chromeos_strings_ro.xtb
+++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Tip furnizor</translation>
 <translation id="7882501334836096755">Cheie publică</translation>
 <translation id="7890841768028788197">Ecran tactil intern</translation>
+<translation id="7915220255123750251">Gestionează setările APN ale rețelei. APN-urile stabilesc o conexiune între o rețea de date mobile și internet.</translation>
 <translation id="7936303884198020182">Nu s-au găsit servere de nume</translation>
 <translation id="7942349550061667556">Roșu</translation>
 <translation id="7943235353293548836">Interval keep-alive persistent</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb
index e6886cd7..d81f1f4f 100644
--- a/chromeos/strings/chromeos_strings_ru.xtb
+++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Тип провайдера</translation>
 <translation id="7882501334836096755">Открытый ключ</translation>
 <translation id="7890841768028788197">Встроенный сенсорный экран</translation>
+<translation id="7915220255123750251">Управление настройками точки доступа. С помощью точек доступа устанавливается подключение между мобильной сетью и интернетом.</translation>
 <translation id="7936303884198020182">Не найдены серверы доменных имен.</translation>
 <translation id="7942349550061667556">Красный</translation>
 <translation id="7943235353293548836">Постоянный интервал keepalive</translation>
diff --git a/chromeos/strings/chromeos_strings_si.xtb b/chromeos/strings/chromeos_strings_si.xtb
index d9911fa2..c2c0175 100644
--- a/chromeos/strings/chromeos_strings_si.xtb
+++ b/chromeos/strings/chromeos_strings_si.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">සැපයුම්කරු වර්ගය</translation>
 <translation id="7882501334836096755">පොදු යතුර</translation>
 <translation id="7890841768028788197">අභ්‍යන්තර ස්පර්ශ තිරය</translation>
+<translation id="7915220255123750251">ජාල APN සැකසීම් කළමනාකරණය කරන්න. APN සෙලියුලර් ජාලයක් සහ අන්තර්ජාලය අතර සම්බන්ධතාවයක් ඇති කරයි.</translation>
 <translation id="7936303884198020182">නම් සේවාදායක හමු නොවීය</translation>
 <translation id="7942349550061667556">රතු</translation>
 <translation id="7943235353293548836">ස්ථිර keepalive විරාමය</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index 7127ef5..070c796 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Typ poskytovateľa</translation>
 <translation id="7882501334836096755">Verejný kľúč</translation>
 <translation id="7890841768028788197">Interná dotyková obrazovka</translation>
+<translation id="7915220255123750251">Spravujte nastavenia názvov prístupových bodov (APN) siete. Názvy prístupových bodov umožňujú nadviazať pripojenie medzi mobilnou sieťou a internetom.</translation>
 <translation id="7936303884198020182">Nenašli sa žiadne servery DNS</translation>
 <translation id="7942349550061667556">Červená</translation>
 <translation id="7943235353293548836">Pretrvávajúci interval keepalive</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index f652abc..dbc123a 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Vrsta ponudnika</translation>
 <translation id="7882501334836096755">Javni ključ</translation>
 <translation id="7890841768028788197">Notranji zaslon na dotik</translation>
+<translation id="7915220255123750251">Upravljanje nastavitev APN-ja. APN-ji vzpostavijo povezavo med mobilnim omrežjem in internetom.</translation>
 <translation id="7936303884198020182">Najden ni bil noben imenski strežnik</translation>
 <translation id="7942349550061667556">Rdeča</translation>
 <translation id="7943235353293548836">Trajni interval ohranjanja povezave</translation>
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb
index e4455a95..e698e16 100644
--- a/chromeos/strings/chromeos_strings_sv.xtb
+++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Leverantörstyp</translation>
 <translation id="7882501334836096755">Offentlig nyckel</translation>
 <translation id="7890841768028788197">Intern pekskärm</translation>
+<translation id="7915220255123750251">Hantera APN-inställningar för nätverket. APN upprättar en anslutning mellan ett mobilnätverk och internet.</translation>
 <translation id="7936303884198020182">Inga namnservrar hittades</translation>
 <translation id="7942349550061667556">Röd</translation>
 <translation id="7943235353293548836">Beständigt keepalive-intervall</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb
index f9191607..f2cfba79 100644
--- a/chromeos/strings/chromeos_strings_sw.xtb
+++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">Aina ya mtoa huduma</translation>
 <translation id="7882501334836096755">Ufunguo wa umma</translation>
 <translation id="7890841768028788197">Skrini ya kugusa ya ndani</translation>
+<translation id="7915220255123750251">Dhibiti mipangilio ya APN ya mtandao. APN huanzisha muunganisho kati ya mtandao wa simu na Intaneti.</translation>
 <translation id="7936303884198020182">Hakuna seva za majina zilizopatikana</translation>
 <translation id="7942349550061667556">Nyekundu</translation>
 <translation id="7943235353293548836">Kipindi cha kutuma ujumbe endelevu wa kukagua muunganisho</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index 001ea98..9662997 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -712,6 +712,7 @@
 <translation id="7882358943899516840">ప్రదాత రకం</translation>
 <translation id="7882501334836096755">పబ్లిక్ కీ</translation>
 <translation id="7890841768028788197">అంతర్గత టచ్‌స్క్రీన్</translation>
+<translation id="7915220255123750251">నెట్‌వర్క్ APN సెట్టింగ్‌లను మేనేజ్ చేయండి. APNలు సెల్యులార్ నెట్‌వర్క్‌కు, ఇంటర్నెట్‌కు మధ్య కనెక్షన్‌ను ఏర్పరుస్తాయి.</translation>
 <translation id="7936303884198020182">పేరుతో సర్వర్‌లు కనుగొనబడలేదు</translation>
 <translation id="7942349550061667556">ఎరుపు</translation>
 <translation id="7943235353293548836">నిరంతర ఎక్స్‌టెన్షన్ యాక్టివిటీకీ సంబంధించిన ఇంట‌ర్‌వెల్</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb
index 7b62833e..77f2fb7 100644
--- a/chromeos/strings/chromeos_strings_th.xtb
+++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -473,6 +473,7 @@
 <translation id="5499114900554609492">สแกนไม่สำเร็จ</translation>
 <translation id="5499762266711462226">สีของแป้นพิมพ์จะขึ้นอยู่กับวอลเปเปอร์</translation>
 <translation id="5502931783115429516">Android ไม่ทำงาน</translation>
+<translation id="551689408806449779">ยกเลิกการเชื่อมต่ออุปกรณ์แล้ว ลองเชื่อมต่ออีกครั้งเพื่อทดสอบ</translation>
 <translation id="5519195206574732858">LTE</translation>
 <translation id="554517032089923082">GTC</translation>
 <translation id="5559898619118303662">เปลี่ยนเป็นธีมมืดโดยอัตโนมัติเมื่อพระอาทิตย์ตก</translation>
@@ -502,6 +503,7 @@
 <translation id="5860033963881614850">ปิด</translation>
 <translation id="5860491529813859533">เปิด</translation>
 <translation id="5866840822086176774">แรงมาก</translation>
+<translation id="5876385649737594562">เปิดเพื่อเลือกตัวเลือก</translation>
 <translation id="588258955323874662">เต็มหน้าจอ</translation>
 <translation id="5895138241574237353">ปิดแล้วเปิดอีกครั้ง</translation>
 <translation id="5901630391730855834">สีเหลือง</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb
index 6d85c34..a50ba4ce 100644
--- a/chromeos/strings/chromeos_strings_zh-CN.xtb
+++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -711,6 +711,7 @@
 <translation id="7882358943899516840">提供商类型</translation>
 <translation id="7882501334836096755">公钥</translation>
 <translation id="7890841768028788197">内部触摸屏</translation>
+<translation id="7915220255123750251">管理网络 APN 设置。APN 会在移动网络和互联网之间建立连接。</translation>
 <translation id="7936303884198020182">找不到任何域名服务器</translation>
 <translation id="7942349550061667556">红色</translation>
 <translation id="7943235353293548836">持久 keepalive 的时间间隔</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb
index 69ee62d..b5e0b00 100644
--- a/chromeos/strings/chromeos_strings_zh-HK.xtb
+++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -610,7 +610,7 @@
 <translation id="6766275201586212568">DNS 解析失敗</translation>
 <translation id="6768237774506518020">DNS 解析失敗率高</translation>
 <translation id="6791471867139427246">鍵盤背光顏色</translation>
-<translation id="6793680441750437230">在鍵盤上按下任意鍵,最多可同時按下 4 個按鍵。按下 Alt + Esc 鍵,即可關閉對話方塊。</translation>
+<translation id="6793680441750437230">在鍵盤上按下任何鍵,最多可同時按下 4 個按鍵。按下 Alt + Esc 鍵,即可關閉對話框。</translation>
 <translation id="680983167891198932">金鑰</translation>
 <translation id="6816797338148849397">你所揀嘅項目有相關資料可以提供。用向上箭咀掣就可以存取。</translation>
 <translation id="6853312040151791195">放電率</translation>
diff --git a/chromeos/strings/chromeos_strings_zu.xtb b/chromeos/strings/chromeos_strings_zu.xtb
index 23af8d2..c47e9ed 100644
--- a/chromeos/strings/chromeos_strings_zu.xtb
+++ b/chromeos/strings/chromeos_strings_zu.xtb
@@ -713,6 +713,7 @@
 <translation id="7882358943899516840">Uhlobo lomhlinzeki</translation>
 <translation id="7882501334836096755">Ukhiye wasesidlangalaleni</translation>
 <translation id="7890841768028788197">Isikrini esithinywayo sangaphakathi</translation>
+<translation id="7915220255123750251">Phatha amasethingi enethiwekhi ye-APN. Ama-APN asungula ukuxhumana phakathi kwenethiwekhi yeselula ne-inthanethi.</translation>
 <translation id="7936303884198020182">Awekho amaseva wegama atholakele</translation>
 <translation id="7942349550061667556">Okubomvu</translation>
 <translation id="7943235353293548836">I-keepalive Interval ephikelelayo</translation>
diff --git a/components/attribution_reporting/suitable_origin.cc b/components/attribution_reporting/suitable_origin.cc
index a1d06ec4..69d02be8 100644
--- a/components/attribution_reporting/suitable_origin.cc
+++ b/components/attribution_reporting/suitable_origin.cc
@@ -30,9 +30,14 @@
 }
 
 // static
+absl::optional<SuitableOrigin> SuitableOrigin::Create(const GURL& url) {
+  return Create(url::Origin::Create(url));
+}
+
+// static
 absl::optional<SuitableOrigin> SuitableOrigin::Deserialize(
     base::StringPiece str) {
-  return Create(url::Origin::Create(GURL(str)));
+  return Create(GURL(str));
 }
 
 SuitableOrigin::SuitableOrigin(url::Origin origin)
diff --git a/components/attribution_reporting/suitable_origin.h b/components/attribution_reporting/suitable_origin.h
index cc0dac94..df50e26 100644
--- a/components/attribution_reporting/suitable_origin.h
+++ b/components/attribution_reporting/suitable_origin.h
@@ -14,6 +14,8 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/origin.h"
 
+class GURL;
+
 namespace attribution_reporting {
 
 // A thin wrapper around `url::Origin` that enforces invariants required for an
@@ -33,6 +35,8 @@
 
   static absl::optional<SuitableOrigin> Create(url::Origin);
 
+  static absl::optional<SuitableOrigin> Create(const GURL&);
+
   // Creates a `SuitableOrigin` from the given string, which is first converted
   // to a `GURL`, then to a `url::Origin`, and then subject to this class's
   // invariants.
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
index 867c65d..e7f5cfc 100644
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -77,6 +77,7 @@
     "java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsPreferenceFragment.java",
     "java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java",
     "java/src/org/chromium/components/browser_ui/site_settings/StorageInfo.java",
+    "java/src/org/chromium/components/browser_ui/site_settings/ThreeStateCookieSettingsPreference.java",
     "java/src/org/chromium/components/browser_ui/site_settings/TriStateSiteSettingsPreference.java",
     "java/src/org/chromium/components/browser_ui/site_settings/Website.java",
     "java/src/org/chromium/components/browser_ui/site_settings/WebsiteAddress.java",
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ThreeStateCookieSettingsPreference.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ThreeStateCookieSettingsPreference.java
new file mode 100644
index 0000000..2e1844f
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ThreeStateCookieSettingsPreference.java
@@ -0,0 +1,365 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.browser_ui.site_settings;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.RadioGroup;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
+
+import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.components.browser_ui.settings.ManagedPreferencesUtils;
+import org.chromium.components.browser_ui.settings.SettingsFeatureList;
+import org.chromium.components.browser_ui.widget.RadioButtonWithDescription;
+import org.chromium.components.browser_ui.widget.RadioButtonWithDescriptionAndAuxButton;
+import org.chromium.components.browser_ui.widget.text.TextViewWithCompoundDrawables;
+import org.chromium.components.content_settings.CookieControlsMode;
+
+/**
+ * A 3-state radio group Preference used for the Third-Party Cookies subpage of SiteSettings.
+ * TODO(b/254415201): This is a copy of the FourState preference. Modify to be used for 3PC.
+ */
+public class ThreeStateCookieSettingsPreference extends Preference
+        implements RadioGroup.OnCheckedChangeListener,
+                   RadioButtonWithDescriptionAndAuxButton.OnAuxButtonClickedListener {
+    private OnCookiesDetailsRequested mListener;
+
+    public enum CookieSettingsState {
+        UNINITIALIZED,
+        ALLOW,
+        BLOCK_THIRD_PARTY_INCOGNITO,
+        BLOCK_THIRD_PARTY,
+        BLOCK
+    }
+
+    /**
+     * Used to notify cookie details subpages requests.
+     */
+    public interface OnCookiesDetailsRequested {
+        /**
+         * Notify that Cookie details are requested.
+         */
+        void onCookiesDetailsRequested(CookieSettingsState cookieSettingsState);
+    }
+
+    /**
+     * Signals used to determine the view and button states.
+     */
+    public static class Params {
+        // Whether the PrivacySandboxFirstPartySetsUI feature is enabled.
+        public boolean isPrivacySandboxFirstPartySetsUIEnabled;
+
+        // Whether the cookies content setting is enabled.
+        public boolean allowCookies;
+        // An enum indicating when to block third-party cookies.
+        public @CookieControlsMode int cookieControlsMode;
+
+        // Whether the incognito mode is enabled.
+        public boolean isIncognitoModeEnabled;
+
+        // Whether the cookies content setting is enforced.
+        public boolean cookiesContentSettingEnforced;
+        // Whether third-party blocking is enforced.
+        public boolean cookieControlsModeEnforced;
+        // Whether First Party Sets are enabled.
+        public boolean isFirstPartySetsDataAccessEnabled;
+    }
+
+    // Keeps the params that are applied to the UI if the params are set before the UI is ready.
+    private Params mInitializationParams;
+
+    // UI Elements.
+    private RadioButtonWithDescription mAllowButton;
+    private RadioButtonWithDescription mBlockThirdPartyIncognitoButton;
+    private RadioButtonWithDescription mBlockThirdPartyButton;
+    private RadioButtonWithDescription mBlockButton;
+    private RadioGroup mRadioGroup;
+    private TextViewWithCompoundDrawables mManagedView;
+
+    // Sometimes UI is initialized before the initializationParams are set. We keep this viewHolder
+    // to properly adjust UI once initializationParams are set. See crbug.com/1371236.
+    // TODO(tommasin) Remove this holder once the FirstPartySets UI will be enabled by default.
+    private PreferenceViewHolder mViewHolder;
+
+    public ThreeStateCookieSettingsPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        // Sets the layout resource that will be inflated for the view.
+        setLayoutResource(R.layout.four_state_cookie_settings_preference);
+
+        // Make unselectable, otherwise FourStateCookieSettingsPreference is treated as one
+        // selectable Preference, instead of four selectable radio buttons.
+        setSelectable(false);
+    }
+
+    /**
+     * Sets the cookie settings state and updates the radio buttons.
+     */
+    public void setState(Params state) {
+        if (mRadioGroup != null) {
+            setRadioButtonsVisibility(state);
+            configureRadioButtons(state);
+        } else {
+            mInitializationParams = state;
+        }
+    }
+
+    /**
+     * @return The state that is currently selected.
+     */
+    public CookieSettingsState getState() {
+        if (mRadioGroup == null && mInitializationParams == null) {
+            return CookieSettingsState.UNINITIALIZED;
+        }
+
+        // Calculate the state from mInitializationParams if the UI is not initialized yet.
+        if (mInitializationParams != null) {
+            return getActiveState(mInitializationParams);
+        }
+
+        if (mAllowButton.isChecked()) {
+            return CookieSettingsState.ALLOW;
+        } else if (mBlockThirdPartyIncognitoButton.isChecked()) {
+            return CookieSettingsState.BLOCK_THIRD_PARTY_INCOGNITO;
+        } else if (mBlockThirdPartyButton.isChecked()) {
+            return CookieSettingsState.BLOCK_THIRD_PARTY;
+        } else {
+            assert mBlockButton.isChecked();
+            return CookieSettingsState.BLOCK;
+        }
+    }
+
+    @Override
+    public void onCheckedChanged(RadioGroup group, int checkedId) {
+        callChangeListener(getState());
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+
+        mViewHolder = holder;
+        mAllowButton = (RadioButtonWithDescription) holder.findViewById(R.id.allow);
+        mBlockButton = (RadioButtonWithDescription) holder.findViewById(R.id.block);
+        mRadioGroup = (RadioGroup) holder.findViewById(R.id.radio_button_layout);
+        mRadioGroup.setOnCheckedChangeListener(this);
+
+        if (SettingsFeatureList.isEnabled(
+                    SettingsFeatureList.HIGHLIGHT_MANAGED_PREF_DISCLAIMER_ANDROID)) {
+            mManagedView = (TextViewWithCompoundDrawables) holder.findViewById(
+                    R.id.managed_disclaimer_text);
+        } else {
+            mManagedView =
+                    (TextViewWithCompoundDrawables) holder.findViewById(R.id.managed_view_legacy);
+            Drawable[] drawables = mManagedView.getCompoundDrawablesRelative();
+            Drawable managedIcon = ApiCompatibilityUtils.getDrawable(
+                    getResources(), ManagedPreferencesUtils.getManagedByEnterpriseIconId());
+            mManagedView.setCompoundDrawablesRelativeWithIntrinsicBounds(
+                    managedIcon, drawables[1], drawables[2], drawables[3]);
+        }
+
+        if (mInitializationParams != null) {
+            setRadioButtonsVisibility(mInitializationParams);
+            configureRadioButtons(mInitializationParams);
+        }
+    }
+
+    private Resources getResources() {
+        return getContext().getResources();
+    }
+
+    private void setRadioButtonsVisibility(Params params) {
+        if (params.isPrivacySandboxFirstPartySetsUIEnabled) {
+            mViewHolder.findViewById(R.id.block_third_party_incognito).setVisibility(View.GONE);
+            mViewHolder.findViewById(R.id.block_third_party).setVisibility(View.GONE);
+
+            // TODO(crbug.com/1349370): Change the buttons class into a
+            // RadioButtonWithDescriptionAndAuxButton and remove the following casts when the
+            // PrivacySandboxFirstPartySetsUI feature is launched
+            var blockTPIncognitoBtnWithDescAndAux =
+                    (RadioButtonWithDescriptionAndAuxButton) mViewHolder.findViewById(
+                            R.id.block_third_party_incognito_with_aux);
+            var blockTPButtonWithDescAndAux =
+                    (RadioButtonWithDescriptionAndAuxButton) mViewHolder.findViewById(
+                            R.id.block_third_party_with_aux);
+
+            String blockTPIncognitoCtxDescription = getResources().getString(
+                    R.string.website_settings_category_cookie_block_third_party_incognito_title);
+            blockTPIncognitoBtnWithDescAndAux.setAuxButtonContentDescription(
+                    getResources().getString(
+                            R.string.accessibility_expand_button_with_target_description,
+                            blockTPIncognitoCtxDescription));
+            blockTPIncognitoBtnWithDescAndAux.setVisibility(View.VISIBLE);
+
+            String blockTPCtxDescription = getResources().getString(
+                    R.string.website_settings_category_cookie_block_third_party_title);
+            blockTPButtonWithDescAndAux.setAuxButtonContentDescription(getResources().getString(
+                    R.string.accessibility_expand_button_with_target_description,
+                    blockTPCtxDescription));
+            blockTPButtonWithDescAndAux.setVisibility(View.VISIBLE);
+
+            blockTPIncognitoBtnWithDescAndAux.setAuxButtonClickedListener(this);
+            blockTPButtonWithDescAndAux.setAuxButtonClickedListener(this);
+            mBlockThirdPartyIncognitoButton = blockTPIncognitoBtnWithDescAndAux;
+            mBlockThirdPartyButton = blockTPButtonWithDescAndAux;
+            setBlockThirdPartyCookieDescription(params);
+        } else {
+            mBlockThirdPartyIncognitoButton = (RadioButtonWithDescription) mViewHolder.findViewById(
+                    R.id.block_third_party_incognito);
+            mBlockThirdPartyButton =
+                    (RadioButtonWithDescription) mViewHolder.findViewById(R.id.block_third_party);
+        }
+    }
+
+    private void setBlockThirdPartyCookieDescription(Params params) {
+        String defaultDescription = getResources().getString(
+                R.string.website_settings_category_cookie_block_third_party_addition);
+        if (params.isFirstPartySetsDataAccessEnabled) {
+            String fpsAdditionalDescription = getResources().getString(
+                    R.string.website_settings_category_cookie_block_third_party_fps_addition);
+            String description = getResources().getString(R.string.concat_two_strings_with_periods,
+                    defaultDescription, fpsAdditionalDescription);
+            mBlockThirdPartyButton.setDescriptionText(description);
+        } else {
+            mBlockThirdPartyButton.setDescriptionText(defaultDescription);
+        }
+    }
+
+    public void setCookiesDetailsRequestedListener(OnCookiesDetailsRequested listener) {
+        mListener = listener;
+    }
+
+    @Override
+    public void onAuxButtonClicked(int clickedButtonId) {
+        if (clickedButtonId == mBlockThirdPartyIncognitoButton.getId()) {
+            mListener.onCookiesDetailsRequested(CookieSettingsState.BLOCK_THIRD_PARTY_INCOGNITO);
+        } else if (clickedButtonId == mBlockThirdPartyButton.getId()) {
+            mListener.onCookiesDetailsRequested(CookieSettingsState.BLOCK_THIRD_PARTY);
+        } else {
+            assert false : "Should not be reached.";
+        }
+    }
+
+    private CookieSettingsState getActiveState(Params params) {
+        // These conditions only check the preference combinations that deterministically decide
+        // your cookie settings state. In the future we would refactor the backend preferences to
+        // reflect the only possible states you can be in
+        // (Allow/BlockThirdPartyIncognito/BlockThirdParty/Block), instead of using this
+        // combination of multiple signals.
+        if (!params.allowCookies) {
+            return CookieSettingsState.BLOCK;
+        } else if (params.cookieControlsMode == CookieControlsMode.BLOCK_THIRD_PARTY) {
+            return CookieSettingsState.BLOCK_THIRD_PARTY;
+        } else if (params.cookieControlsMode == CookieControlsMode.INCOGNITO_ONLY
+                && params.isIncognitoModeEnabled) {
+            return CookieSettingsState.BLOCK_THIRD_PARTY_INCOGNITO;
+        } else {
+            return CookieSettingsState.ALLOW;
+        }
+    }
+
+    private void configureRadioButtons(Params params) {
+        assert (mRadioGroup != null);
+        mAllowButton.setEnabled(true);
+        mBlockThirdPartyIncognitoButton.setEnabled(true);
+        mBlockThirdPartyButton.setEnabled(true);
+        mBlockButton.setEnabled(true);
+        for (RadioButtonWithDescription button : getEnforcedButtons(params)) {
+            button.setEnabled(false);
+        }
+        mManagedView.setVisibility(
+                (params.cookiesContentSettingEnforced || params.cookieControlsModeEnforced)
+                        ? View.VISIBLE
+                        : View.GONE);
+
+        RadioButtonWithDescription button = getButton(getActiveState(params));
+        // Always want to enable the selected option.
+        button.setEnabled(true);
+        button.setChecked(true);
+
+        mInitializationParams = null;
+    }
+
+    /**
+     * A helper function to return a button array from a variable number of arguments.
+     */
+    private RadioButtonWithDescription[] buttons(RadioButtonWithDescription... args) {
+        return args;
+    }
+
+    @VisibleForTesting
+    public RadioButtonWithDescription getButton(CookieSettingsState state) {
+        switch (state) {
+            case ALLOW:
+                return mAllowButton;
+            case BLOCK_THIRD_PARTY_INCOGNITO:
+                return mBlockThirdPartyIncognitoButton;
+            case BLOCK_THIRD_PARTY:
+                return mBlockThirdPartyButton;
+            case BLOCK:
+                return mBlockButton;
+            case UNINITIALIZED:
+                assert false;
+                return null;
+        }
+        assert false;
+        return null;
+    }
+
+    /**
+     * @return An array of radio buttons that have to be disabled as they can't be selected due to
+     *         policy restrictions.
+     */
+    private RadioButtonWithDescription[] getEnforcedButtons(Params params) {
+        if (!params.cookiesContentSettingEnforced && !params.cookieControlsModeEnforced) {
+            // Nothing is enforced.
+            if (!params.isIncognitoModeEnabled) {
+                return buttons(mBlockThirdPartyIncognitoButton);
+            } else {
+                return buttons();
+            }
+        }
+        if (params.cookiesContentSettingEnforced && params.cookieControlsModeEnforced) {
+            return buttons(mAllowButton, mBlockThirdPartyIncognitoButton, mBlockThirdPartyButton,
+                    mBlockButton);
+        }
+        if (params.cookiesContentSettingEnforced) {
+            if (params.allowCookies) {
+                if (!params.isIncognitoModeEnabled) {
+                    return buttons(mBlockButton, mBlockThirdPartyIncognitoButton);
+                } else {
+                    return buttons(mBlockButton);
+                }
+            } else {
+                return buttons(mAllowButton, mBlockThirdPartyIncognitoButton,
+                        mBlockThirdPartyButton, mBlockButton);
+            }
+        }
+        // cookieControlsModeEnforced must be true.
+        if (params.cookieControlsMode == CookieControlsMode.BLOCK_THIRD_PARTY) {
+            return buttons(mAllowButton, mBlockThirdPartyIncognitoButton);
+        } else {
+            return buttons(mBlockThirdPartyIncognitoButton, mBlockThirdPartyButton);
+        }
+    }
+
+    @VisibleForTesting
+    public boolean isButtonEnabledForTesting(CookieSettingsState state) {
+        assert getButton(state) != null;
+        return getButton(state).isEnabled();
+    }
+
+    @VisibleForTesting
+    public boolean isButtonCheckedForTesting(CookieSettingsState state) {
+        assert getButton(state) != null;
+        return getButton(state).isChecked();
+    }
+}
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
index 4b0e743a..6701bba 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">ይህ ጣቢያ ረባሽ ወይም አሳሳች ማስታወቂያዎችን ያሳያል</translation>
 <translation id="8394832520002899662">ወደ ጣቢያው ለመመለስ መታ ያድርጉ</translation>
 <translation id="8409345997656833551">አንድ ጽሁፍ ቀላል በሆነ እይታ ውስጥ መታየት ሲችል ማሳወቂያ ያግኙ</translation>
+<translation id="8423565414844018592">የጽሁፍ ልኬት ወደ <ph name="TEXT_SCALING" /> ተቀናብሯል</translation>
 <translation id="8428213095426709021">ቅንብሮች</translation>
 <translation id="8441146129660941386">ወደኋላ ፈልግ</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> የእርስዎን መገኛ አካባቢ እንዲደርስበት ለማድረግ፣ በተጨማሪ በ <ph name="BEGIN_LINK" />Android ቅንብሮች<ph name="END_LINK" /> ውስጥ መገኛ አካባቢን ያብሩ።</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
index d1562cb..3195e8e 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Bu sayt inadçı və ya aldadıcı reklamlar göstərir</translation>
 <translation id="8394832520002899662">Sayta qayıtmaq üçün toxunun</translation>
 <translation id="8409345997656833551">Məqalə sadələşdirilmiş görünüşdə göstərilə bildikdə bildiriş alın</translation>
+<translation id="8423565414844018592">Mətn miqyası <ph name="TEXT_SCALING" /> olaraq ayarlanıb</translation>
 <translation id="8428213095426709021">Ayarlar</translation>
 <translation id="8441146129660941386">Geri axtarı</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> tətbiqinə məkanınıza giriş icazəsi vermək üçün <ph name="BEGIN_LINK" />Android Ayarlarında<ph name="END_LINK" /> məkanı da aktiv edin.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
index d7d23b4..c69e334 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">এই সাইট ব্যাঘাত সৃষ্টিকারী বা বিভ্রান্তিকর বিজ্ঞাপন দেখায়</translation>
 <translation id="8394832520002899662">সাইটে ফিরে যেতে ট্যাপ করুন</translation>
 <translation id="8409345997656833551">কোনও নিবন্ধে সিমপ্লিফায়েড ভিউ কাজ করলে সেই বিষয়ে বিজ্ঞপ্তি পান</translation>
+<translation id="8423565414844018592"><ph name="TEXT_SCALING" />-এ টেক্সট স্কেলিং সেট করা আছে</translation>
 <translation id="8428213095426709021">সেটিংস</translation>
 <translation id="8441146129660941386">পেছনে যান</translation>
 <translation id="8444433999583714703">তাছাড়া, যাতে <ph name="APP_NAME" /> আপনার লোকেশন অ্যাক্সেস করতে পারে, তার জন্য <ph name="BEGIN_LINK" />Android সেটিংসে<ph name="END_LINK" /> গিয়েও লোকেশন চালু করে দিন।</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
index 42d8c69..11f2ac40 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Ova web lokacija prikazuje ometajuće ili obmanjujuće oglase</translation>
 <translation id="8394832520002899662">Dodirnite da se vratite na web lokaciju</translation>
 <translation id="8409345997656833551">Primajte obavještenja kada se članak može prikazati u pojednostavljenom prikazu</translation>
+<translation id="8423565414844018592">Skaliranje teksta je postavljeno na <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Postavke</translation>
 <translation id="8441146129660941386">Pomicanje unazad</translation>
 <translation id="8444433999583714703">Da dozvolite da <ph name="APP_NAME" /> pristupa vašoj lokaciji, također uključite lokaciju u <ph name="BEGIN_LINK" />Postavkama Androida<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
index 9c7d66f..5219b8b5 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Diese Website zeigt aufdringliche oder irreführende Werbung an</translation>
 <translation id="8394832520002899662">Tippen, um zur Website zurückzukehren</translation>
 <translation id="8409345997656833551">Benachrichtigen, wenn ein Artikel in der vereinfachten Ansicht angezeigt werden kann</translation>
+<translation id="8423565414844018592">Textskalierung auf <ph name="TEXT_SCALING" /> festgelegt</translation>
 <translation id="8428213095426709021">Einstellungen</translation>
 <translation id="8441146129660941386">Zurück navigieren</translation>
 <translation id="8444433999583714703">Um <ph name="APP_NAME" /> Zugriff auf deinen Standort zu gewähren, musst du die Standortberechtigung auch in den <ph name="BEGIN_LINK" />Android-Einstellungen<ph name="END_LINK" /> aktivieren.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
index c65ea4d..9c5facc 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
@@ -233,6 +233,7 @@
 <translation id="5922853908706496913">Sharing your screen</translation>
 <translation id="5922967540311291836">Block third-party cookies:</translation>
 <translation id="5939518447894949180">Reset</translation>
+<translation id="5968921426641056619">Enter web address</translation>
 <translation id="5975083100439434680">Zoom out</translation>
 <translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation>
 <translation id="6015775454662021376">Control this site's access to your device</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
index 76e0ac53..18b5907 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Este sitio muestra anuncios intrusivos o engañosos</translation>
 <translation id="8394832520002899662">Presiona para volver al sitio</translation>
 <translation id="8409345997656833551">Notificarme cada vez que se pueda mostrar la vista simplificada de un artículo</translation>
+<translation id="8423565414844018592">Se estableció el escalamiento de texto al <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8441146129660941386">Buscar más atrás</translation>
 <translation id="8444433999583714703">Para permitir que <ph name="APP_NAME" /> acceda a tu ubicación, actívala también en la <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
index dffec3b..2c1bcfe 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">El sitio web muestra anuncios invasivos o engañosos</translation>
 <translation id="8394832520002899662">Toca para volver al sitio web</translation>
 <translation id="8409345997656833551">Recibir una notificación cuando un artículo pueda mostrarse en vista simplificada</translation>
+<translation id="8423565414844018592">Ajuste de texto establecido en <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8441146129660941386">Buscar hacia atrás</translation>
 <translation id="8444433999583714703">Para que <ph name="APP_NAME" /> tenga acceso a tu ubicación, actívala también en los <ph name="BEGIN_LINK" />ajustes de Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
index c7604c1d..174b005 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Sait kuvab sekkuvaid või eksitavaid reklaame.</translation>
 <translation id="8394832520002899662">Puudutage saidile naasmiseks</translation>
 <translation id="8409345997656833551">Saate märguande, kui artiklit saab kuvada lihtsustatud vaates</translation>
+<translation id="8423565414844018592">Teksti suuruseks on määratud <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Seaded</translation>
 <translation id="8441146129660941386">Keri tagasi</translation>
 <translation id="8444433999583714703">Selleks et anda rakendusele <ph name="APP_NAME" /> juurdepääs teie asukohale, lülitage funktsioon Asukoht sisse ka <ph name="BEGIN_LINK" />Androidi seadetes<ph name="END_LINK" />.</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 97727f31..81a0287d 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">این سایتْ آگهی‌های مزاحم یا گمراه‌کننده نشان می‌دهد</translation>
 <translation id="8394832520002899662">برای برگشتن به سایت ضربه بزنید</translation>
 <translation id="8409345997656833551">هرزمان که بتوان مقاله را در نمای ساده‌شده نشان داد، اعلان دریافت می‌کنید</translation>
+<translation id="8423565414844018592">تنظیم مقیاس‌گذاری نوشتار روی <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">تنظیمات</translation>
 <translation id="8441146129660941386">جستجو به عقب</translation>
 <translation id="8444433999583714703">‏برای اینکه به <ph name="APP_NAME" /> اجازه دهید به مکانتان دسترسی پیدا کند، مکان را در <ph name="BEGIN_LINK" />تنظیمات Android<ph name="END_LINK" /> نیز روشن کنید.</translation>
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 6ce25cb..f22e063 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Ce site diffuse des annonces intrusives ou trompeuses</translation>
 <translation id="8394832520002899662">Touchez pour revenir au site</translation>
 <translation id="8409345997656833551">Recevez une notification lorsqu'un élément prend en charge l'affichage simplifié</translation>
+<translation id="8423565414844018592">Mise à l'échelle du texte définie sur <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Paramètres</translation>
 <translation id="8441146129660941386">Rechercher vers l'arrière</translation>
 <translation id="8444433999583714703">Pour autoriser <ph name="APP_NAME" /> à accéder à votre position, activez aussi la localisation dans les <ph name="BEGIN_LINK" />paramètres d'Android<ph name="END_LINK" />.</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 33defeea..bbe03c3c 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">इस साइट में तंग करने वाले या गुमराह करने वाले विज्ञापन दिखाई देते हैं</translation>
 <translation id="8394832520002899662">साइट पर वापस जाने के लिए टैप करें</translation>
 <translation id="8409345997656833551">किसी लेख के लिए, सरल बनाए गए व्यू की सुविधा उपलब्ध होने पर सूचना पाएं</translation>
+<translation id="8423565414844018592">टेक्स्ट स्केलिंग को <ph name="TEXT_SCALING" /> पर सेट किया गया</translation>
 <translation id="8428213095426709021">सेटिंग</translation>
 <translation id="8441146129660941386">पीछे जाएं</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> को अपनी जगह की जानकारी का ऐक्सेस देने के लिए, <ph name="BEGIN_LINK" />Android की सेटिंग<ph name="END_LINK" /> में भी जाकर भी, जगह की जानकारी चालू करें.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
index cb6ee97..49b9e9a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Ez a webhely tolakodó vagy félrevezető hirdetéseket jelenít meg</translation>
 <translation id="8394832520002899662">Koppintson a webhelyre való visszatéréshez</translation>
 <translation id="8409345997656833551">Értesítés megjelenítése, ha az adott cikk megjeleníthető egyszerűsített négyzetben</translation>
+<translation id="8423565414844018592">Szöveg mérete beállítva a következőre: <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Beállítások</translation>
 <translation id="8441146129660941386">Ugrás visszafelé</translation>
 <translation id="8444433999583714703">Ahhoz, hogy a(z) <ph name="APP_NAME" /> hozzáférhessen a helyadatokhoz, a helyadatokat az <ph name="BEGIN_LINK" />Android-beállítások<ph name="END_LINK" /> között is be kell kapcsolni.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
index 190239f..6b9a8cb4 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Situs ini menampilkan iklan yang mengganggu atau menyesatkan</translation>
 <translation id="8394832520002899662">Ketuk untuk kembali ke situs</translation>
 <translation id="8409345997656833551">Dapatkan notifikasi saat artikel bisa ditampilkan dalam tampilan sederhana</translation>
+<translation id="8423565414844018592">Penskalaan teks disetel ke <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Setelan</translation>
 <translation id="8441146129660941386">Cari mundur</translation>
 <translation id="8444433999583714703">Untuk mengizinkan <ph name="APP_NAME" /> mengakses lokasi Anda, aktifkan juga lokasi di <ph name="BEGIN_LINK" />Setelan Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
index 6872008..5248278 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">このサイトでは煩わしい広告や誤解を招く広告が表示されます</translation>
 <translation id="8394832520002899662">タップしてサイトに戻る</translation>
 <translation id="8409345997656833551">記事を簡易表示できる場合に通知する</translation>
+<translation id="8423565414844018592">テキストの表示倍率を <ph name="TEXT_SCALING" /> に設定しました</translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8441146129660941386">後方にシーク再生</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> に現在地へのアクセスを許可するには、<ph name="BEGIN_LINK" />Android の設定<ph name="END_LINK" />でも位置情報をオンにしてください。</translation>
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 d94d246..f1792df 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">គេហទំព័រ​នេះបង្ហាញ​ការផ្សាយពាណិជ្ជកម្ម​ដែលនាំឱ្យយល់ច្រឡំ ឬរំខាន</translation>
 <translation id="8394832520002899662">ចុចដើម្បីត្រឡប់ទៅគេហទំព័រវិញ</translation>
 <translation id="8409345997656833551">ទទួលបានការជូនដំណឹង នៅពេលដែលអាចបង្ហាញអត្ថបទណាមួយក្នុងទិដ្ឋភាពសាមញ្ញ</translation>
+<translation id="8423565414844018592">បានកំណត់មាត្រដ្ឋានអក្សរ​ទៅជា <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">ការកំណត់</translation>
 <translation id="8441146129660941386">ស្វែងរក​ថយក្រោយ</translation>
 <translation id="8444433999583714703">ដើម្បីអនុញ្ញាតឱ្យ <ph name="APP_NAME" /> ចូលប្រើទីតាំង​របស់អ្នក អ្នកក៏ត្រូវបើក​ទីតាំង​នៅក្នុង​<ph name="BEGIN_LINK" />ការកំណត់ Android<ph name="END_LINK" /> ផងដែរ។</translation>
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 96c15ac..f12e37b 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">ಅತಿಕ್ರಮಣಕಾರಿಯಾಗಿರುವ ಅಥವಾ ತಪ್ಪುದಾರಿಗೆಳೆಯುವ ಜಾಹೀರಾತುಗಳನ್ನು ಈ ಸೈಟ್ ತೋರಿಸುತ್ತದೆ</translation>
 <translation id="8394832520002899662">ಸೈಟ್‌ಗೆ ಮರಳಲು ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="8409345997656833551">ಲೇಖನವನ್ನು ಸರಳೀಕೃತ ವೀಕ್ಷಣೆಯಲ್ಲಿ ತೋರಿಸಬಹುದು ಎಂದಾದಾಗ ಸೂಚನೆ ಪಡೆಯಿರಿ</translation>
+<translation id="8423565414844018592">ಪಠ್ಯ ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು <ph name="TEXT_SCALING" /> ಗೆ ಸೆಟ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8441146129660941386">ಹಿಂದಕ್ಕೆ ಸೀಕ್ ಮಾಡಿ</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸುವುದಕ್ಕೆ ಅನುಮತಿಸಲು, <ph name="BEGIN_LINK" />Android ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="END_LINK" /> ಸ್ಥಳವನ್ನು ಸಹ ಆನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
index e1893a9..58e8418 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">이 사이트에서는 방해가 되거나 사용자를 현혹하는 광고를 표시합니다.</translation>
 <translation id="8394832520002899662">탭하여 사이트로 돌아가기</translation>
 <translation id="8409345997656833551">기사를 간단히 보기로 표시할 수 있을 때 알림 받기</translation>
+<translation id="8423565414844018592">텍스트 크기 조정이 <ph name="TEXT_SCALING" />로 설정됩니다</translation>
 <translation id="8428213095426709021">설정</translation>
 <translation id="8441146129660941386">뒤로 탐색</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" />에서 위치 정보에 액세스하도록 허용하려면 <ph name="BEGIN_LINK" />Android 설정<ph name="END_LINK" />에서도 위치를 사용 설정하세요.</translation>
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 5f87b14..82f8297 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Šioje svetainėje rodomi nepageidaujami arba klaidinantys skelbimai</translation>
 <translation id="8394832520002899662">Norėdami grįžti į svetainę, palieskite</translation>
 <translation id="8409345997656833551">Gaukite pranešimą, kai galima rodyti supaprastinto rodinio straipsnį</translation>
+<translation id="8423565414844018592">Teksto mastelio keitimas nustatytas į <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Nustatymai</translation>
 <translation id="8441146129660941386">Ieškoti einant atgal</translation>
 <translation id="8444433999583714703">Norėdami leisti „<ph name="APP_NAME" />“ pasiekti jūsų vietovę, taip pat įjunkite ją <ph name="BEGIN_LINK" />„Android“ nustatymuose<ph name="END_LINK" />.</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 d84e3ef5..1c58d51c 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">ഈ സൈറ്റ്, അനാവശ്യമോ തെറ്റിദ്ധരിപ്പിക്കുന്നതോ ആയ പരസ്യങ്ങള്‍ കാണിക്കുന്നു</translation>
 <translation id="8394832520002899662">സൈറ്റിലേക്ക് മടങ്ങാൻ ടാപ്പ് ചെയ്യുക</translation>
 <translation id="8409345997656833551">ലളിതമാക്കിയ കാഴ്ചയിൽ ഒരു ലേഖനം കാണിക്കാൻ കഴിയുമ്പോൾ അറിയിപ്പ് നേടുക</translation>
+<translation id="8423565414844018592">ടെക്‌സ്‌റ്റ് സ്‌കെയിൽ ചെയ്യൽ <ph name="TEXT_SCALING" /> എന്നതിലേക്ക് സജ്ജീകരിച്ചു</translation>
 <translation id="8428213095426709021">ക്രമീകരണം</translation>
 <translation id="8441146129660941386">പുറകിലേക്ക് സീക്കുചെയ്യുക</translation>
 <translation id="8444433999583714703">നിങ്ങളുടെ ലൊക്കേഷൻ ആക്‌സസ് ചെയ്യാൻ <ph name="APP_NAME" /> ആപ്പിനെ അനുവദിക്കുന്നതിന്, <ph name="BEGIN_LINK" />Android ക്രമീകരണത്തിലും<ph name="END_LINK" /> ലൊക്കേഷൻ ഓണാക്കുക.</translation>
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 a69725b3..fc1e29e7 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">ဤဝဘ်ဆိုက်က စိတ်အနှောင့်အယှက်ဖြစ်စေသော (သို့) အထင်အမြင်မှားစေသော ကြော်ငြာများကို ပြသည်</translation>
 <translation id="8394832520002899662">ဝဘ်ဆိုက်သို့ ပြန်သွားရန် တို့ပါ</translation>
 <translation id="8409345997656833551">အကြောင်းအရာကို ရိုးရှင်းသည့်မြင်ကွင်းဖြင့် ပြနိုင်သောအခါ အကြောင်းကြားချက်ရယူနိုင်သည်</translation>
+<translation id="8423565414844018592">စာသားချိန်ညှိမှုကို <ph name="TEXT_SCALING" /> အဖြစ် သတ်မှတ်ထားသည်</translation>
 <translation id="8428213095426709021">ဆက်တင်များ</translation>
 <translation id="8441146129660941386">နောက်ပြန်ရစ်ရန်</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> က သင့်တည်နေရာကို သုံးနိုင်ရန် <ph name="BEGIN_LINK" />Android ဆက်တင်များ<ph name="END_LINK" /> တွင်လည်း တည်နေရာကို ဖွင့်ပါ။</translation>
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 8b55656..d8855bb 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">यो साइटले हस्तक्षेपकारी वा भ्रामक विज्ञापनहरू देखाउँछ</translation>
 <translation id="8394832520002899662">साइटमा फर्कन ट्याप गर्नुहोस्</translation>
 <translation id="8409345997656833551">लेख सरलीकृत भ्यूमा देखाउन मिल्ने भएपछि सूचना पठाइयोस्</translation>
+<translation id="8423565414844018592">टेक्स्ट स्केलिङ <ph name="TEXT_SCALING" /> सेट गरिएको छ</translation>
 <translation id="8428213095426709021">सेटिङहरू</translation>
 <translation id="8441146129660941386">पछाडि खोज्नुहोस्</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> लाई आफ्नो स्थान प्रयोग गर्न दिन <ph name="BEGIN_LINK" />Android का सेटिङ<ph name="END_LINK" />मा गई लोकेसन सर्भिस पनि अन गर्नुहोस्।</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
index a45dea9..53523723 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Dette nettstedet viser forstyrrende eller villedende annonser</translation>
 <translation id="8394832520002899662">Trykk for å gå tilbake til nettstedet</translation>
 <translation id="8409345997656833551">Bli varslet når artikler kan vises i forenklet visning</translation>
+<translation id="8423565414844018592">Tekstskaleringen er satt til <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Innstillinger</translation>
 <translation id="8441146129660941386">Spol bakover</translation>
 <translation id="8444433999583714703">For å gi <ph name="APP_NAME" /> tilgang til posisjonen din må du også slå på posisjon i <ph name="BEGIN_LINK" />Android-innstillingene<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
index 5186b1d..31ce9c9 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">ਇਹ ਸਾਈਟ ਦਖਲਅੰਦਾਜ਼ੀ ਜਾਂ ਗੁਮਰਾਹ ਕਰਨ ਵਾਲੇ ਵਿਗਿਆਪਨ ਦਿਖਾਉਂਦੀ ਹੈ</translation>
 <translation id="8394832520002899662">ਸਾਈਟ 'ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਟੈਪ ਕਰੋ</translation>
 <translation id="8409345997656833551">ਕਿਸੇ ਲੇਖ ਲਈ ਸਰਲੀਕਿਰਤ ਦ੍ਰਿਸ਼ ਦੀ ਸੁਵਿਧਾ ਉਪਲਬਧ ਹੋਣ 'ਤੇ ਸੂਚਨਾ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
+<translation id="8423565414844018592">ਲਿਖਤ ਸਕੇਲਿੰਗ ਨੂੰ <ph name="TEXT_SCALING" /> 'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="8428213095426709021">ਸੈਟਿੰਗਾਂ</translation>
 <translation id="8441146129660941386">ਪਿੱਛੇ ਵੱਲ ਨੂੰ ਲੈ ਜਾਓ</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> ਨੂੰ ਆਪਣੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣ ਲਈ, <ph name="BEGIN_LINK" />Android ਸੈਟਿੰਗਾਂ<ph name="END_LINK" /> ਵਿੱਚ ਟਿਕਾਣਾ ਵੀ ਚਾਲੂ ਕਰੋ।</translation>
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 9afb56d0..88e03ece 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Neste site, há exibição de anúncios invasivos ou enganosos</translation>
 <translation id="8394832520002899662">Toque para voltar ao site</translation>
 <translation id="8409345997656833551">Receber uma notificação quando um artigo puder ser mostrado na visualização simplificada</translation>
+<translation id="8423565414844018592">Tamanho do texto definido como <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Configurações</translation>
 <translation id="8441146129660941386">Voltar</translation>
 <translation id="8444433999583714703">Para permitir que o app <ph name="APP_NAME" /> acesse seu local, ative-o também nas <ph name="BEGIN_LINK" />configurações do Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
index d3a845c..890c3e6 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Este site apresenta anúncios intrusivos ou enganadores.</translation>
 <translation id="8394832520002899662">Toque para regressar ao site.</translation>
 <translation id="8409345997656833551">Receba uma notificação quando um artigo pode ser apresentado na vista simplificada</translation>
+<translation id="8423565414844018592">Escalabilidade do texto definida para <ph name="TEXT_SCALING" />.</translation>
 <translation id="8428213095426709021">Definições</translation>
 <translation id="8441146129660941386">Procurar para trás</translation>
 <translation id="8444433999583714703">Para permitir que a app <ph name="APP_NAME" /> aceda à sua localização, ative também a localização nas <ph name="BEGIN_LINK" />Definições do Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
index 55cfed8..f40cd3e 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Acest site afișează anunțuri deranjante sau înșelătoare</translation>
 <translation id="8394832520002899662">Atinge pentru a reveni la site</translation>
 <translation id="8409345997656833551">Primește notificări când un articol poate fi afișat într-o vizualizare simplificată</translation>
+<translation id="8423565414844018592">Scalarea textului a fost setată la <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Setări</translation>
 <translation id="8441146129660941386">Derulează înapoi</translation>
 <translation id="8444433999583714703">Pentru a permite aplicației <ph name="APP_NAME" /> să acceseze locația, activează locația și în <ph name="BEGIN_LINK" />Setările Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
index 77913d6a..9cd92aa 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Этот сайт показывает навязчивую или вводящую в заблуждение рекламу</translation>
 <translation id="8394832520002899662">Нажмите, чтобы вернуться на сайт.</translation>
 <translation id="8409345997656833551">Показывать уведомление, если для статьи доступен упрощенный просмотр</translation>
+<translation id="8423565414844018592">Задан масштаб текста <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Настройки</translation>
 <translation id="8441146129660941386">Перемотать назад</translation>
 <translation id="8444433999583714703">Чтобы у приложения "<ph name="APP_NAME" />" был доступ к данным о местоположении, включите геолокацию в <ph name="BEGIN_LINK" />настройках Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
index 5dfb01d..06e32890 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">මෙම වෙබ් අඩවිය ආක්‍රමණික හෝ නොමඟ යවන දැන්වීම් පෙන්වයි</translation>
 <translation id="8394832520002899662">වෙබ් අඩවියට ආපසු යාමට තට්ටු කරන්න</translation>
 <translation id="8409345997656833551">ලිපියක් සරල කළ දසුනින් පෙන්විය හැකි විට දැනුම් දීම් ලබා ගන්න</translation>
+<translation id="8423565414844018592">පෙළ පරිමාණය <ph name="TEXT_SCALING" /> ලෙස සකසා ඇත</translation>
 <translation id="8428213095426709021">සැකසුම්</translation>
 <translation id="8441146129660941386">පසුපසට සොයන්න</translation>
 <translation id="8444433999583714703"><ph name="APP_NAME" /> හට ඔබේ ස්ථානයට ප්‍රවේශ වීමට ඉඩ දීමට, <ph name="BEGIN_LINK" />Android සැකසීම්<ph name="END_LINK" /> තුළද ස්ථානය ක්‍රියාත්මක කරන්න.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
index ad8082a..e71a93b4 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Tento web zobrazuje obťažujúce alebo zavádzajúce reklamy</translation>
 <translation id="8394832520002899662">Klepnutím sa vrátite na web</translation>
 <translation id="8409345997656833551">Dostávajte upozornenia, keď bude článok dostupný v zjednodušenom zobrazení</translation>
+<translation id="8423565414844018592">Škálovanie textu je nastavené na <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Nastavenia</translation>
 <translation id="8441146129660941386">Pretočiť dozadu</translation>
 <translation id="8444433999583714703">Ak chcete povoliť aplikácii <ph name="APP_NAME" /> používať vašu polohu, zapnite ju aj v <ph name="BEGIN_LINK" />nastaveniach Androidu<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
index 9c2fcefc..c7e3b97c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">To spletno mesto prikazuje vsiljive ali zavajajoče oglase</translation>
 <translation id="8394832520002899662">Dotaknite se, če se želite vrniti na spletno mesto</translation>
 <translation id="8409345997656833551">Prejmite obvestilo, ko je članek lahko prikazan v poenostavljenem pogledu.</translation>
+<translation id="8423565414844018592">Prilagajanje velikosti besedila je nastavljeno na <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Nastavitve</translation>
 <translation id="8441146129660941386">Išči nazaj</translation>
 <translation id="8444433999583714703">Če želite aplikaciji <ph name="APP_NAME" /> omogočiti dostop do lokacije, lokacijo vklopite tudi v <ph name="BEGIN_LINK" />nastavitvah za Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
index 18ef1b1..ace3ff3c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Påträngande eller vilseledande annonser visas på den här webbplatsen</translation>
 <translation id="8394832520002899662">Återgå till webbplatsen genom att trycka här</translation>
 <translation id="8409345997656833551">Bli meddelad om det finns en förenklad vy av en artikel</translation>
+<translation id="8423565414844018592">Textskalning är inställd på <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Inställningar</translation>
 <translation id="8441146129660941386">Sök bakåt</translation>
 <translation id="8444433999583714703">Om du vill ge <ph name="APP_NAME" /> åtkomst till din plats måste du även aktivera plats i <ph name="BEGIN_LINK" />Android-inställningarna<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
index 64d2b68..a2ca7bf 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Tovuti hii inaonyesha matangazo yanayopotosha au yanayokatiza huduma</translation>
 <translation id="8394832520002899662">Gusa ili urudi kwenye tovuti</translation>
 <translation id="8409345997656833551">Pata arifa wakati makala inaweza kuonyeshwa katika mwonekano uliorahisishwa</translation>
+<translation id="8423565414844018592">Urekebishaji wa maandishi umewekwa kuwa <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Mipangilio</translation>
 <translation id="8441146129660941386">Peleka nyuma</translation>
 <translation id="8444433999583714703">Ili uruhusu <ph name="APP_NAME" /> ifikie data ya mahali ulipo, washa pia huduma ya mahali katika <ph name="BEGIN_LINK" />Mipangilio ya Android<ph name="END_LINK" />.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
index 2a39259..3bc699b8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">ఈ సైట్ అనుచితమైన లేదా తప్పుదారి పట్టించే ప్రకటనలను చూపుతుంది</translation>
 <translation id="8394832520002899662">సైట్‌కు తిరిగి వెళ్లడానికి ట్యాప్ చేయండి</translation>
 <translation id="8409345997656833551">సరళీకరించిన వీక్షణలో వార్తా కథనాన్ని చూపగలిగినప్పుడు నోటిఫికేషన్ పొందండి</translation>
+<translation id="8423565414844018592">టెక్స్ట్ స్కేలింగ్ <ph name="TEXT_SCALING" />కు సెట్ చేయబడింది</translation>
 <translation id="8428213095426709021">సెట్టింగ్‌లు</translation>
 <translation id="8441146129660941386">వెనుకకు జరుపు</translation>
 <translation id="8444433999583714703">మీ లొకేషన్‌ని యాక్సెస్ చేయడానికి <ph name="APP_NAME" />ని అనుమతించడానికి, <ph name="BEGIN_LINK" />Android సెట్టింగ్‌ల<ph name="END_LINK" />లో కూడా లొకేషన్‌ని ఆన్ చేయండి.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
index 436c26a..f4ea964 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
@@ -233,6 +233,7 @@
 <translation id="5922853908706496913">กำลังแชร์หน้าจอ</translation>
 <translation id="5922967540311291836">บล็อกคุกกี้ของบุคคลที่สาม:</translation>
 <translation id="5939518447894949180">รีเซ็ต</translation>
+<translation id="5968921426641056619">ป้อนที่อยู่เว็บ</translation>
 <translation id="5975083100439434680">ย่อ</translation>
 <translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation>
 <translation id="6015775454662021376">ควบคุมการเข้าถึงอุปกรณ์ของคุณของเว็บไซต์นี้</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
index b23b61c..2c0b533 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">此网站会展示侵扰性或误导性广告</translation>
 <translation id="8394832520002899662">点按即可返回到网站</translation>
 <translation id="8409345997656833551">当文章能以简化版视图显示时通知我</translation>
+<translation id="8423565414844018592">文字缩放比例目前设为 <ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">设置</translation>
 <translation id="8441146129660941386">后退</translation>
 <translation id="8444433999583714703">若要允许 <ph name="APP_NAME" /> 获取您的位置信息,您还需在 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />中开启位置信息服务。</translation>
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 847069b..12f1cb70 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
@@ -353,6 +353,7 @@
 <translation id="8380167699614421159">Leli sayithi libonisa izikhangiso ezingathandeki noma ezidukisayo</translation>
 <translation id="8394832520002899662">Thepha ukubuyela kusayithi</translation>
 <translation id="8409345997656833551">Thola isaziso uma indaba ingaboniswa ekubukeni okwenziwe lula</translation>
+<translation id="8423565414844018592">Isikali sombhalo sisethwelwe ku-<ph name="TEXT_SCALING" /></translation>
 <translation id="8428213095426709021">Izilungiselelo</translation>
 <translation id="8441146129660941386">Funela emuva</translation>
 <translation id="8444433999583714703">Ukuze uvumele i-<ph name="APP_NAME" /> ukuba ifinyelele indawo yakho, vula nendawo <ph name="BEGIN_LINK" />Kumasethingi e-Android<ph name="END_LINK" />.</translation>
diff --git a/components/browsing_data/content/BUILD.gn b/components/browsing_data/content/BUILD.gn
index 08b5e35..a1446feb 100644
--- a/components/browsing_data/content/BUILD.gn
+++ b/components/browsing_data/content/BUILD.gn
@@ -41,9 +41,9 @@
     "//components/origin_trials:browser",
     "//components/origin_trials:common",
     "//components/prefs",
+    "//components/services/storage",
     "//components/services/storage/privileged/mojom",
-    "//components/services/storage/public/cpp",
-    "//components/services/storage/public/mojom",
+    "//components/services/storage/shared_storage/public/mojom",
     "//components/site_isolation",
     "//content/public/browser",
     "//net",
@@ -104,7 +104,8 @@
   deps = [
     ":content",
     "//base",
-    "//components/services/storage/public/cpp",
+    "//components/services/storage",
+    "//components/services/storage/shared_storage/public/mojom",
     "//content/public/browser",
     "//testing/gmock",
     "//testing/gtest",
diff --git a/components/browsing_data/content/DEPS b/components/browsing_data/content/DEPS
index 8261d41..56beee64 100644
--- a/components/browsing_data/content/DEPS
+++ b/components/browsing_data/content/DEPS
@@ -7,6 +7,7 @@
   "+components/no_state_prefetch/browser",
   "+components/services/storage/privileged",
   "+components/services/storage/public",
+  "+components/services/storage/shared_storage",
   "+components/site_isolation",
   "+content/public/browser",
   "+content/public/common",
diff --git a/components/browsing_data/content/browsing_data_model.cc b/components/browsing_data/content/browsing_data_model.cc
index 9d68fe2..19ad6349 100644
--- a/components/browsing_data/content/browsing_data_model.cc
+++ b/components/browsing_data/content/browsing_data_model.cc
@@ -8,12 +8,15 @@
 #include "base/callback.h"
 #include "base/containers/enum_set.h"
 #include "base/memory/weak_ptr.h"
+#include "components/services/storage/public/mojom/storage_usage_info.mojom.h"
+#include "components/services/storage/shared_storage/shared_storage_manager.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/storage_partition.h"
 #include "services/network/network_context.h"
 #include "services/network/public/mojom/trust_tokens.mojom.h"
 #include "third_party/abseil-cpp/absl/types/variant.h"
+#include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "url/origin.h"
 
@@ -57,6 +60,9 @@
     return data_key.origin().host();
   }
 
+  if (storage_type_ == BrowsingDataModel::StorageType::kSharedStorage) {
+    return data_key.origin().host();
+  }
   NOTREACHED();
   return "";
 }
@@ -133,8 +139,20 @@
 template <>
 void StorageRemoverHelper::Visitor::operator()<blink::StorageKey>(
     const blink::StorageKey& storage_key) {
-  // TODO(crbug.com/1271155): Implement.
-  NOTREACHED();
+  if (types.Has(BrowsingDataModel::StorageType::kSharedStorage)) {
+    helper->storage_partition_->GetSharedStorageManager()->Clear(
+        storage_key.origin(),
+        base::BindOnce(
+            [](base::OnceClosure complete_callback,
+               storage::SharedStorageDatabase::OperationResult result) {
+              std::move(complete_callback).Run();
+            },
+            helper->GetCompleteCallback()));
+
+  } else {
+    // TODO(crbug.com/1271155): Implement for quota managed storage.
+    NOTREACHED();
+  }
 }
 
 base::OnceClosure StorageRemoverHelper::GetCompleteCallback() {
@@ -168,6 +186,19 @@
   std::move(loaded_callback).Run();
 }
 
+void OnSharedStorageLoaded(
+    BrowsingDataModel* model,
+    base::OnceClosure loaded_callback,
+    std::vector<::storage::mojom::StorageUsageInfoPtr> storage_usage_info) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  for (const auto& info : storage_usage_info) {
+    model->AddBrowsingData(info->storage_key,
+                           BrowsingDataModel::StorageType::kSharedStorage,
+                           info->total_size_bytes);
+  }
+  std::move(loaded_callback).Run();
+}
+
 }  // namespace
 
 BrowsingDataModel::DataDetails::~DataDetails() = default;
@@ -310,9 +341,12 @@
 
 void BrowsingDataModel::PopulateFromDisk(base::OnceClosure finished_callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
+  bool is_shared_storage_enabled =
+      base::FeatureList::IsEnabled(blink::features::kSharedStorageAPI);
   // TODO(crbug.com/1271155): Derive this from the StorageTypeSet directly.
   int storage_backend_count = 1;
+  if (is_shared_storage_enabled)
+    storage_backend_count++;
 
   base::RepeatingClosure completion =
       base::BarrierClosure(storage_backend_count, std::move(finished_callback));
@@ -324,6 +358,12 @@
   // Issued Trust Tokens:
   storage_partition_->GetNetworkContext()->GetStoredTrustTokenCounts(
       base::BindOnce(&OnTrustTokenIssuanceInfoLoaded, this, completion));
+
+  // Shared storage origins
+  if (is_shared_storage_enabled) {
+    storage_partition_->GetSharedStorageManager()->FetchOrigins(
+        base::BindOnce(&OnSharedStorageLoaded, this, completion));
+  }
 }
 
 BrowsingDataModel::BrowsingDataModel(
diff --git a/components/browsing_data/content/browsing_data_model.h b/components/browsing_data/content/browsing_data_model.h
index 3960692..3a6237f 100644
--- a/components/browsing_data/content/browsing_data_model.h
+++ b/components/browsing_data/content/browsing_data_model.h
@@ -31,7 +31,8 @@
   // incomplete implementations, and are marked as such.
   // TODO(crbug.com/1271155): Complete implementations for all browsing data.
   enum class StorageType {
-    kTrustTokens,                // Only issuance information considered.
+    kTrustTokens,  // Only issuance information considered.
+    kSharedStorage,
     kPartitionedQuotaStorage,    // Not fetched from disk or deleted.
     kUnpartitionedQuotaStorage,  // Not fetched from disk or deleted.
 
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 7992ff7f..f3668e5 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "14.30",
-  "log_list_timestamp": "2022-11-15T12:55:09Z",
+  "version": "15.1",
+  "log_list_timestamp": "2022-11-16T12:54:50Z",
   "operators": [
     {
       "name": "Google",
@@ -47,8 +47,8 @@
           "url": "https://ct.googleapis.com/logs/us1/argon2024/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2022-08-18T23:45:14Z"
+            "usable": {
+              "timestamp": "2022-11-01T18:54:00Z"
             }
           },
           "temporal_interval": {
@@ -95,8 +95,8 @@
           "url": "https://ct.googleapis.com/logs/eu1/xenon2024/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2022-08-18T23:45:14Z"
+            "usable": {
+              "timestamp": "2022-11-01T18:54:00Z"
             }
           },
           "temporal_interval": {
@@ -284,8 +284,8 @@
           "url": "https://yeti2024.ct.digicert.com/log/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2022-08-18T23:45:14Z"
+            "usable": {
+              "timestamp": "2022-11-01T18:54:00Z"
             }
           },
           "temporal_interval": {
@@ -300,8 +300,8 @@
           "url": "https://yeti2025.ct.digicert.com/log/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2022-08-18T23:45:14Z"
+            "usable": {
+              "timestamp": "2022-11-01T18:54:00Z"
             }
           },
           "temporal_interval": {
@@ -348,8 +348,8 @@
           "url": "https://nessie2024.ct.digicert.com/log/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2022-08-18T23:45:14Z"
+            "usable": {
+              "timestamp": "2022-11-01T18:54:00Z"
             }
           },
           "temporal_interval": {
@@ -364,8 +364,8 @@
           "url": "https://nessie2025.ct.digicert.com/log/",
           "mmd": 86400,
           "state": {
-            "qualified": {
-              "timestamp": "2022-08-18T23:45:14Z"
+            "usable": {
+              "timestamp": "2022-11-01T18:54:00Z"
             }
           },
           "temporal_interval": {
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngine.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngine.java
index a09fe3429..8d5f4fcc 100644
--- a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngine.java
+++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngine.java
@@ -95,6 +95,7 @@
 
             if (status == SplitInstallSessionStatus.INSTALLED) {
                 mFacade.updateCrashKeys();
+                mFacade.updateBundleUtils();
             }
 
             for (String moduleName : modules) {
diff --git a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngineFacade.java b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngineFacade.java
index e4ee613..cf0b4851 100644
--- a/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngineFacade.java
+++ b/components/module_installer/android/java/src/org/chromium/components/module_installer/engine/SplitCompatEngineFacade.java
@@ -11,6 +11,7 @@
 import com.google.android.play.core.splitinstall.SplitInstallManagerFactory;
 import com.google.android.play.core.splitinstall.SplitInstallRequest;
 
+import org.chromium.base.BundleUtils;
 import org.chromium.base.ContextUtils;
 import org.chromium.components.module_installer.logger.Logger;
 import org.chromium.components.module_installer.logger.PlayCoreLogger;
@@ -59,4 +60,8 @@
     public void updateCrashKeys() {
         ModuleUtil.updateCrashKeys();
     }
+
+    public void updateBundleUtils() {
+        BundleUtils.invalidateListOfInstalledSplits();
+    }
 }
diff --git a/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java b/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java
index a120fb0c..f4ca3df 100644
--- a/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java
+++ b/components/module_installer/android/junit/src/org/chromium/components/module_installer/engine/SplitCompatEngineTest.java
@@ -235,6 +235,7 @@
 
         // Assert.
         inOrder.verify(mInstallerFacade, times(1)).updateCrashKeys();
+        inOrder.verify(mInstallerFacade, times(1)).updateBundleUtils();
         inOrder.verify(listener1, times(1)).onComplete(true);
         inOrder.verify(mLogger, times(1)).logStatus(moduleName1, status);
         inOrder.verify(listener2, times(1)).onComplete(true);
diff --git a/components/optimization_guide/core/BUILD.gn b/components/optimization_guide/core/BUILD.gn
index 29444c9b..763e837 100644
--- a/components/optimization_guide/core/BUILD.gn
+++ b/components/optimization_guide/core/BUILD.gn
@@ -484,7 +484,6 @@
 }
 
 if (build_with_tflite_lib) {
-  # TODO(b/249585782): Extend this to support NL models as well.
   template("bert_model_fuzzer") {
     forward_variables_from(invoker, "*")
 
@@ -510,4 +509,17 @@
     optimization_target = "OPTIMIZATION_TARGET_PAGE_TOPICS_V2"
     model_file_basename = "bert_page_topics_model.tflite"
   }
+
+  fuzzer_test("optimization_guide_page_visibility_model_fuzzer") {
+    sources = [ "page_visibility_model_fuzzer.cc" ]
+    deps = [
+      ":core",
+      ":features",
+      ":machine_learning",
+      ":model_executor",
+      "//base:base",
+      "//base/test:test_support",
+      "//components/optimization_guide/proto:optimization_guide_proto",
+    ]
+  }
 }
diff --git a/components/optimization_guide/core/page_visibility_model_fuzzer.cc b/components/optimization_guide/core/page_visibility_model_fuzzer.cc
new file mode 100644
index 0000000..ea2a64e
--- /dev/null
+++ b/components/optimization_guide/core/page_visibility_model_fuzzer.cc
@@ -0,0 +1,75 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include <fuzzer/FuzzedDataProvider.h>
+
+#include "base/path_service.h"
+#include "base/test/task_environment.h"
+#include "components/optimization_guide/core/page_visibility_model_executor.h"
+
+class PageVisiblityExecutorFuzzer {
+ public:
+  PageVisiblityExecutorFuzzer()
+      : model_executor_(optimization_guide::PageVisibilityModelExecutor()) {
+    model_executor_.InitializeAndMoveToExecutionThread(
+        // This is an arbitrarily long time since we don't need to test the
+        // timeout behavior here, libfuzzer will take care of hangs.
+        /*model_inference_timeout=*/base::Minutes(60),
+        optimization_guide::proto::OPTIMIZATION_TARGET_PAGE_VISIBILITY,
+        /*execution_task_runner=*/task_environment_.GetMainThreadTaskRunner(),
+        /*reply_task_runner=*/task_environment_.GetMainThreadTaskRunner());
+
+    base::FilePath source_root_dir;
+    base::PathService::Get(base::DIR_SOURCE_ROOT, &source_root_dir);
+    base::FilePath model_file_path =
+        source_root_dir.AppendASCII("components")
+            .AppendASCII("test")
+            .AppendASCII("data")
+            .AppendASCII("optimization_guide")
+            .AppendASCII("visibility_test_model.tflite");
+
+    model_executor_.UpdateModelFile(model_file_path);
+    model_executor_.SetShouldUnloadModelOnComplete(false);
+  }
+  ~PageVisiblityExecutorFuzzer() { task_environment_.RunUntilIdle(); }
+
+  optimization_guide::PageVisibilityModelExecutor* executor() {
+    return &model_executor_;
+  }
+
+  void RunUntilIdle() { task_environment_.RunUntilIdle(); }
+
+ private:
+  base::test::TaskEnvironment task_environment_;
+  optimization_guide::PageVisibilityModelExecutor model_executor_;
+};
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  static PageVisiblityExecutorFuzzer test;
+  static bool had_successful_run = false;
+
+  std::string input(reinterpret_cast<const char*>(data), size);
+  test.executor()->SendForExecution(
+      base::BindOnce(
+          [](const absl::optional<std::vector<tflite::task::core::Category>>&
+                 output) {
+            if (output && !had_successful_run) {
+              had_successful_run = true;
+              // Print a single debug message so that its obvious things are
+              // working (or able to at least once) when running locally.
+              LOG(INFO) << "Congrats! Got a successful model execution. This "
+                           "message will not be printed again.";
+            }
+          }),
+      base::TimeTicks(), input);
+
+  // The model executor does some PostTask'ing to manage its state. While these
+  // tasks are not important for fuzzing, we don't want to queue up a ton of
+  // them.
+  test.RunUntilIdle();
+
+  return 0;
+}
diff --git a/components/password_manager/core/browser/export/password_csv_writer.cc b/components/password_manager/core/browser/export/password_csv_writer.cc
index c5cac98..ec9cab9 100644
--- a/components/password_manager/core/browser/export/password_csv_writer.cc
+++ b/components/password_manager/core/browser/export/password_csv_writer.cc
@@ -6,7 +6,9 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "components/password_manager/core/browser/export/csv_writer.h"
+#include "components/password_manager/core/browser/password_ui_utils.h"
 #include "components/password_manager/core/browser/ui/credential_ui_entry.h"
+#include "components/sync/base/features.h"
 
 namespace password_manager {
 
@@ -16,6 +18,7 @@
 const char kUrlColumnName[] = "url";
 const char kUsernameColumnName[] = "username";
 const char kPasswordColumnName[] = "password";
+const char kNoteColumnName[] = "note";
 
 }  // namespace
 
@@ -27,6 +30,9 @@
   header[1] = kUrlColumnName;
   header[2] = kUsernameColumnName;
   header[3] = kPasswordColumnName;
+  if (base::FeatureList::IsEnabled(syncer::kPasswordNotesWithBackup)) {
+    header.push_back(kNoteColumnName);
+  }
 
   std::vector<std::map<std::string, std::string>> records;
   records.reserve(credentials.size());
@@ -45,7 +51,10 @@
   record[kUrlColumnName] = credential.GetURL().spec();
   record[kUsernameColumnName] = base::UTF16ToUTF8(credential.username);
   record[kPasswordColumnName] = base::UTF16ToUTF8(credential.password);
-  record[kTitleColumnName] = credential.GetURL().host();
+  if (base::FeatureList::IsEnabled(syncer::kPasswordNotesWithBackup)) {
+    record[kNoteColumnName] = base::UTF16ToUTF8(credential.note.value);
+  }
+  record[kTitleColumnName] = GetShownOrigin(credential);
   return record;
 }
 
diff --git a/components/password_manager/core/browser/export/password_csv_writer_unittest.cc b/components/password_manager/core/browser/export/password_csv_writer_unittest.cc
index 906760d..23ba45c 100644
--- a/components/password_manager/core/browser/export/password_csv_writer_unittest.cc
+++ b/components/password_manager/core/browser/export/password_csv_writer_unittest.cc
@@ -5,18 +5,27 @@
 #include "components/password_manager/core/browser/export/password_csv_writer.h"
 
 #include <memory>
+#include <string>
 #include <vector>
 
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_feature_list.h"
 #include "components/password_manager/core/browser/import/csv_password.h"
 #include "components/password_manager/core/browser/import/csv_password_sequence.h"
 #include "components/password_manager/core/browser/ui/credential_ui_entry.h"
+#include "components/sync/base/features.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
 using testing::ElementsAre;
 
+#if BUILDFLAG(IS_WIN)
+const std::string kLineEnding = "\r\n";
+#else
+const std::string kLineEnding = "\n";
+#endif
+
 namespace password_manager {
 
 namespace {
@@ -39,22 +48,43 @@
 }
 
 TEST(PasswordCSVWriterTest, SerializePasswords_SinglePassword) {
-  std::vector<CredentialUIEntry> credentials;
-  PasswordForm form;
-  form.url = GURL("http://example.com");
-  form.username_value = u"Someone";
-  form.password_value = u"Secret";
-  credentials.emplace_back(form);
+  for (bool is_notes_enabled : {false, true}) {
+    base::test::ScopedFeatureList feature_list;
+    feature_list.InitWithFeatureState(syncer::kPasswordNotesWithBackup,
+                                      is_notes_enabled);
 
-  CSVPasswordSequence seq(PasswordCSVWriter::SerializePasswords(credentials));
-  ASSERT_EQ(CSVPassword::Status::kOK, seq.result());
+    const std::u16string kNoteValue =
+        base::UTF8ToUTF16("Note Line 1" + kLineEnding + "Note Line 2");
+    std::vector<CredentialUIEntry> credentials;
+    PasswordForm form;
+    form.url = GURL("http://example.com");
+    form.username_value = u"Someone";
+    form.password_value = u"Secret";
+    form.notes = {PasswordNote(kNoteValue, base::Time::Now())};
+    credentials.emplace_back(form);
 
-  std::vector<CredentialUIEntry> pwds;
-  for (const auto& pwd : seq) {
-    pwds.emplace_back(pwd);
+    CSVPasswordSequence seq(PasswordCSVWriter::SerializePasswords(credentials));
+    ASSERT_EQ(CSVPassword::Status::kOK, seq.result());
+
+    std::vector<CredentialUIEntry> pwds;
+    for (const auto& pwd : seq) {
+      pwds.emplace_back(pwd);
+    }
+    EXPECT_THAT(pwds, ElementsAre(FormHasOriginUsernamePassword(
+                          "http://example.com/", "Someone", "Secret")));
+
+    // TODO: remove this when CSVPasswordSequence will support notes.
+    std::string expected =
+        is_notes_enabled
+            ? "name,url,username,password,note" + kLineEnding +
+                  "example.com,http://example.com/,Someone,Secret,\"Note Line "
+                  "1" +
+                  kLineEnding + "Note Line 2\"" + kLineEnding
+            : "name,url,username,password" + kLineEnding +
+                  "example.com,http://example.com/,Someone,Secret" +
+                  kLineEnding;
+    EXPECT_EQ(expected, PasswordCSVWriter::SerializePasswords(credentials));
   }
-  EXPECT_THAT(pwds, ElementsAre(FormHasOriginUsernamePassword(
-                        "http://example.com/", "Someone", "Secret")));
 }
 
 TEST(PasswordCSVWriterTest, SerializePasswords_TwoPasswords) {
@@ -82,4 +112,49 @@
                                     "http://other.org/", "Anyone", "None")));
 }
 
+TEST(PasswordCSVWriterTest, SerializePasswordsWritesNames) {
+  for (bool is_notes_enabled : {false, true}) {
+    base::test::ScopedFeatureList feature_list;
+    feature_list.InitWithFeatureState(syncer::kPasswordNotesWithBackup,
+                                      is_notes_enabled);
+    std::vector<CredentialUIEntry> credentials;
+    PasswordForm form;
+    form.url = GURL("http://example.com");
+    form.username_value = u"a";
+    form.password_value = u"b";
+    credentials.emplace_back(form);
+    form.url = GURL(
+        "android://"
+        "Jzj5T2E45Hb33D-lk-"
+        "EHZVCrb7a064dEicTwrTYQYGXO99JqE2YERhbMP1qLogwJiy87OsBzC09Gk094Z-U_hg=="
+        "@"
+        "com.netflix.mediaclient");
+    form.signon_realm =
+        "android://"
+        "Jzj5T2E45Hb33D-lk-"
+        "EHZVCrb7a064dEicTwrTYQYGXO99JqE2YERhbMP1qLogwJiy87OsBzC09Gk094Z-U_hg=="
+        "@"
+        "com.netflix.mediaclient";
+    form.app_display_name = "Netflix";
+    form.username_value = u"a";
+    form.password_value = u"b";
+    credentials.emplace_back(form);
+    std::string expected =
+        is_notes_enabled
+            ? "name,url,username,password,note" + kLineEnding +
+                  "example.com,http://example.com/,a,b," + kLineEnding +
+                  "Netflix,android://Jzj5T2E45Hb33D-lk-"
+                  "EHZVCrb7a064dEicTwrTYQYGXO99JqE2YERhbMP1qLogwJiy87OsB"
+                  "zC09Gk094Z-U_hg==@com.netflix.mediaclient,a,b," +
+                  kLineEnding
+            : "name,url,username,password" + kLineEnding +
+                  "example.com,http://example.com/,a,b" + kLineEnding +
+                  "Netflix,android://Jzj5T2E45Hb33D-lk-"
+                  "EHZVCrb7a064dEicTwrTYQYGXO99JqE2YERhbMP1qLogwJiy87OsB"
+                  "zC09Gk094Z-U_hg==@com.netflix.mediaclient,a,b" +
+                  kLineEnding;
+    EXPECT_EQ(expected, PasswordCSVWriter::SerializePasswords(credentials));
+  }
+}
+
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/manage_passwords_referrer.h b/components/password_manager/core/browser/manage_passwords_referrer.h
index 3376e4ad..f62c7f5 100644
--- a/components/password_manager/core/browser/manage_passwords_referrer.h
+++ b/components/password_manager/core/browser/manage_passwords_referrer.h
@@ -66,6 +66,10 @@
   // a confirmation dialog is shown with an instructions on how to control the
   // feature from settings.
   kBiometricAuthenticationBeforeFillingDialog = 15,
+
+  // NOTE: When adding a new value to this enum that applies or could apply to
+  // Android, make sure it is correctly handled by the internal credential
+  // manager launcher java implementation.
   kMaxValue = kBiometricAuthenticationBeforeFillingDialog,
 };
 
diff --git a/components/policy/core/common/cloud/cloud_policy_util.cc b/components/policy/core/common/cloud/cloud_policy_util.cc
index b1291ad4..b16373fd 100644
--- a/components/policy/core/common/cloud/cloud_policy_util.cc
+++ b/components/policy/core/common/cloud/cloud_policy_util.cc
@@ -228,8 +228,9 @@
 
 std::string GetDeviceName() {
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-  return chromeos::system::StatisticsProvider::GetInstance()
-      ->GetEnterpriseMachineID();
+  return std::string(chromeos::system::StatisticsProvider::GetInstance()
+                         ->GetMachineID()
+                         .value_or(""));
 #elif BUILDFLAG(IS_CHROMEOS_LACROS)
   const chromeos::BrowserParamsProxy* init_params =
       chromeos::BrowserParamsProxy::Get();
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 612976d..eb4f7b4 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -447,11 +447,6 @@
       Erweiterungsdrucker werden auch als Druckanbieterziele bezeichnet – hierzu zählen alle Druckziele, die zu einer <ph name="PRODUCT_NAME" />-Erweiterung gehören.
 
       Lokale Drucker werden auch native Druckziele genannt – hierzu zählen Druckziele, die für lokale Geräte verfügbar sind, sowie freigegebene Netzwerkdrucker.</translation>
-<translation id="1456449214426764016">Die nicht standardmäßige window.webmasterStorageInfo API ist veraltet und soll in Zukunft entfernt werden.
-      Durch diese Richtlinie wird die API wieder aktiviert.
-      Wenn diese Richtlinie aktiviert ist, ist die window.webkitStorageInfo API verfügbar.
-      Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, ist die window.webkitStorageInfo API nicht verfügbar.
-      </translation>
 <translation id="1456822151187621582">Windows (<ph name="PRODUCT_OS_NAME" />-Clients):</translation>
 <translation id="1464848559468748897">Steuert das Nutzerverhalten in einer Sitzung mit mehreren Profilen auf Geräten mit <ph name="PRODUCT_OS_NAME" />
 
@@ -506,6 +501,7 @@
       Trenne mehrere Servernamen durch Kommas. Platzhalter wie <ph name="WILDCARD_VALUE" /> sind zulässig.</translation>
 <translation id="1488724823347505879">Freigabe zwischen Android-Apps und Webanwendungen aktivieren</translation>
 <translation id="1494138678487405397">Hohen Kontrast auf dem Anmeldebildschirm deaktivieren</translation>
+<translation id="1499129134689253257">Das neue Verhalten von „<ph name="OFFSET_PARENT" />“ steuern</translation>
 <translation id="1501644502684303995">Online-Anmeldungen nur auf dem Anmeldebildschirm erzwingen</translation>
 <translation id="1502843533062797703">Blockieren von Codeeinschleusungen durch Drittanbieter-Software aktivieren</translation>
 <translation id="1503969899251962413">Mit dieser Richtlinie wird der <ph name="PLUGIN_VM_NAME" />-Lizenzschlüssel für dieses Gerät angegeben.
@@ -821,16 +817,6 @@
 
       Wenn die Richtlinie nicht konfiguriert ist, können Nutzer die gesamte Liste bevorzugter Sprachen beliebig anpassen.</translation>
 <translation id="1803646570632580723">Liste der im Launcher angezeigten Apps ansehen</translation>
-<translation id="1805056271257244521">Wenn die Richtlinie aktiviert ist, wird die JavaScript-Funktion setTimeout() mit einem Zeitlimit von 0 ms nicht auf 1 ms aufgerundet.
-          Ist die Richtlinie deaktiviert, wird die JavaScript-Funktion setTimeout() mit einem Zeitlimit von 0 ms auf 1 ms aufgerundet.
-          Wird die Richtlinie nicht konfiguriert, kommt das Standardverhalten des Browsers für die Mindestverzögerung der Funktion setTimeout() zum Einsatz.
-
-          Diese Funktion ist mit gängigen Webstandards kompatibel, kann jedoch die Aufgabenreihenfolge auf einer Webseite verändern und dadurch unerwartetes Verhalten auf Websites bewirken, die auf eine bestimmte Reihenfolge angewiesen sind. Außerdem kann sie Auswirkungen auf Websites haben, für die bei der Funktion setTimeout() häufig ein Zeitlimit von 0 ms verwendet wird, etwa in Form einer erhöhten CPU-Auslastung.
-
-          Für Nutzer, für die diese Richtlinie nicht konfiguriert ist, wird diese Änderung schrittweise in der stabilen Version eingeführt.
-
-          Diese Richtlinie kommt nur vorübergehend zum Einsatz und wird voraussichtlich in Chrome 105 entfernt. Die Frist kann verlängert werden, sofern bei Unternehmen Bedarf besteht.
-          </translation>
 <translation id="1808715480127969042">Cookies auf diesen Websites blockieren</translation>
 <translation id="1810261428246410396">Verwendung von Instant Tethering erlauben.</translation>
 <translation id="1813638828646876133">Automatische PIN-Eingabe auf dem Sperr- und Anmeldebildschirm aktivieren</translation>
@@ -2358,6 +2344,17 @@
 
       Wenn die Richtlinie nicht konfiguriert ist, werden alle installierten nativen Nachrichtenhosts von <ph name="PRODUCT_NAME" /> geladen.</translation>
 <translation id="3211426942294667684">Einstellungen für die Anmeldung im Browser</translation>
+<translation id="3217774577897351942">Die <ph name="OFFSET_PARENT" /> API wird bei <ph name="PRODUCT_NAME" /> geändert, um den in <ph name="FIREFOX_PRODUCT_NAME" /> und <ph name="SAFARI_PRODUCT_NAME" /> vorgenommenen Änderungen zu entsprechen. Mit dieser Richtlinie wird das alte Verhalten bis zur Einführung von M120 wiederhergestellt.
+
+Durch das neue Verhalten können unter Umständen einige <ph name="PRODUCT_NAME" />-Websites beeinträchtigt werden, bei denen „<ph name="OFFSET_PARENT" />“, „<ph name="OFFSET_TOP" />“ oder „<ph name="OFFSET_LEFT" />“ in Verbindung mit Shadow DOM verwendet wird.
+
+Hier sind einige Polyfills, mit denen das alte Verhalten für die Migration wiederhergestellt werden kann: https://github.com/josepharhar/offsetparent-polyfills
+
+Wenn diese Richtlinie aktiviert ist, wird das neue Verhalten verwendet.
+
+Ist die Richtlinie deaktiviert, wird das alte Verhalten verwendet.
+
+Wenn diese Richtlinie nicht konfiguriert ist, wird genau wie bei den anderen Chromium-Nutzern das neue Verhalten verwendet.</translation>
 <translation id="3219421230122020860">Inkognitomodus verfügbar</translation>
 <translation id="3220624000494482595">Wenn die Kiosk-App eine Android-App ist, hat sie keine Kontrolle über die <ph name="PRODUCT_OS_NAME" />-Version, auch wenn diese Richtlinie auf <ph name="TRUE" /> gesetzt ist.</translation>
 <translation id="3222088741899353813">Linke Maustaste auf dem Anmeldebildschirm als primäre Taste festlegen</translation>
@@ -2764,6 +2761,7 @@
 <translation id="3589193811812796052">Verhindern, dass WebAssembly-Module ursprungsübergreifend gesendet werden</translation>
 <translation id="3591527072193107424">Funktion für die Unterstützung älterer Browser aktivieren.</translation>
 <translation id="3591584750136265240">Verhalten der Log-in-Authentifizierung konfigurieren</translation>
+<translation id="3593905652755912452">Bei deaktivierten Formularsteuerelementen wird die alte Ereignisweiterleitung verwendet.</translation>
 <translation id="3596112486106491038">Befehlszeilenzugriff auf virtuellen Maschinen aktivieren</translation>
 <translation id="3603469950773500315">Einschränkungen von <ph name="CORS" />-Prüfungen in der neuen <ph name="CORS" />-Implementierung erlauben, wodurch Erweiterungen kompatibles Verhalten beibehalten können und <ph name="PRODUCT_NAME" /> angegebene Header ohne <ph name="CORS" />-Prüfungen senden kann.
 
@@ -3062,6 +3060,7 @@
 <translation id="3891357445869647828">JavaScript aktivieren</translation>
 <translation id="3891769546914233112">„PDF als Bild drucken“ verfügbar</translation>
 <translation id="3897218615484393758">Zeit beschränken, während der sich ein über SAML authentifizierter Nutzer offline auf dem Sperrbildschirm anmelden kann</translation>
+<translation id="3897860452756794695">Das neue „offsetParent“-Verhalten wird verwendet.</translation>
 <translation id="3898345958122666461">NTLMv2 deaktivieren</translation>
 <translation id="3898795800259311780">Bildschirmaufnahme gestatten oder ablehnen</translation>
 <translation id="3903313632842363082">Melden der Nutzer auf Geräten deaktivieren</translation>
@@ -4822,6 +4821,7 @@
 
       Nutzer können diese Einstellung nicht ändern.</translation>
 <translation id="5838452040629810808">„Mauszeiger hervorheben“ aktivieren</translation>
+<translation id="5842283830553218200">Bei deaktivierten Formularsteuerelementen wird standardmäßig die neue Ereignisweiterleitung verwendet.</translation>
 <translation id="5848438019586925019">Algorithmus für die Generierung von Schlüsselpaaren.</translation>
 <translation id="5851248808417680865">Dunkles Design verwenden</translation>
 <translation id="585270638818921943">Nutzer daran hindern, Android-Apps aus nicht vertrauenswürdigen Quellen zu verwenden</translation>
@@ -5306,6 +5306,7 @@
       Wenn diese Richtlinie deaktiviert oder nicht konfiguriert ist, dürfen Nutzer selbst entscheiden, ob sie die <ph name="CHROME_SYNC_NAME" /> verwenden möchten.
 
       Hinweis: Aktiviere diese Richtlinie nicht, wenn „<ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />“ aktiviert ist, da diese Funktion über dieselbe clientseitige Funktion verfügt. Die von Google gehostete Synchronisierung ist in diesem Fall vollständig deaktiviert.</translation>
+<translation id="6320935916601887506">Standardmäßig wird das neue „offsetParent“-Verhalten verwendet.</translation>
 <translation id="6327643515544933974">Web USB-Einstellungen</translation>
 <translation id="6330882599388782338">Websites den Zugriff auf Sensoren erlauben</translation>
 <translation id="6331167725613770725">Diese Richtlinie ist veraltet und wird in Version 85 von <ph name="PRODUCT_OS_NAME" /> entfernt. Bitte verwende stattdessen die Richtlinie "<ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />".
@@ -5441,6 +5442,7 @@
 <translation id="6464074037294098618">Autofill für Adressdaten zulassen</translation>
 <translation id="6467613372414922590">Hosts für natives Messaging, die ohne Berechtigung des Administrators installiert wurden, auf Nutzerebene zulassen</translation>
 <translation id="6473623140202114570">Hiermit wird die Liste der Domains konfiguriert, auf denen durch Safe Browsing keine Warnungen ausgelöst werden.</translation>
+<translation id="6474194795370862403">Das alte „offsetParent“-Verhalten wird verwendet.</translation>
 <translation id="647645276885673708"><ph name="LACROS_NAME" /> aktivieren und als primären Browser festlegen</translation>
 <translation id="647698599569353771">Aktivieren von Nearby Share zulassen.</translation>
 <translation id="6477685422297715670">Tastaturbeleuchtungsfarbe „Grün“</translation>
@@ -6032,7 +6034,6 @@
       Wenn "U2F" ausgewählt ist, verhält sich die integrierte Hardware gemäß der FIDO U2F-Spezifikation.
 
       Wenn "U2F_EXTENDED" ausgewählt ist, sind durch die integrierte Hardware die U2F-Funktionen plus einige Erweiterungen zur individuellen Bestätigung verfügbar.</translation>
-<translation id="6998179760789945134">WebSQL in nicht sicheren Kontexten deaktivieren, sofern nicht per Chrome-Flag aktiviert.</translation>
 <translation id="6999948519306285655">Diese Richtlinie wurde eingestellt. Bitte verwende stattdessen die Richtlinie "<ph name="PROXY_SETTINGS_POLICY_NAME" />".
 
        Durch Festlegen der Richtlinie kannst du die URL zu einer PAC-Proxydatei angeben. Diese Richtlinie ist nur dann wirksam, wenn die Richtlinie "<ph name="PROXY_SETTINGS_POLICY_NAME" />" nicht konfiguriert ist und du "<ph name="PROXY_MODE_ENUM_PAC_SCRIPT" />" mit "<ph name="PROXY_MODE_POLICY_NAME" />" ausgewählt hast.
@@ -7224,6 +7225,7 @@
 <translation id="8250048892729838843">Diese Richtlinie ist veraltet. Wenn die Richtlinie aktiviert oder nicht konfiguriert wird, darf das Gerät Steuerelemente für detailliertes Reporting erhalten.
       Wird die Richtlinie deaktiviert, dürfen angemeldete Geräte keine Steuerelemente für detailliertes Reporting erhalten.</translation>
 <translation id="82530263956734297">Aus der Sperrliste auszuschließende Erweiterungs-IDs</translation>
+<translation id="8256006033157034334">Diese Richtlinie ist veraltet und wird nicht mehr unterstützt. Bitte verwende stattdessen „<ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />“.</translation>
 <translation id="8256688113167012935">Gibt an, welchen Kontonamen <ph name="PRODUCT_OS_NAME" /> für das entsprechende lokale Gerätekonto auf der Anmeldeseite anzeigt.
 
       Wenn diese Richtlinie eingerichtet ist, wird auf der Anmeldeseite des entsprechenden lokalen Gerätekontos der angegebene String für die bildbasierte Auswahl bei der Anmeldung verwendet.
@@ -7448,6 +7450,7 @@
 <translation id="8417305981081876834">Maximale Länge der Sperrbildschirm-PIN festlegen</translation>
 <translation id="841977920223099909">Auslöser für Passwortschutzwarnung</translation>
 <translation id="8420426128163801949">Nutzern erlauben, Bluetooth zu aktivieren oder zu deaktivieren</translation>
+<translation id="8422658829373743789">Neues Verhalten für die Ereignisweiterleitung bei deaktivierten Formularsteuerelementen festlegen</translation>
 <translation id="8422866312638683210">Wenn diese Richtlinie konfiguriert ist, versucht <ph name="PRODUCT_NAME" />, sich bei <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> zu registrieren. Der Wert dieser Richtlinie ist ein Registrierungstoken, das über die <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> abgerufen werden kann.
 
       Weitere Informationen dazu findest du unter https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
@@ -7989,6 +7992,19 @@
 <translation id="8947415621777543415">Gerätestandort melden</translation>
 <translation id="8948062138228904066">Zulassungsliste für Authentifizierungsserver</translation>
 <translation id="8951350807133946005">Datenträger-Cache-Verzeichnis festlegen</translation>
+<translation id="8952611478149810182">Die Weiterleitung von Ereignissen bei deaktivierten Formularsteuerelementen wird in Chromium geändert, um die Kompatibilität mit anderen Browsern zu verbessern und die Arbeit von Entwicklern zu vereinfachen.
+
+Durch diese Änderung werden „MouseEvents“ bei deaktivierten Formularsteuerelementen weitergeleitet, mit Ausnahme von „click“, „mouseup“ und „mousedown“. Zu den neuen Ereignissen gehören beispielsweise „mousemove“, „mouseenter“ und „mouseleave“.
+
+Durch diese Änderung wird auch der Ereignispfad von „click“, „mouseup“ und „mousedown“ abgeschnitten, wenn sie bei untergeordneten Elementen der deaktivierten Formularsteuerelemente weitergeleitet werden. Dadurch werden sie bei den deaktivierten Formularsteuerelementen oder deren Ancestors nicht weitergeleitet.
+
+Durch das neue Verhalten können einige Websites beeinträchtigt werden.
+
+Wenn diese Richtlinie aktiviert ist, wird das neue Verhalten verwendet.
+
+Ist die Richtlinie deaktiviert, wird das alte Verhalten verwendet.
+
+Wenn diese Richtlinie nicht konfiguriert ist, wird genau wie bei den anderen Chromium-Nutzern das neue Verhalten verwendet.</translation>
 <translation id="8955719471735800169">Zurück nach oben</translation>
 <translation id="8956312248048980644">Diese Richtlinie erlaubt standardmäßig das an Ursprünge gebundene Agent-Clustering.</translation>
 <translation id="8970205333161758602">Hinweis auf Einstellung von <ph name="PRODUCT_FRAME_NAME" /> unterdrücken</translation>
@@ -8098,9 +8114,6 @@
       Ist diese Richtlinie nicht konfiguriert, erfolgt keine automatische Auswahl für Websites.
 
       Genaue Informationen zu gültigen URL-Mustern findest du unter https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">WebSQL ist ab M105 in nicht sicheren Kontexten standardmäßig aktiviert, kann aber per Chrome-Flag deaktiviert werden.
-          Wenn diese Richtlinie auf „false“ gesetzt oder nicht konfiguriert ist, kann WebSQL in nicht sicheren Kontexten deaktiviert werden.
-          Ist sie auf „true“ gesetzt, ist es nicht möglich, WebSQL zu deaktivieren.</translation>
 <translation id="9068629430243705879">Port 6566 (Blockierung kann bis 15.10.2021 aufgehoben werden)</translation>
 <translation id="9069588907259547232">Wenn die Richtlinie aktiviert wird oder nicht konfiguriert ist, melden angemeldete Geräte die Lautstärke des Geräts.
 
@@ -8174,6 +8187,7 @@
 <translation id="9135033364005346124"><ph name="CLOUD_PRINT_NAME" />-Proxy aktivieren</translation>
 <translation id="9136212796239682721">Benutzeroberfläche für Download-Infofeld deaktivieren</translation>
 <translation id="9136399279941091445">Intervalle für Abwesenheitszeiten, wenn die angegebenen Geräterichtlinien veröffentlicht werden</translation>
+<translation id="9142561920976791097">Bei deaktivierten Formularsteuerelementen wird die neue Ereignisweiterleitung verwendet.</translation>
 <translation id="9148720248753722892">SHA-1-signierte Zertifikate nicht zulassen</translation>
 <translation id="9149678135092892302">Erfassen von Versionsinformationen deaktivieren</translation>
 <translation id="9150416707757015439">Diese Richtlinie ist veraltet. Bitte verwende stattdessen "IncognitoModeAvailability". Aktiviert den Inkognitomodus in <ph name="PRODUCT_NAME" />. Wenn diese Einstellung aktiviert oder nicht konfiguriert ist, können Nutzer Webseiten im Inkognitomodus öffnen. Sollte die Einstellung deaktiviert sein, können Nutzer Webseiten nicht im Inkognitomodus öffnen. Ist die Richtlinie nicht konfiguriert, so ist die Funktion aktiviert, sodass Nutzer den Inkognitomodus verwenden können.</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index d4316a2..a83a88c 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -451,11 +451,6 @@
       Las impresoras de extensiones, también conocidas como destinos del proveedor de impresión, incluyen los destinos que pertenecen a las extensiones de <ph name="PRODUCT_NAME" />.
 
       Las impresoras locales, también conocidas como destinos nativos de impresión, incluyen los destinos disponibles en la máquina local y las impresoras de redes compartidas.</translation>
-<translation id="1456449214426764016">La API no estándar de window.webkitStorageInfo dejó de estar disponible y se planea quitarla.
-      Esta política vuelve a habilitar la API.
-      Si habilitas esta política, la API de window.webkitStorageInfo estará disponible.
-      Si inhabilitas esta política o no la estableces, la API de window.webkitStorageInfo no estará disponible.
-      </translation>
 <translation id="1456822151187621582">Windows (clientes de <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">Controla el comportamiento del usuario durante una sesión de perfiles múltiples en dispositivos con <ph name="PRODUCT_OS_NAME" />.
 
@@ -826,19 +821,6 @@
 
       Si no estableces la política, los usuarios podrán modificar toda la lista de idiomas preferidos.</translation>
 <translation id="1803646570632580723">Lista de aplicaciones fijas para mostrar en el menú de aplicaciones</translation>
-<translation id="1805056271257244521">Si habilitas la política, la función setTimeout() de JavaScript con un tiempo de espera de 0 ms no se restringirá a 1 ms.
-          Cuando inhabilitas la política, la función setTimeout() de JavaScript con un tiempo de espera de 0ms se restringirá a 1 ms.
-          Cuando no la estableces, se utiliza el comportamiento predeterminado para la restricción de la función setTimeout().
-
-          Esta función cumple con los estándares web, pero es posible que cambie el orden de las tareas
-          en una página web, lo que genera un comportamiento inesperado en sitios que dependen de
-          un orden determinado de alguna manera. También puede afectar a los sitios que tienen muchas funciones setTimeout()
-          con un tiempo de espera de 0 ms de uso; por ejemplo, puede aumentar la carga de CPU.
-
-          Para los usuarios que no establezcan esta política, Chrome lanzará el cambio gradualmente en el canal estable.
-
-          Esta es una política temporal que se planea quitar en Chrome 105. Es posible que se extienda la fecha límite si las empresas lo necesitan.
-          </translation>
 <translation id="1808715480127969042">Bloquear cookies en estos sitios</translation>
 <translation id="1810261428246410396">Permitir usar la conexión instantánea mediante dispositivo móvil</translation>
 <translation id="1813638828646876133">Habilitar el envío automático de PIN en la pantalla de bloqueo y de acceso</translation>
@@ -4149,6 +4131,7 @@
 <translation id="5025239932007658691">Si habilitas la política o no la estableces, <ph name="PRODUCT_NAME" /> enviará consultas ocasionales a un servidor de Google para recuperar una marca de tiempo precisa.
 
       Si la inhabilitas, <ph name="PRODUCT_NAME" /> dejará de enviar estas consultas.</translation>
+<translation id="5033070732967197381">Permitir solicitudes a la API de WebAuthn en sitios con certificados TLS rotos</translation>
 <translation id="5034504101537897433">Habilitar los informes de fallos del dispositivo</translation>
 <translation id="5039110755072335605">Admisión de encabezados de solicitudes sin comodín CORS</translation>
 <translation id="504116558738617678">Solo mostrar advertencias de poco espacio en el disco si el dispositivo no está administrado o si solo hay 1 solo usuario</translation>
@@ -5725,6 +5708,7 @@
       - Si la inhabilitas, los administradores deberán comunicárselo a los usuarios finales del dispositivo.</translation>
 <translation id="6609867253856597039">Establece la experiencia del usuario de las funciones inhabilitadas</translation>
 <translation id="6614557704487944013">Permitir que los usuarios usen el navegador <ph name="LACROS_NAME" /></translation>
+<translation id="661610294649586421">No permitir solicitudes a la API de WebAuthn en sitios con certificados TLS rotos</translation>
 <translation id="6617589895942747919">La hora de inicio (inclusive) del intervalo.</translation>
 <translation id="6621830999036927230">Si estableces esta política, el host de acceso remoto usará esta URL para validar los tokens de autenticación de los clientes de acceso remoto, a fin de aceptar las conexiones. Si dejas la política vacía o no la estableces, se inhabilitará esta función.
 
@@ -6027,6 +6011,12 @@
 <translation id="6907778402784621686">Bloquea el contenido no seguro de estos sitios</translation>
 <translation id="6908640907898649429">Configura el proveedor de búsqueda predeterminado. Se puede especificar el proveedor de búsqueda predeterminado que el usuario usará u optar por inhabilitar la búsqueda predeterminada.</translation>
 <translation id="6913068954484253496">Permitir que <ph name="PRODUCT_NAME" /> se conecte a los dispositivos de transmisión en todas las direcciones IP</translation>
+<translation id="6915493311660114995">Si habilitas la política, <ph name="PRODUCT_NAME" /> permitirá
+las solicitudes de autenticación web en sitios web que tengan certificados TLS con
+errores (es decir, sitios web considerados no seguros).
+
+Si inhabilitas la política o no la estableces, se aplicará
+el comportamiento predeterminado para bloquear esas solicitudes.</translation>
 <translation id="6919819553978815392">Si la estableces como verdadera o no la configuras, <ph name="PRODUCT_NAME" /> y <ph name="LACROS_NAME" /> habilitarán los accesos de invitado. Los accesos de invitado son perfiles de <ph name="PRODUCT_NAME" /> en donde todas las ventanas están en el modo Incógnito.
 
       Si estableces esta política como falsa, <ph name="PRODUCT_NAME" /> y <ph name="LACROS_NAME" /> no permitirán que se inicien perfiles de invitado.
@@ -6130,7 +6120,6 @@
 Si se selecciona "U2F", el segundo factor integrado se comportará de acuerdo con la especificación de FIDO U2F.
 
 Si se selecciona "U2F_EXTENDED", el segundo factor integrado proporcionará funciones de U2F además de algunas extensiones para la atestación individual.</translation>
-<translation id="6998179760789945134">Inhabilitar WebSQL en contextos no seguros, a menos que la función experimental de Chrome lo habilite</translation>
 <translation id="6999948519306285655">Esta política no está disponible; usa <ph name="PROXY_SETTINGS_POLICY_NAME" /> en su lugar.
 
        Si configuras la política, podrás especificar una dirección URL para el archivo de proxy en formato .pac. Esta política solo tendrá efecto si no se especifica la política <ph name="PROXY_SETTINGS_POLICY_NAME" /> y si seleccionas <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> con <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -6939,6 +6928,7 @@
 <translation id="782661371433719637">No permite que ningún sitio solicite acceso de lectura a archivos y directorios a través de la API de File System</translation>
 <translation id="7827127381981620448">App de plataforma</translation>
 <translation id="7829436838673974723">Permitir que las páginas envíen solicitudes XHR síncronas cuando el usuario las abandona</translation>
+<translation id="782978857350824974">Permitir solicitudes de autenticación web en sitios con certificados TLS rotos</translation>
 <translation id="7832225468415136704">Impedir que Limpiar Chrome escanee el sistema de forma periódica y, luego, inhabilitar los escaneos manuales</translation>
 <translation id="7833148823006528332">Identificador de la app para Android, p. ej., "com.google.android.gm" para Gmail.</translation>
 <translation id="7835218570504220753">Inhabilitar el clic automático</translation>
@@ -7328,6 +7318,7 @@
 <translation id="8250048892729838843">Esta política dejó de estar disponible. Si habilitas la política o no la estableces, los dispositivos tendrán controles de informes detallados.
       Si inhabilitas la política, los dispositivos inscritos no tendrán controles de informes detallados.</translation>
 <translation id="82530263956734297">Identificadores de extensión para excluir de la lista de elementos bloqueados</translation>
+<translation id="8256006033157034334">Esta política dejó de estar disponible y ya no se admite. En su lugar, usa <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation>
 <translation id="8256688113167012935">Controla el nombre de cuenta <ph name="PRODUCT_OS_NAME" /> que aparece en la pantalla de acceso de la cuenta local del dispositivo que corresponda.
 
       Si esta política se establece, la pantalla de acceso utilizará la cadena especificada en el selector de acceso basado en imágenes de la cuenta local del dispositivo que corresponda.
@@ -8226,9 +8217,6 @@
       Si no se configura esta política, no se implementará la selección automática para ningún sitio.
 
       Para obtener información detallada sobre los patrones de URL válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">A partir de M105, WebSQL está activado de forma predeterminada en contextos no seguros, pero se puede inhabilitar a través de la función experimental de Chrome.
-          Si estableces esta política como falsa o no la estableces, se podrá inhabilitar WebSQL en contextos no seguros.
-          Si la estableces como verdadera, WebSQL no podrá inhabilitarse.</translation>
 <translation id="9068629430243705879">puerto 6566 (puede desbloquearse hasta el 15/10/2021)</translation>
 <translation id="9069588907259547232">Si habilitas la política o no la estableces, los dispositivos inscritos informarán el volumen del audio del dispositivo.
 
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 27ef99c..082f874 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -449,11 +449,6 @@
       Las impresoras de extensión, también llamadas "destinos de proveedor de impresión", incluyen cualquier destino que pertenezca a una extensión de <ph name="PRODUCT_NAME" />.
 
       Las impresoras locales, que también se denominan "destinos de impresión nativos", incluyen los destinos que están disponibles para los equipos locales y las impresoras compartidas de la red.</translation>
-<translation id="1456449214426764016">La API no estándar window.webkitStorageInfo está obsoleta y está previsto que se retire.
-      Esta política vuelve a habilitar dicha API.
-      Si se habilita esta política, la API window.webkitStorageInfo estará disponible.
-      Si se inhabilita esta política o no se define, la API window.webkitStorageInfo no estará disponible.
-      </translation>
 <translation id="1456822151187621582">Windows (clientes de <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">Controla el comportamiento del usuario en una sesión de varios perfiles en dispositivos <ph name="PRODUCT_OS_NAME" />.
 
@@ -508,6 +503,7 @@
       Nota: Si hay varios nombres de servidores, se deben separar con comas. Se permite el uso de caracteres comodín (<ph name="WILDCARD_VALUE" />).</translation>
 <translation id="1488724823347505879">Habilitar la opción de compartir de aplicaciones Android a aplicaciones web</translation>
 <translation id="1494138678487405397">Inhabilitar el contraste alto en la pantalla de inicio de sesión</translation>
+<translation id="1499129134689253257">Controlar el nuevo comportamiento de <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Requerir que se inicie sesión online solo en la pantalla de inicio de sesión</translation>
 <translation id="1502843533062797703">Habilitar el bloqueo de inserción de software de terceros</translation>
 <translation id="1503969899251962413">Si se le asigna un valor a esta política, se especificará la clave de licencia de <ph name="PLUGIN_VM_NAME" /> de este dispositivo.
@@ -822,19 +818,6 @@
 
       Si no se establece esta política, los usuarios podrán gestionar la lista completa de idiomas preferidos.</translation>
 <translation id="1803646570632580723">Lista de aplicaciones fijadas que deben aparecer en la barra de aplicaciones</translation>
-<translation id="1805056271257244521">Si se habilita esta política, cuando la función de JavaScript setTimeout() tenga un tiempo de espera de 0 ms, no se redondeará a 1 ms.
-          Si se inhabilita esta política, cuando la función de JavaScript setTimeout() tenga un tiempo de espera de 0 ms, se redondeará a 1 ms.
-          Si no se configura esta política, se usará el comportamiento predeterminado del navegador para el redondeo de la función setTimeout().
-
-          Esta función cumple los estándares web, pero es posible que cambie el orden de las tareas
-          en una página web, lo que podría provocar un comportamiento inesperado en sitios que
-          dependan, de algún modo, de un orden determinado. También puede afectar a sitios que usen mucho la función setTimeout()
-          con un tiempo de espera de 0 ms (por ejemplo, podría aumentar la carga de la CPU).
-
-          Para los usuarios que no tengan esta política configurada, Chrome lanzará el cambio de forma gradual en el canal estable.
-
-          Esta es una política temporal y se prevé que se elimine en la versión 105 de Chrome. Este plazo puede ampliarse si lo necesitan las empresas.
-          </translation>
 <translation id="1808715480127969042">Bloquear cookies en estos sitios</translation>
 <translation id="1810261428246410396">Permitir conexión compartida instantánea.</translation>
 <translation id="1813638828646876133">Habilitar el envío automático de PIN en la pantalla de bloqueo y de inicio de sesión</translation>
@@ -2371,6 +2354,17 @@
 
       Si no se le asigna un valor a la política, <ph name="PRODUCT_NAME" /> cargará todos los hosts de mensajes nativos instalados.</translation>
 <translation id="3211426942294667684">Configuración de inicio de sesión en el navegador</translation>
+<translation id="3217774577897351942">La API <ph name="OFFSET_PARENT" /> se va a modificar en <ph name="PRODUCT_NAME" /> para ajustarse a los cambios que se han hecho en <ph name="FIREFOX_PRODUCT_NAME" /> y <ph name="SAFARI_PRODUCT_NAME" />. Esta política revierte el comportamiento anterior hasta la versión M120.
+
+El nuevo comportamiento puede provocar que fallen algunos sitios web específicos de <ph name="PRODUCT_NAME" /> que usen <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> o <ph name="OFFSET_LEFT" /> junto con Shadow DOM.
+
+Aquí tienes algunos polyfills que recuperan el comportamiento anterior para ayudar a hacer la migración: https://github.com/josepharhar/offsetparent-polyfills.
+
+Si esta política se habilita, se usará el nuevo comportamiento.
+
+Si se inhabilita, se usará el comportamiento anterior.
+
+Si la política no se establece, se usará el nuevo comportamiento, tal como sucede con el resto de los usuarios de Chromium.</translation>
 <translation id="3219421230122020860">Modo Incógnito disponible</translation>
 <translation id="3220624000494482595">Si la aplicación de kiosco es una aplicación para Android, no tendrá control sobre la versión de <ph name="PRODUCT_OS_NAME" />, incluso si se asigna el valor <ph name="TRUE" /> a esta política.</translation>
 <translation id="3222088741899353813">El botón izquierdo es el principal en la pantalla de inicio de sesión</translation>
@@ -2779,6 +2773,7 @@
 <translation id="3589193811812796052">Evitar que los módulos de WebAssembly se envíen a otros orígenes</translation>
 <translation id="3591527072193107424">Habilitar la función de compatibilidad con navegadores antiguos.</translation>
 <translation id="3591584750136265240">Configurar el comportamiento de la autenticación de inicio de sesión</translation>
+<translation id="3593905652755912452">Se usará el comportamiento anterior de envío de eventos en controles de formulario inhabilitados.</translation>
 <translation id="3596112486106491038">Habilitar el acceso a la línea de comandos de las máquinas virtuales</translation>
 <translation id="3603469950773500315">Habilita las mitigaciones de comprobación de <ph name="CORS" /> en la nueva implementación de <ph name="CORS" />. Así, las extensiones continúan siendo compatibles y <ph name="PRODUCT_NAME" /> puede enviar encabezados definidos sin comprobaciones de <ph name="CORS" />.
 
@@ -3078,6 +3073,7 @@
 <translation id="3891357445869647828">Habilitar JavaScript</translation>
 <translation id="3891769546914233112">Imprimir PDF como imagen disponible</translation>
 <translation id="3897218615484393758">Limita el tiempo durante el que un usuario autenticado mediante SAML puede iniciar sesión sin conexión en la pantalla de bloqueo</translation>
+<translation id="3897860452756794695">Se usará el nuevo comportamiento de offsetParent.</translation>
 <translation id="3898345958122666461">Desactivar NTLMv2</translation>
 <translation id="3898795800259311780">Permitir o denegar capturas de pantalla</translation>
 <translation id="3903313632842363082">Inhabilitar los informes sobre los usuarios del dispositivo</translation>
@@ -4875,6 +4871,7 @@
 
       Los usuarios no podrán modificar este ajuste.</translation>
 <translation id="5838452040629810808">Habilitar el resaltado del cursor</translation>
+<translation id="5842283830553218200">Se usará el nuevo comportamiento de envío de eventos en controles de formulario inhabilitados de forma predeterminada.</translation>
 <translation id="5848438019586925019">El algoritmo para generar pares de claves.</translation>
 <translation id="5851248808417680865">Usar el tema oscuro</translation>
 <translation id="585270638818921943">Evitar que el usuario utilice aplicaciones Android de fuentes que no son de confianza</translation>
@@ -5372,6 +5369,7 @@
       Si se inhabilita esta política o no se le asigna ningún valor, los usuarios podrán elegir si quieren usar <ph name="CHROME_SYNC_NAME" />.
 
       Nota: No actives esta política si se ha habilitado <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />, ya que ambas comparten la misma funcionalidad del cliente. La sincronización alojada por Google se desactivará por completo en este caso.</translation>
+<translation id="6320935916601887506">Se usará el nuevo comportamiento de offsetParent de forma predeterminada.</translation>
 <translation id="6327643515544933974">Configuración de USB web</translation>
 <translation id="6330882599388782338">Permitir a los sitios web acceder a los sensores</translation>
 <translation id="6331167725613770725">Ten en cuenta que esta política está obsoleta y se eliminará de la versión 85 de <ph name="PRODUCT_OS_NAME" />. Utiliza <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> en su lugar.
@@ -5509,6 +5507,7 @@
 <translation id="6464074037294098618">Habilitar la función Autocompletar para direcciones</translation>
 <translation id="6467613372414922590">Permitir hosts de mensajes nativos en el nivel de usuario (instalados sin permisos de administrador)</translation>
 <translation id="6473623140202114570">Configura la lista de dominios en los que la Navegación segura no activará advertencias.</translation>
+<translation id="6474194795370862403">Se usará el comportamiento anterior de offsetParent.</translation>
 <translation id="647645276885673708">Habilitar <ph name="LACROS_NAME" /> y convertirlo en el navegador principal</translation>
 <translation id="647698599569353771">Permite habilitar Compartir con Nearby.</translation>
 <translation id="6477685422297715670">Color verde para la retroiluminación del teclado</translation>
@@ -6102,7 +6101,6 @@
       Si se selecciona la opción U2F, la autenticación de dos factores integrada sigue la especificación FIDO U2F.
 
       Si se selecciona la opción U2F_EXTENDED, la autenticación de dos factores integrada proporciona las funciones de U2F y algunas extensiones de confirmación individual.</translation>
-<translation id="6998179760789945134">Inhabilitar WebSQL en contextos no seguros a menos que lo habilite una marca de Chrome.</translation>
 <translation id="6999948519306285655">Esta política está obsoleta. Se debe usar la política <ph name="PROXY_SETTINGS_POLICY_NAME" /> en su lugar.
 
        Si se le asigna un valor a esta política, se especificará la URL de un archivo .pac de proxy. Esta política solo tiene validez si no se especifica la política <ph name="PROXY_SETTINGS_POLICY_NAME" /> y se ha seleccionado <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> con <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -7309,6 +7307,7 @@
 <translation id="8250048892729838843">Esta política está obsoleta. Si se habilita esta política o no se establece, el dispositivo podrá recibir controles de informes granulares.
       Si se inhabilita esta política, los dispositivos registrados no recibirán controles de informes granulares.</translation>
 <translation id="82530263956734297">ID de extensiones excluidas de la lista de bloqueados</translation>
+<translation id="8256006033157034334">Esta política está obsoleta y no se admite. Usa <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" /> en su lugar.</translation>
 <translation id="8256688113167012935">Permite controlar el nombre de la cuenta que <ph name="PRODUCT_OS_NAME" /> muestra en la pantalla de inicio de sesión para la cuenta local del dispositivo correspondiente.
 
       Si esta política se establece, la pantalla de inicio de sesión utilizará la cadena especificada en el selector de inicio de sesión basado en imágenes para la cuenta local del dispositivo correspondiente.
@@ -7520,6 +7519,7 @@
 <translation id="8417305981081876834">Definir la longitud máxima del PIN para la pantalla de bloqueo</translation>
 <translation id="841977920223099909">Activar advertencia de protección de contraseña</translation>
 <translation id="8420426128163801949">Permitir que los usuarios activen o desactiven el Bluetooth</translation>
+<translation id="8422658829373743789">Controlar el nuevo comportamiento de envío de eventos en controles de formulario inhabilitados</translation>
 <translation id="8422866312638683210">Si se asigna un valor a esta política, <ph name="PRODUCT_NAME" /> intentará registrarse con <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. El valor de esta política es un token de registro que puedes obtener desde la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Para obtener más información, consulta https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
@@ -8065,6 +8065,19 @@
 <translation id="8947415621777543415">Informar de ubicación del dispositivo</translation>
 <translation id="8948062138228904066">Lista de permitidos de servidores de autenticación</translation>
 <translation id="8951350807133946005">Establecer directorio de caché de disco</translation>
+<translation id="8952611478149810182">El envío de eventos en controles de formulario inhabilitados se va a modificar en Chromium para mejorar la compatibilidad con otros navegadores y la experiencia de los desarrolladores.
+
+Este cambio hace que los MouseEvents se envíen en elementos de control de formulario inhabilitados, a excepción de click, mouseup y mousedown. Por ejemplo, entre los nuevos eventos se incluirán mousemove, mouseenter y mouseleave.
+
+Este cambio también trunca la ruta de los eventos click, mouseup y mousedown cuando se envían en elementos secundarios de controles de formulario inhabilitados. Por lo tanto, no se envían en los controles de formulario inhabilitados ni en ninguno de sus antecedentes.
+
+El nuevo comportamiento puede provocar que algunos sitios web fallen.
+
+Si esta política se habilita, se usará el nuevo comportamiento.
+
+Si se inhabilita, se usará el comportamiento anterior.
+
+Si la política no se establece, se usará el nuevo comportamiento, tal como sucede con el resto de los usuarios de Chromium.</translation>
 <translation id="8955719471735800169">Volver al principio</translation>
 <translation id="8956312248048980644">Permite los clústeres de agentes con clave de origen de forma predeterminada.</translation>
 <translation id="8970205333161758602">Eliminar el mensaje de desactivación de <ph name="PRODUCT_FRAME_NAME" /></translation>
@@ -8174,9 +8187,6 @@
       Si no se asigna ningún valor a esta política, no se aplicará la selección automática en ningún sitio web.
 
       Para obtener información detallada sobre los patrones de URL válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">WebSQL está habilitado en contextos no seguros de forma predeterminada a partir de la versión M105, pero puede inhabilitarse mediante una marca de Chrome.
-          Si se asigna el valor false a esta política o no se le asigna ninguno, se podrá inhabilitar WebSQL en contextos no seguros.
-          Si se le asigna el valor true, WebSQL no se podrá inhabilitar.</translation>
 <translation id="9068629430243705879">puerto 6566 (puede desbloquearse hasta el 15/10/2021)</translation>
 <translation id="9069588907259547232">Si se habilita la política o no se establece, los dispositivos registrados informarán sobre el volumen de audio del dispositivo.
 
@@ -8250,6 +8260,7 @@
 <translation id="9135033364005346124">Habilitar el proxy de <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Inhabilitar la interfaz del cuadro de descargas</translation>
 <translation id="9136399279941091445">Intervalos fuera del horario en los que se publican las políticas de dispositivos especificadas</translation>
+<translation id="9142561920976791097">Se usará el nuevo comportamiento de envío de eventos en controles de formulario inhabilitados.</translation>
 <translation id="9148720248753722892">No permitir certificados SHA-1 firmados</translation>
 <translation id="9149678135092892302">Inhabilitar informes de datos sobre versiones</translation>
 <translation id="9150416707757015439">Esta política está obsoleta. Te recomendamos que uses IncognitoModeAvailability en su lugar.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 250e181..61e2240 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -449,11 +449,6 @@
       Les extensions permettant d'imprimer depuis un navigateur, ou destinations des fournisseurs d'impression, englobent toutes les destinations appartenant à une extension <ph name="PRODUCT_NAME" />.
 
       Les imprimantes locales, ou destinations d'impression native, englobent les destinations disponibles sur l'ordinateur local et les imprimantes réseau partagées.</translation>
-<translation id="1456449214426764016">L'API non standard window.webkitStorageInfo est obsolète et sera supprimée prochainement.
-      Cette règle réactive l'API.
-      Si cette règle est activée, l'API window.webkitStorageInfo sera disponible.
-      Si cette règle est désactivée ou n'est pas configurée, l'API window.webkitStorageInfo ne sera pas disponible.
-      </translation>
 <translation id="1456822151187621582">Windows (clients <ph name="PRODUCT_OS_NAME" />) :</translation>
 <translation id="1464848559468748897">Contrôle le comportement des utilisateurs dans une session multiprofil sur des appareils <ph name="PRODUCT_OS_NAME" />.
 
@@ -508,6 +503,7 @@
       Remarque : S'il y a plusieurs serveurs, séparez leur nom par une virgule. Les caractères génériques (<ph name="WILDCARD_VALUE" />) sont autorisés.</translation>
 <translation id="1488724823347505879">Activer le partage des applis Android vers les applis Web</translation>
 <translation id="1494138678487405397">Désactiver le contraste élevé sur l'écran de connexion</translation>
+<translation id="1499129134689253257">Contrôler le nouveau comportement de <ph name="OFFSET_PARENT" /></translation>
 <translation id="1501644502684303995">Appliquer uniquement les connexions en ligne depuis l'écran de connexion</translation>
 <translation id="1502843533062797703">Activer le blocage de l'injection de logiciels tiers</translation>
 <translation id="1503969899251962413">Cette règle permet de spécifier la clé de licence <ph name="PLUGIN_VM_NAME" /> pour cet appareil.
@@ -824,16 +820,6 @@
 
       Si cette règle n'est pas définie, les utilisateurs peuvent manipuler toute la liste des langues préférées.</translation>
 <translation id="1803646570632580723">Liste des applications épinglées à afficher dans le lanceur d'applications</translation>
-<translation id="1805056271257244521">Si cette règle est activée, les fonctions JavaScript setTimeout() dont le délai d'expiration est défini sur 0 ms ne seront pas ramenées à 1 ms.
-          Si cette règle est activée, les fonctions JavaScript setTimeout() dont le délai d'expiration est défini sur 0 ms seront ramenées à 1 ms.
-          Si cette règle n'est pas configurée, le comportement par défaut du navigateur est appliqué pour l'écrêtage de la fonction setTimeout().
-
-          Bien que conforme aux normes Web, cette fonctionnalité peut modifier l'ordre d'exécution des tâches sur une page et provoquer un comportement inattendu sur les sites qui dépendent de cet ordre. Les sites qui emploient de nombreuses fonctions setTimeout() avec un délai d'expiration de 0 ms peuvent également être affectés (par exemple, ils peuvent davantage solliciter le processeur).
-
-          Le changement sera déployé graduellement sur la version stable de Chrome pour les utilisateurs chez qui cette règle n'est pas configurée.
-
-          Cette règle est temporaire et devrait être supprimée dans Chrome 105. Néanmoins, cette échéance peut être repoussée si des entreprises le requièrent.
-          </translation>
 <translation id="1808715480127969042">Bloquer les cookies sur ces sites</translation>
 <translation id="1810261428246410396">Autoriser le partage de connexion instantané</translation>
 <translation id="1813638828646876133">Activer l'envoi automatique du code PIN sur l'écran de connexion et de verrouillage</translation>
@@ -2363,6 +2349,17 @@
 
       Si cette règle n'est pas configurée, <ph name="PRODUCT_NAME" /> charge tous les hôtes de messagerie native qui sont installés.</translation>
 <translation id="3211426942294667684">Paramètres de connexion au navigateur</translation>
+<translation id="3217774577897351942">L'API <ph name="OFFSET_PARENT" /> est modifiée dans <ph name="PRODUCT_NAME" /> afin de respecter les modifications apportées dans <ph name="FIREFOX_PRODUCT_NAME" /> et <ph name="SAFARI_PRODUCT_NAME" />. Cette règle rétablit l'ancien comportement jusqu'à M120.
+
+Le nouveau comportement risque de d'endommager certains sites Web propres à <ph name="PRODUCT_NAME" /> qui utilisent <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> ou <ph name="OFFSET_LEFT" /> avec Shadow DOM.
+
+Voici quelques polyfills qui rétablissent l'ancien comportement pour faciliter la migration : https://github.com/josepharhar/offsetparent-polyfills
+
+Si cette règle est activée, le nouveau comportement sera utilisé.
+
+Si elle est désactivée, l'ancien comportement sera utilisé.
+
+Si cette règle n'est pas configurée, le nouveau comportement sera utilisé tout comme le reste des utilisateurs de Chromium.</translation>
 <translation id="3219421230122020860">Mode navigation privée disponible</translation>
 <translation id="3220624000494482595">Si l'application kiosque est une application Android, elle ne contrôlera pas la version <ph name="PRODUCT_OS_NAME" /> même si cette règle est définie sur "<ph name="TRUE" />".</translation>
 <translation id="3222088741899353813">Le bouton de gauche est le bouton principal sur l'écran de connexion</translation>
@@ -2765,6 +2762,7 @@
 <translation id="3589193811812796052">Empêcher l'envoi des modules WebAssembly en multi-origine</translation>
 <translation id="3591527072193107424">Activer la fonctionnalité Legacy Browser Support.</translation>
 <translation id="3591584750136265240">Configurer le mode d'authentification lors de la connexion</translation>
+<translation id="3593905652755912452">L'ancien comportement d'envoi des événements sur les commandes de formulaire désactivées sera utilisé.</translation>
 <translation id="3596112486106491038">Activer l'accès par ligne de commande aux machines virtuelles</translation>
 <translation id="3603469950773500315">Permet d'atténuer les contrôles <ph name="CORS" /> dans la nouvelle mise en œuvre de <ph name="CORS" />. Les extensions peuvent ainsi conserver un comportement compatible, et <ph name="PRODUCT_NAME" /> peut envoyer les en-têtes spécifiés sans contrôles <ph name="CORS" />.
 
@@ -3064,6 +3062,7 @@
 <translation id="3891357445869647828">Activer JavaScript</translation>
 <translation id="3891769546914233112">Possibilité d'imprimer le PDF en tant qu'image</translation>
 <translation id="3897218615484393758">Limiter la durée pendant laquelle un utilisateur authentifié via SAML peut se connecter hors connexion sur l'écran de verrouillage</translation>
+<translation id="3897860452756794695">Le nouveau comportement offsetParent sera utilisé.</translation>
 <translation id="3898345958122666461">Désactiver NTLMv2</translation>
 <translation id="3898795800259311780">Autoriser ou interdire la capture d'écran</translation>
 <translation id="3903313632842363082">Désactiver les rapports sur les utilisateurs de l'appareil</translation>
@@ -4845,6 +4844,7 @@
 
       Les utilisateurs ne peuvent pas modifier ce paramètre.</translation>
 <translation id="5838452040629810808">Activer la mise en surbrillance du curseur</translation>
+<translation id="5842283830553218200">Le nouveau comportement d'envoi des événements sur les commandes de formulaire désactivées sera utilisé par défaut.</translation>
 <translation id="5848438019586925019">Algorithme pour la génération de paires de clés.</translation>
 <translation id="5851248808417680865">Utiliser le thème sombre</translation>
 <translation id="585270638818921943">Empêche l'utilisateur de se servir d'applications Android provenant de sources non approuvées</translation>
@@ -5325,6 +5325,7 @@
       Si cette règle est désactivée ou n'est pas configurée, les utilisateurs peuvent décider d'utiliser ou non <ph name="CHROME_SYNC_NAME" />.
 
       Remarque : Cette règle ne doit pas être activée si la règle <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> l'est également, car elles partagent la même fonctionnalité côté client. Dans ce cas, le service de synchronisation hébergé par Google est totalement désactivé.</translation>
+<translation id="6320935916601887506">Le nouveau comportement offsetParent sera utilisé par défaut.</translation>
 <translation id="6327643515544933974">Paramètres USB Web</translation>
 <translation id="6330882599388782338">Autoriser les sites à accéder aux capteurs</translation>
 <translation id="6331167725613770725">Cette règle étant obsolète, elle sera supprimée dans la version 85 de <ph name="PRODUCT_OS_NAME" />. (Veuillez utiliser la règle <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.)
@@ -5461,6 +5462,7 @@
 <translation id="6464074037294098618">Activer la saisie automatique pour les adresses</translation>
 <translation id="6467613372414922590">Autoriser les hôtes de messagerie natifs au niveau de l'utilisateur (installés sans l'autorisation d'un administrateur)</translation>
 <translation id="6473623140202114570">Configurez la liste des domaines sur lesquels la navigation sécurisée ne déclenchera aucun avertissement.</translation>
+<translation id="6474194795370862403">L'ancien comportement offsetParent sera utilisé.</translation>
 <translation id="647645276885673708">Activer <ph name="LACROS_NAME" /> et en faire le navigateur principal</translation>
 <translation id="647698599569353771">Autorisez l'activation du Partage à proximité.</translation>
 <translation id="6477685422297715670">Rétroéclairage du clavier vert</translation>
@@ -6054,7 +6056,6 @@
       Si vous sélectionnez "U2F", le deuxième facteur intégré se comporte conformément à la norme FIDO U2F.
 
       Si vous sélectionnez "U2F_EXTENDED", le deuxième facteur intégré fournit les fonctionnalités U2F ainsi que certaines extensions pour chaque attestation.</translation>
-<translation id="6998179760789945134">Désactiver WebSQL dans les contextes non sécurisés, sauf activation par l'indicateur Chrome.</translation>
 <translation id="6999948519306285655">Cette règle étant obsolète, veuillez utiliser la règle <ph name="PROXY_SETTINGS_POLICY_NAME" /> à la place.
 
        Elle permet de définir l'URL d'un fichier .pac proxy. Elle ne s'applique que si la règle <ph name="PROXY_SETTINGS_POLICY_NAME" /> n'est pas spécifiée et si vous avez sélectionné l'option <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> dans la règle <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -7462,6 +7463,7 @@
 <translation id="8417305981081876834">Définir le nombre maximal de caractères pour le code de l'écran de verrouillage</translation>
 <translation id="841977920223099909">Déclencheur d'avertissement de protection par mot de passe</translation>
 <translation id="8420426128163801949">Autoriser les utilisateurs à activer ou désactiver le Bluetooth</translation>
+<translation id="8422658829373743789">Contrôler le nouveau comportement d'envoi des événements sur les commandes de formulaire désactivées</translation>
 <translation id="8422866312638683210">Si cette règle est configurée, <ph name="PRODUCT_NAME" /> tente de s'inscrire à la <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. Elle a pour valeur un jeton d'inscription que vous pouvez récupérer dans la <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.
 
       Pour en savoir plus, consultez la page https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744.</translation>
@@ -8000,6 +8002,19 @@
 <translation id="8947415621777543415">Indiquer l'emplacement de l'appareil</translation>
 <translation id="8948062138228904066">Liste d'autorisation des serveurs d'authentification</translation>
 <translation id="8951350807133946005">Définir le répertoire du cache disque</translation>
+<translation id="8952611478149810182">L'envoi des événements sur les commandes de formulaire désactivées est modifié dans Chromium afin d'améliorer l'expérience développeur et la compatibilité avec les autres navigateurs.
+
+Désormais, les événements MouseEvents sont envoyés sur les éléments de commandes de formulaire désactivées, sauf pour les "click", "mouseup" et "mousedown". Les nouveaux événements incluent, entre autres, "mousemove", "mouseenter" et "mouseleave".
+
+Cette modification tronque également le chemin d'accès aux événements "click", "mouseup" et "mousedown" lorsqu'ils sont envoyés sur des enfants de commandes de formulaire désactivées, de sorte qu'ils ne soient pas envoyés sur la commande de formulaire désactivée ni sur aucun de ses ancêtres.
+
+Le nouveau comportement risque d'endommager certains sites Web.
+
+Si cette règle est activée, le nouveau comportement sera utilisé.
+
+Si elle est désactivée, l'ancien comportement sera utilisé.
+
+Si cette règle n'est pas configurée, le nouveau comportement sera utilisé tout comme le reste des utilisateurs de Chromium.</translation>
 <translation id="8955719471735800169">Haut de page</translation>
 <translation id="8956312248048980644">Autorise par défaut le clustering d'agents selon l'origine.</translation>
 <translation id="8970205333161758602">Supprimer l'invite de fermeture de <ph name="PRODUCT_FRAME_NAME" /></translation>
@@ -8109,9 +8124,6 @@
       Si cette règle n'est pas définie, la sélection automatique n'est effectuée pour aucun site.
 
       Pour en savoir plus sur les formats d'URL valides, veuillez consulter cette page : https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">WebSQL dans les contextes non sécurisés est activé par défaut à partir de M105, mais peut être désactivé via l'indicateur Chrome.
-          Si cette règle est définie sur "False" ou n'est pas configurée, WebSQL dans les contextes non sécurisés peut être désactivé.
-          Si cette règle est définie sur "True", WebSQL ne peut pas être désactivé.</translation>
 <translation id="9068629430243705879">port 6566 (peut être débloqué jusqu'au 15/10/2021)</translation>
 <translation id="9069588907259547232">Si cette règle est activée ou qu'elle n'est pas configurée, les appareils enregistrés signalent leur volume audio.
 
@@ -8185,6 +8197,7 @@
 <translation id="9135033364005346124">Activer le proxy <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Désactiver l'interface utilisateur de la bulle de téléchargement</translation>
 <translation id="9136399279941091445">Intervalles pendant lesquels les règles spécifiées pour les appareils sont disponibles (lorsque l'appareil est éteint)</translation>
+<translation id="9142561920976791097">Le nouveau comportement d'envoi des événements sur les commandes de formulaire désactivées sera utilisé.</translation>
 <translation id="9148720248753722892">Interdire les certificats signés SHA-1</translation>
 <translation id="9149678135092892302">Désactiver les rapports sur les informations liées à la version</translation>
 <translation id="9150416707757015439">Cette règle est obsolète. Veuillez utiliser la règle "IncognitoModeAvailability". 
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index e40c474..767219bb 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -450,11 +450,6 @@
       Printer ekstensi juga disebut sebagai tujuan penyedia cetak, dan menyertakan semua tujuan yang termasuk dalam ekstensi <ph name="PRODUCT_NAME" />.
 
       Printer lokal juga disebut sebagai tujuan cetak native, dan menyertakan tujuan yang tersedia untuk mesin lokal dan printer jaringan bersama.</translation>
-<translation id="1456449214426764016">API non-standar window.webkitStorageInfo tidak digunakan lagi dan akan dihapus.
-      Kebijakan ini akan mengaktifkan kembali API tersebut.
-      Jika kebijakan ini disetel ke Aktif, window.webkitStorageInfo API akan tersedia.
-      Jika kebijakan ini disetel ke Nonaktif atau tidak disetel, window.webkitStorageInfo API tidak akan tersedia.
-      </translation>
 <translation id="1456822151187621582">Windows (klien <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">Mengontrol perilaku pengguna di sesi multi profil di perangkat <ph name="PRODUCT_OS_NAME" />.
 
@@ -825,19 +820,6 @@
 
       Jika kebijakan tidak disetel, pengguna akan dapat memanipulasi seluruh daftar bahasa pilihan.</translation>
 <translation id="1803646570632580723">Daftar aplikasi tersemat untuk ditampilkan pada peluncur</translation>
-<translation id="1805056271257244521">Jika kebijakan disetel ke Aktif, fungsi setTimeout() JavaScript dengan waktu tunggu 0 md tidak akan dibulatkan ke 1 md.
-          Jika kebijakan disetel ke Nonaktif, fungsi setTimeout() JavaScript dengan waktu tunggu 0 md akan dibulatkan ke 1 md.
-          Jika kebijakan tidak disetel, perilaku default browser akan digunakan untuk penundaan minimum fungsi setTimeout().
-
-          Ini merupakan fitur kepatuhan standar web, tetapi dapat mengubah urutan tugas
-          di suatu halaman web, yang menyebabkan perilaku tak terduga di situs yang bergantung pada
-          urutan tertentu dengan cara tertentu pula. Kebijakan ini juga dapat memengaruhi situs yang menggunakan banyak setTimeout()
-          dengan waktu tunggu 0 md, misalnya penambahan beban CPU.
-
-          Bagi pengguna yang tidak menyetel kebijakan ini, Chrome akan meluncurkan perubahan secara bertahap pada saluran Stabil.
-
-          Kebijakan ini bersifat sementara dan akan dihapus di Chrome 105. Batas waktu ini dapat diperpanjang jika diperlukan di antara perusahaan.
-          </translation>
 <translation id="1808715480127969042">Cekal cookie di situs ini</translation>
 <translation id="1810261428246410396">Izinkan Tethering Instan untuk digunakan.</translation>
 <translation id="1813638828646876133">Aktifkan pengiriman otomatis PIN di layar kunci dan layar login</translation>
@@ -4164,6 +4146,7 @@
 <translation id="5025239932007658691">Jika kebijakan disetel ke Aktif atau tidak disetel, <ph name="PRODUCT_NAME" /> akan sesekali mengirimkan kueri ke server Google untuk mengambil stempel waktu yang akurat.
 
       Jika kebijakan disetel ke Nonaktif, <ph name="PRODUCT_NAME" /> akan berhenti mengirimkan kueri tersebut.</translation>
+<translation id="5033070732967197381">Izinkan permintaan WebAuthn API di situs dengan sertifikat TLS yang rusak.</translation>
 <translation id="5034504101537897433">Aktifkan pelaporan informasi laporan kerusakan perangkat</translation>
 <translation id="5039110755072335605">Dukungan header permintaan non-karakter pengganti CORS</translation>
 <translation id="504116558738617678">Hanya tampilkan peringatan ruang penyimpanan hampir penuh jika perangkat tidak dikelola atau hanya terdapat 1 pengguna</translation>
@@ -5737,6 +5720,7 @@
       - Jika kebijakan ini Dinonaktifkan, admin harus memberitahukan hal ini kepada pengguna akhir perangkat.</translation>
 <translation id="6609867253856597039">Menyetel pengalaman pengguna fitur yang dinonaktifkan</translation>
 <translation id="6614557704487944013">Izinkan pengguna menggunakan browser <ph name="LACROS_NAME" /></translation>
+<translation id="661610294649586421">Jangan izinkan permintaan WebAuthn API di situs dengan sertifikat TLS yang rusak.</translation>
 <translation id="6617589895942747919">Waktu mulai interval, inklusif.</translation>
 <translation id="6621830999036927230">Jika kebijakan disetel, host akses jarak jauh akan menggunakan URL ini untuk memvalidasi token autentikasi dari klien akses jarak jauh agar dapat menerima koneksi. Jika kebijakan tidak disetel atau disetel ke kosong, fitur ini akan dinonaktifkan.
 
@@ -6039,6 +6023,12 @@
 <translation id="6907778402784621686">Blokir konten tidak aman di situs ini</translation>
 <translation id="6908640907898649429">Mengonfigurasi penyedia penelusuran default. Anda dapat menentukan penyedia penelusuran default yang akan digunakan pengguna atau memilih menonaktifkan penelusuran default.</translation>
 <translation id="6913068954484253496">Izinkan <ph name="PRODUCT_NAME" /> untuk terhubung ke perangkat Cast di semua alamat IP.</translation>
+<translation id="6915493311660114995">Jika kebijakan disetel ke Aktif, <ph name="PRODUCT_NAME" /> akan
+mengizinkan permintaan Autentikasi Web di situs yang memiliki sertifikat TLS yang mengalami
+error (yaitu, situs yang dianggap tidak aman).
+
+Jika kebijakan disetel ke Nonaktif atau tidak disetel, perilaku default
+pemblokiran permintaan semacam itu akan diterapkan.</translation>
 <translation id="6919819553978815392">Jika kebijakan ini disetel ke benar (true) atau tidak dikonfigurasi, <ph name="PRODUCT_NAME" /> dan <ph name="LACROS_NAME" /> akan mengaktifkan login tamu. Login tamu adalah profil <ph name="PRODUCT_NAME" /> saat semua jendela berada dalam mode Samaran.
 
       Jika kebijakan ini disetel ke salah (false), <ph name="PRODUCT_NAME" /> dan <ph name="LACROS_NAME" /> tidak akan mengizinkan profil tamu dimulai.
@@ -6144,7 +6134,6 @@
       Jika 'U2F' dipilih, faktor kedua yang diintegrasikan akan melakukan proses sesuai spesifikasi FIDO U2F.
 
       Jika 'U2F_EXTENDED' dipilih, faktor kedua yang diintegrasikan akan memberikan fungsi U2F, ditambah beberapa ekstensi untuk masing-masing pengesahan.</translation>
-<translation id="6998179760789945134">Nonaktifkan WebSQL di konteks tidak aman kecuali jika diaktifkan oleh tanda Chrome.</translation>
 <translation id="6999948519306285655">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        Menyetel kebijakan memungkinkan Anda menentukan URL untuk file .pac proxy. Kebijakan ini hanya berlaku jika kebijakan <ph name="PROXY_SETTINGS_POLICY_NAME" /> tidak ditentukan dan Anda memilih <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> dengan <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -6953,6 +6942,7 @@
 <translation id="782661371433719637">Jangan izinkan situs apa pun meminta akses baca ke file dan direktori melalui File System API</translation>
 <translation id="7827127381981620448">Aplikasi platform</translation>
 <translation id="7829436838673974723">Izinkan halaman mengirim permintaan XHR sinkron selama penutupan halaman</translation>
+<translation id="782978857350824974">Mengizinkan permintaan Autentikasi Web di situs dengan sertifikat TLS yang rusak.</translation>
 <translation id="7832225468415136704">Cegah Pembersih Chrome memindai sistem secara berkala dan nonaktifkan pemindaian manual</translation>
 <translation id="7833148823006528332">ID aplikasi Android, mis. "com.google.android.gm" untuk Gmail.</translation>
 <translation id="7835218570504220753">Nonaktifkan klik otomatis</translation>
@@ -7342,6 +7332,7 @@
 <translation id="8250048892729838843">Kebijakan ini tidak digunakan lagi. Jika kebijakan disetel ke Aktif atau tidak disetel, perangkat akan diizinkan menerima kontrol pelaporan terperinci.
       Jika kebijakan disetel ke Nonaktif, perangkat terdaftar tidak akan menerima kontrol pelaporan terperinci.</translation>
 <translation id="82530263956734297">ID Ekstensi yang dikeluarkan dari daftar yang tidak diizinkan</translation>
+<translation id="8256006033157034334">Kebijakan ini tidak digunakan lagi dan tidak didukung. Sebagai gantinya, gunakan <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation>
 <translation id="8256688113167012935">Mengontrol nama akun yang ditampilkan <ph name="PRODUCT_OS_NAME" /> di layar masuk untuk akun lokal perangkat yang sesuai.
 
       Jika kebijakan ini disetel, layar masuk akan menggunakan string yang ditentukan dalam pemilih masuk berdasarkan gambar untuk akun lokal perangkat yang sesuai.
@@ -8218,9 +8209,6 @@
       Jika kebijakan ini tidak disetel, pemilihan otomatis tidak akan dilakukan untuk situs apa pun.
 
       Untuk informasi mendetail tentang pola URL yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">WebSQL di konteks yang tidak aman aktif secara default mulai M105, tetapi dapat dinonaktifkan melalui tanda Chrome.
-          Jika kebijakan ini disetel ke salah (false) atau tidak disetel, WebSQL di konteks yang tidak aman dapat dinonaktifkan.
-          Jika kebijakan ini disetel ke benar (true), WebSQL tidak dapat dinonaktifkan.</translation>
 <translation id="9068629430243705879">port 6566 (blokir dapat dibatalkan hingga 15/10/2021)</translation>
 <translation id="9069588907259547232">Jika kebijakan disetel ke Aktif atau tidak disetel, perangkat terdaftar akan melaporkan volume audio perangkat.
 
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 2107da5..f8ea302 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -449,11 +449,6 @@
       Le stampanti estensione sono note anche come destinazioni dei provider di stampa e includono le eventuali destinazioni appartenenti a un'estensione di <ph name="PRODUCT_NAME" />.
 
       Le stampanti locali sono note anche come destinazioni di stampa native e includono le destinazioni disponibili per le stampanti di macchine locali e quelle di rete condivise.</translation>
-<translation id="1456449214426764016">L'API non standard window.webkitStorageInfo è deprecata e verrà rimossa.
-      Questo criterio consente di riattivare l'API.
-      Se questo criterio viene impostato su Enabled, l'API window.webkitStorageInfo sarà disponibile.
-      Se questo criterio viene impostato su Disabled o se non viene configurato, l'API window.webkitStorageInfo non sarà disponibile.
-      </translation>
 <translation id="1456822151187621582">Windows (client <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">Consente di controllare il comportamento degli utenti in una sessione multiprofilo su dispositivi <ph name="PRODUCT_OS_NAME" />.
 
@@ -820,19 +815,6 @@
 
       Se il criterio non viene configurato, gli utenti possono modificare l'intero elenco di lingue preferite.</translation>
 <translation id="1803646570632580723">Elenco di applicazioni bloccate da visualizzare in Avvio applicazioni</translation>
-<translation id="1805056271257244521">Se il criterio è impostato su Attivo, la funzione JavaScript setTimeout() con un timeout di 0 ms non verrà regolata su 1 ms.
-          Se il criterio è impostato su Disattivato, la funzione JavaScript setTimeout() con un timeout di 0 ms verrà impostata su 1 ms.
-          Se il criterio non è stato impostato, usa il comportamento predefinito del browser per l'impostazione della funzione setTimeout().
-
-          Si tratta di una funzionalità conforme agli standard web, ma potrebbe modificare l'ordine delle attività
-          su una pagina web, causando comportamenti imprevisti sui siti che dipendono
-          in qualche misura da un ordine specifico. Potrebbe anche incidere sui siti che utilizzano spesso la funzione setTimeout()
-          con timeout di 0 ms, ad esempio causando un aumento del carico CPU.
-
-          Per gli utenti per i quali il criterio non è stato impostato, Chrome renderà disponibile gradualmente la modifica sul canale stabile.
-
-          Si tratta di un criterio temporaneo di cui è prevista la rimozione nella versione Chrome 105. Questo termine potrebbe essere esteso nel caso in cui le aziende dovessero averne bisogno.
-          </translation>
 <translation id="1808715480127969042">Blocca cookie su questi siti</translation>
 <translation id="1810261428246410396">Consenti l'uso del tethering istantaneo.</translation>
 <translation id="1813638828646876133">Attiva l'invio automatico del PIN nella schermata di blocco e accesso</translation>
@@ -6057,7 +6039,6 @@
       Se selezioni l'opzione "U2F", il funzionamento dell'autenticazione a due fattori integrata dipenderà dalla specifica FIDO U2F.
 
       Se selezioni l'opzione "U2F_EXTENDED", l'autenticazione a due fattori integrata fornirà le funzioni U2F più alcune estensioni per la singola attestazione.</translation>
-<translation id="6998179760789945134">Disattiva WebSQL in contesti non sicuri, a meno che non venga attivato dal flag di Chrome.</translation>
 <translation id="6999948519306285655">Questo criterio è deprecato. Usa il criterio <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        La configurazione del criterio consente di specificare un URL a un file proxy .pac. Questo criterio viene applicato solo se il criterio <ph name="PROXY_SETTINGS_POLICY_NAME" /> non è specificato e hai selezionato <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> con <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -8120,9 +8101,6 @@
       Se questo criterio non è impostato, la selezione automatica non avviene per nessun sito.
 
       Per informazioni dettagliate sui pattern URL validi, visita la pagina https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">WebSQL in contesti non sicuri è attivo per impostazione predefinita a partire da M105, ma può essere disattivato tramite il flag di Chrome.
-          Se questo criterio viene impostato su false o se non viene configurato, WebSQL in contesti non sicuri può essere disattivato.
-          Se viene impostato su true, WebSQL non può essere disattivato.</translation>
 <translation id="9068629430243705879">porta 6566 (può essere sbloccata fino al 15/10/2021)</translation>
 <translation id="9069588907259547232">Se il criterio viene impostato su Attivato o se non viene configurato, i dispositivi registrati segnalano il relativo volume dell'audio.
 
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 0f5cd6d4..59ab63ed 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -435,11 +435,6 @@
       拡張機能プリンタは、印刷プロバイダの送信先のことで、<ph name="PRODUCT_NAME" /> の拡張機能で利用できる送信先が該当します。
 
       ローカル プリンタは、ネイティブ印刷の送信先のことで、ローカルマシンや共有ネットワークのプリンタで利用できる送信先が該当します。</translation>
-<translation id="1456449214426764016">標準以外の API window.webkitStorageInfo は非推奨で、削除される予定です。
-      このポリシーでは、API を再度有効にします。
-      このポリシーを [有効] に設定した場合、window.webkitStorageInfo API が使用可能になります。
-      このポリシーを [無効] に設定するか未設定のままにした場合、window.webkitStorageInfo API は使用できなくなります。
-      </translation>
 <translation id="1456822151187621582">Windows(<ph name="PRODUCT_OS_NAME" /> クライアント):</translation>
 <translation id="1464848559468748897"><ph name="PRODUCT_OS_NAME" /> デバイス上のマルチプロフィール セッションでのユーザーの行動を制御します。
 
@@ -797,16 +792,6 @@
 <translation id="1798559516913615713">GPO のキャッシュ期間</translation>
 <translation id="180130467244315277">このポリシーでは、管理者が <ph name="PRODUCT_NAME" /> の設定で使用言語の順序を設定できるようにします。リストの順序は、chrome://settings/languages の [言語を希望の順序に並べ替えます] の順序と同じになります。ユーザーは、ポリシーで設定された言語を削除したり、並べ替えたりできませんが、ポリシーで設定された言語の下に言語を追加することができます。また、他のポリシーで強制されていない限り、ユーザーはブラウザの UI の言語と翻訳やスペルチェックの設定を自由に管理できます。このポリシーを未設定のままにした場合、ユーザーは使用言語のリスト全体を操作できます。</translation>
 <translation id="1803646570632580723">ランチャーに表示する固定アプリのリスト</translation>
-<translation id="1805056271257244521">このポリシーを有効に設定した場合、タイムアウトを 0 ミリ秒に設定した JavaScript setTimeout() に 1 ミリ秒のタイムアウトは含められません。
-          このポリシーを無効に設定した場合、タイムアウトを 0 ミリ秒に設定した JavaScript setTimeout() に 1 ミリ秒のタイムアウトが含められます。
-          このポリシーを未設定のままにした場合、setTimeout() 関数のタイムアウト処理にブラウザのデフォルトの動作を使用します。
-
-          これはウェブ標準に準拠した機能ですが、ウェブページによってはタスクの実行順序が変更され、特定の実行順序でのみ機能するサイトでは予期しない動作が発生することがあります。また、タイムアウトを 0 ミリ秒に設定した setTimeout() が多く使用されているサイトでも影響が生じる可能性があります(CPU の負荷が増加するなど)。
-
-          このポリシーを未設定のままにした場合、Chorme の Stable チャンネルで段階的に変更が適用されます。
-
-          これは、Chrome 105 で削除が計画されている一時的なポリシーです。企業からのニーズがある場合、この期限は延長される可能性があります。
-          </translation>
 <translation id="1808715480127969042">これらのサイトの Cookie をブロックする</translation>
 <translation id="1810261428246410396">インスタント テザリングの使用を許可する</translation>
 <translation id="1813638828646876133">ロック画面とログイン画面で PIN の自動送信を有効にする</translation>
@@ -5776,7 +5761,6 @@
       [U2F] を選択した場合は、統合 2 段階認証プロセスが FIDO U2F 仕様に沿って適用されます。
 
       [U2F_EXTENDED] を選択した場合は、統合 2 段階認証プロセスで U2F の機能と個人認証用の拡張機能を使用できます。</translation>
-<translation id="6998179760789945134">Chrome フラグで有効になっていない限り、セキュアでないコンテキストでの WebSQL を無効にする</translation>
 <translation id="6999948519306285655">このポリシーはサポートが終了しています。代わりに <ph name="PROXY_SETTINGS_POLICY_NAME" /> を使用してください。
 
        このポリシーでは、プロキシ .pac ファイルへの URL を指定できます。このポリシーは、<ph name="PROXY_SETTINGS_POLICY_NAME" /> ポリシーを指定せずに、<ph name="PROXY_MODE_POLICY_NAME" /> で <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> を選択した場合のみ適用されます。
@@ -6896,6 +6880,7 @@
 <translation id="824818544897669723">ブラウザとダウンロードの履歴の削除を無効にする</translation>
 <translation id="8250048892729838843">このポリシーはサポートを終了しました。このポリシーを有効に設定するか未設定のままにした場合、デバイスで詳細なレポート コントロールを受けることができます。このポリシーを無効に設定した場合、登録済みデバイスは詳細なレポート コントロールを受けません。</translation>
 <translation id="82530263956734297">拒否リストから除外する拡張機能 ID</translation>
+<translation id="8256006033157034334">このポリシーは非推奨で、サポートされていません。代わりに <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" /> を使用してください。</translation>
 <translation id="8256688113167012935">対応するデバイスのローカル アカウントに対し、ログイン画面でアカウント名 <ph name="PRODUCT_OS_NAME" /> を表示するかどうかを指定します。
 
       このポリシーが設定されている場合、対応するデバイスのローカル アカウントに対し、ログイン画面では画像ベースのログイン選択ツール内で指定の文字列が使用されます。
@@ -7746,9 +7731,6 @@
       このポリシーを設定しない場合、どのサイトに対しても自動選択は行われません。
 
       有効な URL パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。</translation>
-<translation id="906349948439898016">セキュアでないコンテキストでの WebSQL は、M105 ではデフォルトで有効になっていますが、Chrome フラグで無効にできます。
-          このポリシーを False に設定するか未設定のままにした場合、セキュアでないコンテキストでの WebSQL を無効にできます。
-          このポリシーを True に設定した場合、WebSQL を無効にすることはできません。</translation>
 <translation id="9068629430243705879">ポート 6566(ブロックの解除は 2021 年 10 月 15 日まで可能)</translation>
 <translation id="9069588907259547232">このポリシーを有効に設定するか未設定のままにした場合、登録済みのデバイスはデバイスの音量を報告します。
 
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index d98840aa..44047c61 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -449,11 +449,6 @@
       확장 프로그램 프린터는 인쇄 제공업체 대상이라고도 하며, <ph name="PRODUCT_NAME" /> 확장 프로그램에 속한 모든 대상을 포함합니다.
 
       로컬 프린터는 기본 인쇄 대상이라고도 하며, 로컬 컴퓨터에서 사용 가능한 인쇄 대상과 공유 네트워크 프린터를 포함합니다.</translation>
-<translation id="1456449214426764016">비표준 API window.mydomainStorageInfo는 지원 중단되었으며 삭제될 예정입니다.
-      이 정책은 해당 API를 다시 사용 설정합니다.
-      정책을 사용으로 설정하면 window.mydomainStorageInfo API를 사용할 수 있습니다.
-      정책을 사용 안함으로 설정하거나 설정하지 않으면 window.mydomainStorageInfo API를 사용할 수 없습니다.
-      </translation>
 <translation id="1456822151187621582">Windows(<ph name="PRODUCT_OS_NAME" /> 클라이언트):</translation>
 <translation id="1464848559468748897"><ph name="PRODUCT_OS_NAME" /> 기기에서 멀티프로필 세션의 사용자 동작을 제어합니다.
 
@@ -824,18 +819,6 @@
 
       정책을 설정하지 않으면 사용자가 기본 언어의 전체 목록을 변경할 수 있습니다.</translation>
 <translation id="1803646570632580723">런처에 표시되는 고정된 앱 목록</translation>
-<translation id="1805056271257244521">정책을 사용으로 설정하면 시간 초과가 0ms인 자바스크립트 setTimeout()이 1ms로 클램프되지 않습니다.
-          정책을 사용 안함으로 설정하면 시간 초과가 0ms인 자바스크립트 setTimeout()이 1ms로 클램프됩니다.
-          정책을 설정하지 않으면 setTimeout() 함수의 클램프 동작에 브라우저 기본값이 적용됩니다.
-
-          이는 웹 표준 호환 기능이지만 웹페이지에서 작업 순서를 변경할 수 있기 때문에
-          특정 순서에 의존하는 사이트에서 예기치 못한 동작을 일으킬 가능성이
-          있습니다. 또한 시간 초과가 0ms인 setTimeout()이 많은 경우 사이트에서 CPU 부하 증가 등의 문제가 발생할 수 있습니다.
-
-          이 정책을 설정하지 않은 사용자의 경우 Chrome은 공개 버전 채널에서 점진적으로 변경사항을 출시할 예정입니다.
-
-          이는 임시 정책으로 Chrome 105에서 삭제됩니다. 기업에 필요한 경우 기한이 연장될 수 있습니다.
-          </translation>
 <translation id="1808715480127969042">이 사이트에서 쿠키 차단</translation>
 <translation id="1810261428246410396">인스턴트 테더링 사용 허용</translation>
 <translation id="1813638828646876133">잠금 및 로그인 화면에서 PIN 자동 제출 사용 설정</translation>
@@ -3064,6 +3047,13 @@
 
       정책을 2로 설정하면 사이트에서 방해가 되는 광고를 차단합니다.</translation>
 <translation id="3877517141460819966">통합된 2단계 인증 모드</translation>
+<translation id="3877908683993837673">이 정책은 운영 체제 DNS 서버나 <ph name="PRODUCT_NAME" />의 내장 DNS 클라이언트와 같이 DNS 서버와의 통신에 사용되는 소프트웨어 스택을 제어합니다. 이 정책은 사용되는 DNS 서버에 영향을 미치지 않습니다. 예를 들어 엔터프라이즈 DNS 서버를 사용하도록 운영 체제가 구성된 경우 내장 DNS 클라이언트에도 동일한 서버가 사용됩니다. DNS-over-HTTPS가 사용되는 경우에도 영향을 미치지 않습니다. <ph name="PRODUCT_NAME" />에서는 항상 DNS-over-HTTPS 요청에 관한 내장 리졸버를 사용합니다. DNS-over-HTTPS 제어에 관한 자세한 내용은 <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> 정책을 참고하세요.
+
+      정책을 사용 설정하면 가능한 경우 내장 DNS 클라이언트를 사용합니다.
+
+      정책을 사용 중지하면 DNS-over-HTTPS가 사용 중인 경우에만 내장 DNS 클라이언트가 사용됩니다.
+
+      정책을 설정하지 않으면 내장 DNS 클라이언트가 <ph name="MS_WIN_NAME" />, <ph name="MAC_OS_NAME" />, <ph name="ANDROID_NAME" />(비공개 DNS와 VPN이 사용 설정되지 않은 경우) 및 <ph name="PRODUCT_OS_NAME" />에서 기본으로 사용 설정됩니다.</translation>
 <translation id="3879208481373875102">강제로 설치된 웹 앱 목록 구성</translation>
 <translation id="3879700444818346084">처음 실행 시 저장된 비밀번호 가져오기 사용 중지</translation>
 <translation id="388237772682176890">SPDY/3.1 지원이 삭제되어 이 정책은 M53에서 지원 중단되고 M54에서 삭제되었습니다.
@@ -4137,6 +4127,7 @@
 <translation id="5025239932007658691">정책을 사용 설정하거나 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 정확한 타임스탬프를 가져오기 위해 Google 서버에 비정기적으로 쿼리를 전송합니다.
 
       정책을 사용 중지하면 <ph name="PRODUCT_NAME" />에서 쿼리를 전송하지 않습니다.</translation>
+<translation id="5033070732967197381">손상된 TLS 인증서가 있는 사이트의 WebAuthn API 요청을 허용합니다.</translation>
 <translation id="5034504101537897433">기기 비정상 종료 정보 보고 사용 설정</translation>
 <translation id="5039110755072335605">와일드카드가 아닌 CORS 요청 헤더 지원</translation>
 <translation id="504116558738617678">기기가 관리되지 않거나 사용자가 1명만 있는 경우에만 디스크 공간 부족 경고 표시</translation>
@@ -5610,6 +5601,7 @@
       참고: 현재 자동 재부팅은 로그인 화면이 표시되어 있거나 키오스크 앱 세션이 진행 중일 때만 사용 설정됩니다.</translation>
 <translation id="6556586932263358975">화면 잠금 허용</translation>
 <translation id="6559057113164934677">카메라 및 마이크에 대한 모든 사이트의 액세스 허용 안함</translation>
+<translation id="65591220958874949">Windows, macOS, Android, ChromeOS에서 내장 DNS 클라이언트 사용</translation>
 <translation id="6559221564468029245">정책을 사용 설정하거나 설정하지 않으면 오디오 재생 중에는 사용자를 유휴 상태로 간주하지 않습니다. 따라서 유휴 제한 시간에 도달하지 않고 유휴 작업이 실행되지 않습니다. 하지만 설정된 시간 제한 후에는 오디오 활동과 관계없이 화면 어둡게 하기, 화면 꺼짐, 화면 잠금이 실행됩니다.
 
       정책을 사용 중지하면 시스템에서 오디오 활동과 관계없이 사용자를 유휴 상태로 간주할 수 있습니다.</translation>
@@ -5697,6 +5689,7 @@
       - 정책을 사용 안함으로 설정하면 관리자가 기기의 최종 사용자에게 이를 알려야 합니다.</translation>
 <translation id="6609867253856597039">사용 중지된 기능의 사용자 환경 설정</translation>
 <translation id="6614557704487944013">사용자가 <ph name="LACROS_NAME" /> 브라우저를 사용하도록 허용</translation>
+<translation id="661610294649586421">손상된 TLS 인증서가 있는 사이트의 WebAuthn API 요청을 허용하지 않습니다.</translation>
 <translation id="6617589895942747919">시작과 끝 값을 포함한 간격의 시작 시간입니다.</translation>
 <translation id="6621830999036927230">정책을 설정하면 원격 액세스 호스트에서 연결을 수락하기 위해 이 URL을 사용하여 원격 액세스 클라이언트의 인증 토큰을 검사합니다. 비어 있거나 설정되어 있지 않으면 이 기능이 사용 중지됩니다.
 
@@ -5999,6 +5992,9 @@
 <translation id="6907778402784621686">이 사이트에서 안전하지 않은 콘텐츠 차단</translation>
 <translation id="6908640907898649429">기본 검색 공급자를 설정합니다. 사용자가 사용할 기본 검색 공급자를 지정하거나 기본 검색을 사용 중지하도록 선택할 수 있습니다.</translation>
 <translation id="6913068954484253496"><ph name="PRODUCT_NAME" />에서 모든 IP 주소의 Cast 기기에 연결하도록 허용</translation>
+<translation id="6915493311660114995">정책을 사용 설정하면 <ph name="PRODUCT_NAME" />에서 오류가 있는 TLS 인증서가 있는 웹사이트(안전하지 않은 것으로 간주되는 웹사이트)의 웹 인증 요청을 허용합니다.
+
+정책을 사용 안함으로 설정하거나 설정하지 않으면 이러한 요청을 차단하는 기본 동작이 적용됩니다.</translation>
 <translation id="6919819553978815392">정책을 true로 설정하거나 설정하지 않으면 <ph name="PRODUCT_NAME" /> 및 <ph name="LACROS_NAME" />가 게스트 로그인을 사용 설정합니다. 게스트 로그인은 모든 창이 시크릿 모드인 <ph name="PRODUCT_NAME" /> 프로필입니다.
 
       정책을 false로 설정하면 <ph name="PRODUCT_NAME" /> 및 <ph name="LACROS_NAME" />가 게스트 프로필이 시작하도록 허용하지 않습니다.
@@ -6104,7 +6100,6 @@
       'U2F'를 선택하면 FIDO U2F 사양에 따라 통합된 2차 요소가 작동합니다.
 
       'U2F_EXTENDED'를 선택하면 통합된 2차 요소가 U2F 기능과 함께 개별 인증용 확장 프로그램을 일부 제공합니다.</translation>
-<translation id="6998179760789945134">Chrome 신고에서 사용 설정하지 않는 한 비보안 컨텍스트의 WebSQL을 사용 중지합니다.</translation>
 <translation id="6999948519306285655">이 정책은 지원 중단되었으므로 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 정책을 대신 사용하세요.
 
        정책을 설정하면 프록시 .pac 파일 URL을 지정할 수 있습니다. 이 정책은 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 정책을 지정하지 않고 <ph name="PROXY_MODE_POLICY_NAME" />에 <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> 값을 선택한 경우에만 적용됩니다.
@@ -6916,6 +6911,7 @@
 <translation id="782661371433719637">모든 사이트에서 File System API를 통한 파일 및 디렉터리 읽기 액세스 권한을 요청하지 못하도록 차단</translation>
 <translation id="7827127381981620448">플랫폼 앱</translation>
 <translation id="7829436838673974723">페이지를 닫는 중에 페이지에서 동기 XHR 요청을 전송하도록 허용</translation>
+<translation id="782978857350824974">손상된 TLS 인증서가 있는 사이트의 웹 인증 요청을 허용합니다.</translation>
 <translation id="7832225468415136704">Chrome 정리도구의 정기적 시스템 검사를 차단하고 수동 검사 사용 안함</translation>
 <translation id="7833148823006528332">Android 앱 식별자(예: Gmail의 경우 'com.google.android.gm')입니다.</translation>
 <translation id="7835218570504220753">자동 클릭 사용 중지</translation>
@@ -7310,6 +7306,7 @@
 <translation id="8250048892729838843">지원 중단된 정책입니다. 정책을 사용으로 설정하거나 설정하지 않은 채로 두면 기기가 상세 보고 제어 권한을 받을 수 있습니다.
       정책을 사용 안함으로 설정하면 등록된 기기가 상세 보고 제어 권한을 받을 수 없습니다.</translation>
 <translation id="82530263956734297">차단 목록에서 제외할 확장 프로그램 ID</translation>
+<translation id="8256006033157034334">이 정책은 지원 중단되었으며 지원되지 않습니다. 대신 <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" /> 정책을 사용하세요.</translation>
 <translation id="8256688113167012935">계정 이름 <ph name="PRODUCT_OS_NAME" />을(를) 해당 기기 로컬 계정의 로그인 화면에 표시할 것인지 제어합니다.
 
       이 정책을 설정하면 로그인 화면은 해당 기기 로컬 계정에 사진 기반 로그인 선택기의 특정 문자열을 사용합니다.
@@ -8185,9 +8182,6 @@
       이 정책을 설정하지 않으면 어떠한 사이트에서도 인증서가 자동으로 선택되지 않습니다.
 
       유효한 URL 패턴을 자세히 알아보려면 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns를 참고하세요.</translation>
-<translation id="906349948439898016">비보안 컨텍스트의 WebSQL은 M105부터 기본적으로 사용 설정되어 있지만 Chrome 신고를 통해 사용 중지할 수 있습니다.
-          정책을 False로 설정하거나 설정하지 않으면 보안되지 않은 컨텍스트에서 WebSQL이 사용 중지될 수 있습니다.
-          정책을 True로 설정하면 WebSQL이 사용 중지되지 않습니다.</translation>
 <translation id="9068629430243705879">포트 6566(2021년 10월 15일까지 차단 해제될 수 있음)</translation>
 <translation id="9069588907259547232">정책을 설정하거나 설정하지 않으면 등록된 기기에서 기기 오디오 볼륨을 보고합니다.
 
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 5cd171035..adf4c97 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -449,11 +449,6 @@
       Extensieprinters staan ook bekend als afdrukproviderbestemmingen en omvatten elke bestemming die bij een <ph name="PRODUCT_NAME" />-extensie hoort.
 
       Lokale printers staan ook bekend als systeemeigen afdrukbestemmingen en omvatten bestemmingen die beschikbaar zijn voor de lokale computer en gedeelde netwerkprinters.</translation>
-<translation id="1456449214426764016">De niet-standaard API window.webkitStorageInfo is beëindigd en wordt binnenkort verwijderd.
-      Dit beleid zet de API opnieuw aan.
-      Als je dit beleid toepast, is de API window.webkitStorageInfo beschikbaar.
-      Als je dit beleid niet toepast of niet instelt, is de API window.webkitStorageInfo niet beschikbaar.
-      </translation>
 <translation id="1456822151187621582">Windows (<ph name="PRODUCT_OS_NAME" />-clients):</translation>
 <translation id="1464848559468748897">Bepaal het gebruikersgedrag tijdens een sessie met meerdere profielen op <ph name="PRODUCT_OS_NAME" />-apparaten.
 
@@ -825,16 +820,6 @@
 
       Als je het beleid niet instelt, kunnen gebruikers de hele lijst met voorkeurstalen aanpassen.</translation>
 <translation id="1803646570632580723">Lijst met vastgezette apps om in het opstartprogramma te tonen</translation>
-<translation id="1805056271257244521">Als het beleid wordt toegepast, wordt de JavaScript-functie setTimeout() met een time-out van 0 ms niet vastgezet op 1 ms.
-          Als het beleid niet wordt toegepast, wordt de JavaScript-functie setTimeout() met een time-out van 0 ms vastgezet op 1 ms.
-          Als het beleid niet is ingesteld, wordt het standaardgedrag van de browser gebruikt voor het vastzetten van de functie setTimeout().
-
-          Deze functie voldoet aan de internetstandaarden, maar kan de taakvolgorde op een webpagina veranderen, wat kan leiden tot onverwacht gedrag op sites die afhankelijk zijn van een bepaalde volgorde. De functie kan ook van invloed zijn op sites die veel instanties van setTimeout() met een time-out van 0 ms gebruiken. De CPU-belasting kan bijvoorbeeld toenemen.
-
-          Voor gebruikers waarvoor dit beleid niet is ingesteld, rolt Chrome de wijziging geleidelijk uit op het stabiele kanaal.
-
-          Dit is een tijdelijk beleid dat volgens de planning wordt verwijderd in Chrome 105. Deze deadline kan worden verlengd als daar bij bedrijven behoefte aan is.
-          </translation>
 <translation id="1808715480127969042">Cookies blokkeren op deze sites</translation>
 <translation id="1810261428246410396">Het gebruik van instant-tethering toestaan</translation>
 <translation id="1813638828646876133">Automatisch versturen van pincode op het vergrendel- en inlogscherm aanzetten</translation>
@@ -3030,6 +3015,13 @@
 
       Als je het beleid instelt op 2, worden advertenties geblokkeerd op alle sites met opdringerige advertenties.</translation>
 <translation id="3877517141460819966">Geïntegreerde modus voor authenticatie met twee factoren</translation>
+<translation id="3877908683993837673">Dit beleid beheert welke softwarestack wordt gebruikt voor communicatie met de DNS-server: de DNS-client van het besturingssysteem of de ingebouwde DNS-client van <ph name="PRODUCT_NAME" />. Dit beleid heeft geen invloed op welke DNS-servers worden gebruikt: als het besturingssysteem bijvoorbeeld is ingesteld voor gebruik van een zakelijke DNS-server, wordt diezelfde server gebruikt door de ingebouwde DNS-client. Ook wordt met dit beleid niet beheerd of DNS-over-HTTPS wordt gebruikt: <ph name="PRODUCT_NAME" /> gebruikt altijd de ingebouwde resolver voor DNS-over-HTTPS-verzoeken. Zie het <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" />-beleid voor informatie over het beheer van DNS-over-HTTPS.
+
+      Als je dit beleid toepast, wordt de ingebouwde DNS-client gebruikt (indien beschikbaar).
+
+      Als je dit beleid niet toepast, wordt de ingebouwde DNS-client alleen gebruikt als DNS-over-HTTPS wordt gebruikt.
+
+      Als je dit beleid niet instelt, wordt de ingebouwde DNS-client standaard aangezet op <ph name="MS_WIN_NAME" />, <ph name="MAC_OS_NAME" />, <ph name="ANDROID_NAME" /> (als Privé-DNS en VPN niet aanstaan) en <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="3879208481373875102">Lijst met afgedwongen geïnstalleerde web-apps instellen</translation>
 <translation id="3879700444818346084">Import van opgeslagen wachtwoorden bij eerste uitvoering uitzetten</translation>
 <translation id="388237772682176890">Dit beleid is beëindigd in M53 en is verwijderd in M54, omdat de ondersteuning voor SPDY/3.1 is verwijderd.
@@ -5525,6 +5517,7 @@
       Opmerking: Automatisch opnieuw opstarten staat alleen aan terwijl het inlogscherm wordt getoond of er een kiosk-app-sessie wordt uitgevoerd.</translation>
 <translation id="6556586932263358975">Schermvergrendeling toestaan</translation>
 <translation id="6559057113164934677">Niet toestaan dat sites toegang krijgen tot de camera en microfoon</translation>
+<translation id="65591220958874949">De ingebouwde DNS-client gebruiken op Windows, macOS, Android en ChromeOS</translation>
 <translation id="6559221564468029245">Als je dit beleid toepast of niet instelt, worden gebruikers niet als inactief gezien als er audio wordt afgespeeld. Hierdoor wordt voorkomen dat de time-out voor inactiviteit wordt bereikt en dat de actie bij inactiviteit wordt ondernomen. Het dimmen, uitzetten of vergrendelen van het scherm wordt nog wel uitgevoerd na de ingestelde periode, ongeacht of er audio wordt afgespeeld.
 
       Als je het beleid niet toepast, worden gebruikers wel als inactief gezien, ook als er audio wordt afgespeeld.</translation>
@@ -6019,7 +6012,6 @@
       Als U2F is geselecteerd, gedraagt de geïntegreerde tweede factor zich overeenkomstig de FIDO U2F-specificatie.
 
       Als U2F_EXTENDED is geselecteerd, verstrekt de geïntegreerde tweede factor de U2F-functies plus enkele extensies voor individuele bevestiging.</translation>
-<translation id="6998179760789945134">WebSQL in niet-beveiligde contexten uitzetten, tenzij aangezet via een Chrome-vlag.</translation>
 <translation id="6999948519306285655">Dit beleid is verouderd. Gebruik in plaats daarvan <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        Als je het beleid instelt, kun je een URL naar een pac-bestand voor de proxy opgeven. Dit beleid is alleen van kracht als het beleid <ph name="PROXY_SETTINGS_POLICY_NAME" /> niet is opgegeven en je <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> hebt geselecteerd met <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -8087,9 +8079,6 @@
       Als dit beleid niet wordt ingesteld, wordt voor geen enkele site automatische selectie uitgevoerd.
 
       Ga naar https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns voor gedetailleerde informatie over geldige URL-patronen.</translation>
-<translation id="906349948439898016">WebSQL in niet-beveiligde contexten staat standaard aan vanaf M105, maar kan worden uitgezet via Chrome-flag.
-          Als je dit beleid instelt op False of niet instelt, kan WebSQL in niet-beveiligde contexten worden uitgezet.
-          Als je dit beleid instelt op True, kan WebSQL niet worden uitgezet.</translation>
 <translation id="9068629430243705879">poort 6566 (blokkering kan worden opgeheven tot 15-10-2021)</translation>
 <translation id="9069588907259547232">Als je het beleid toepast of niet instelt, rapporteren ingeschreven apparaten het audiovolume van het apparaat.
 
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 1d6188ac..ff6e7f53 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -447,11 +447,6 @@
       As impressoras de extensão também são conhecidas como destinos de provedores de impressão e incluem qualquer destino que pertença a uma extensão do <ph name="PRODUCT_NAME" />.
 
       As impressoras locais também são conhecidas como destinos de impressão nativos e incluem os destinos disponíveis para as impressoras de rede compartilhada e de máquinas locais.</translation>
-<translation id="1456449214426764016">A API window.webkitStorageInfo não padrão foi descontinuada e vai ser removida.
-      A política reativa essa API.
-      Se a política for ativada, a API window.webkitStorageInfo vai ficar disponível.
-      Se ela for desativada ou deixada sem definição, a API não vai ficar disponível.
-      </translation>
 <translation id="1456822151187621582">Windows (clientes do <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">Controla o comportamento do usuário em uma sessão de diversos perfis nos dispositivos com <ph name="PRODUCT_OS_NAME" />.
 
@@ -822,19 +817,6 @@
 
       Se a política não for definida, será possível manipular toda a lista de idiomas preferidos.</translation>
 <translation id="1803646570632580723">Lista de aplicativos fixados a serem mostrados no iniciador</translation>
-<translation id="1805056271257244521">Quando esta política estiver ativada, a função setTimeout() do JavaScript com um tempo limite de 0 ms não vai ser limitada a 1 ms.
-          Quando ela estiver desativada, a função setTimeout() do JavaScript com um tempo limite de 0 ms vai ser limitada a 1 ms.
-          Se a política for deixada sem definição, use o comportamento padrão do navegador para o tempo limite da função setTimeout().
-
-          Esse é um recurso que obedece aos padrões da Web, mas pode mudar a ordem das tarefas
-           em uma página da Web, levando a um comportamento inesperado em sites que dependem de
-           uma certa ordenação. Também pode afetar sites com muitas funções setTimeout()
-           com um tempo limite de uso de 0ms, por exemplo, aumentando a carga da CPU.
-
-          Para usuários em que essa política não está definida, o Chrome vai lançar a mudança gradualmente no canal estável.
-
-          Esta é uma política temporária que está planejada para ser removida no Chrome 105. Este prazo pode ser prorrogado para as empresas, caso seja necessário.
-          </translation>
 <translation id="1808715480127969042">Bloquear cookies nestes sites</translation>
 <translation id="1810261428246410396">Permitir que o tethering instantâneo seja usado.</translation>
 <translation id="1813638828646876133">Ativar o envio automático do PIN na tela de bloqueio e login</translation>
@@ -4153,6 +4135,7 @@
 <translation id="5025239932007658691">Se a política for definida como "Ativada" ou não for definida, o <ph name="PRODUCT_NAME" /> enviará consultas ocasionais a um servidor do Google para recuperar um carimbo de data/hora preciso.
 
       Se ela for definida como "Desativada", o <ph name="PRODUCT_NAME" /> não enviará essas consultas.</translation>
+<translation id="5033070732967197381">Permitir solicitações da API WebAuthn em sites com certificados TLS corrompidos.</translation>
 <translation id="5034504101537897433">Ativar relatórios de erros do dispositivo</translation>
 <translation id="5039110755072335605">Suporte a cabeçalhos de solicitação de CORS sem caractere curinga</translation>
 <translation id="504116558738617678">Mostrar alertas de pouco espaço no disco apenas quando o dispositivo não tiver gerenciamento ou quando houver apenas um usuário</translation>
@@ -5719,6 +5702,7 @@
       - Se esta política for desativada, os administradores precisarão informar isso para os usuários finais do dispositivo.</translation>
 <translation id="6609867253856597039">Definir a experiência do usuário com recursos desativados</translation>
 <translation id="6614557704487944013">Permitir que os usuários usem o navegador <ph name="LACROS_NAME" /></translation>
+<translation id="661610294649586421">Não permitir solicitações da API WebAuthn em sites com certificados TLS corrompidos.</translation>
 <translation id="6617589895942747919">Horário de início do intervalo (incluso).</translation>
 <translation id="6621830999036927230">Se a política for definida, o host de acesso remoto usará este URL na validação dos tokens de autenticação para aceitar conexões de clientes de acesso remoto. Este recurso será desativado se for deixado vazio ou sem definição.
 
@@ -6018,6 +6002,12 @@
 <translation id="6907778402784621686">Bloquear conteúdo não seguro nesses sites</translation>
 <translation id="6908640907898649429">Configura o provedor de pesquisa padrão. É possível especificar o provedor de pesquisa padrão que será usado ou escolhido pelo usuário para desativar a pesquisa padrão.</translation>
 <translation id="6913068954484253496">Permitir que o <ph name="PRODUCT_NAME" /> conecte-se a dispositivos de transmissão em todos os endereços IP.</translation>
+<translation id="6915493311660114995">Se a política for ativada, o <ph name="PRODUCT_NAME" /> vai permitir
+solicitações de autenticação da Web em sites que tenham certificados TLS com
+erros, ou seja, sites considerados não seguros.
+
+Se ela for desativada ou deixada sem definição, o comportamento padrão de
+bloqueio dessas solicitações será aplicado.</translation>
 <translation id="6919819553978815392">Se esta política for definida como verdadeira ou for deixada sem definição, o <ph name="PRODUCT_NAME" /> e o <ph name="LACROS_NAME" /> vão ativar os logins de visitantes. Esses são perfis do <ph name="PRODUCT_NAME" /> em que todas as janelas estão no modo de navegação anônima.
 
       Se esta política for definida como falsa, o <ph name="PRODUCT_NAME" /> e o <ph name="LACROS_NAME" /> não vão permitir que perfis de visitantes sejam iniciados.
@@ -6123,7 +6113,6 @@
       Se a opção U2F for selecionada, o segundo fator integrado se comportará de acordo com a especificação FIDO U2F.
 
       Se a opção U2F_EXTENDED for selecionada, o segundo fator integrado fornecerá as funções de U2F, além de algumas extensões para declaração individual.</translation>
-<translation id="6998179760789945134">Desativar o WebSQL em contextos não seguros, a menos que ele seja ativado pela Flag do Chrome.</translation>
 <translation id="6999948519306285655">Esta política está obsoleta. Use a <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        Se a política for definida, você poderá especificar um URL de um arquivo proxy .pac. Esta política só terá efeito se a <ph name="PROXY_SETTINGS_POLICY_NAME" /> não tiver sido especificada e você tiver selecionado <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> com <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -6931,6 +6920,7 @@
 <translation id="782661371433719637">Não permitir que nenhum site solicite acesso de leitura de arquivos e diretórios pela API File System</translation>
 <translation id="7827127381981620448">App de plataforma</translation>
 <translation id="7829436838673974723">Permitir que as páginas enviem solicitações XHR síncronas ao dispensar a página</translation>
+<translation id="782978857350824974">Permitir solicitações de autenticação da Web em sites com certificados TLS corrompidos.</translation>
 <translation id="7832225468415136704">Impedir que a Varredura do Chrome verifique o sistema periodicamente e desativar as verificações manuais</translation>
 <translation id="7833148823006528332">Identificador do app Android, por exemplo, "com.google.android.gm" para o Gmail.</translation>
 <translation id="7835218570504220753">Desativar clique automático</translation>
@@ -7320,6 +7310,7 @@
 <translation id="8250048892729838843">Esta política foi descontinuada. Se ela for ativada ou deixada sem definição, o dispositivo poderá receber controles de geração de relatórios granulares.
       Se ela for desativada, os dispositivos registrados não vão receber controles de geração de relatórios granulares.</translation>
 <translation id="82530263956734297">IDs de extensão que serão isentos da lista de bloqueio</translation>
+<translation id="8256006033157034334">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation>
 <translation id="8256688113167012935">Controla o nome da conta que o <ph name="PRODUCT_OS_NAME" /> mostra na tela de login para a conta local de dispositivo correspondente.
 
       Se esta política estiver definida, a tela de login usará a string especificada no seletor de login baseado em imagem para a conta local de dispositivo correspondente.
@@ -8196,9 +8187,6 @@
       Se esta política não for definida, não haverá seleção automática para nenhum site.
 
       Para informações detalhadas sobre padrões de URL válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns (link em inglês).</translation>
-<translation id="906349948439898016">O WebSQL em contextos não seguros fica ativado por padrão da versão M105 em diante, mas pode ser desativado por uma Sinalização do Chrome.
-          Se a política é definida como falsa ou deixada sem definição, o WebSQL em contextos não seguros pode ser desativado.
-          Se ela é definida como verdadeira, o WebSQL não pode ser desativado.</translation>
 <translation id="9068629430243705879">porta 6566 (pode ser desbloqueada até 15/10/2021)</translation>
 <translation id="9069588907259547232">Se a política for ativada ou deixada sem definição, os dispositivos registrados vão informar o volume do áudio.
 
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 0d2e18a3..9c28a12 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -446,11 +446,6 @@
       К принтерам расширений, то есть к сервисам печати, относятся все принтеры расширений <ph name="PRODUCT_NAME" />.
 
       К локальным принтерам, то есть к принтерам оригинальной печати, относятся принтеры, доступные для локального компьютера, а также принтеры общей сети.</translation>
-<translation id="1456449214426764016">Поддержка нестандартного window.webkitStorageInfo API прекращена. Планируется его удаление.
-      Правило позволяет снова включить этот API.
-      Если правило включено, window.webkitStorageInfo API будет доступен.
-      Если правило отключено или не настроено, window.webkitStorageInfo API будет недоступен.
-      </translation>
 <translation id="1456822151187621582">Windows (клиенты <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">Управление действиями пользователей в многопрофильном режиме на устройствах <ph name="PRODUCT_OS_NAME" />
 
@@ -821,19 +816,6 @@
 
       Если правило не настроено, пользователи могут сами определять языковые предпочтения.</translation>
 <translation id="1803646570632580723">Список прикрепленных приложений в панели запуска</translation>
-<translation id="1805056271257244521">Если правило включено, время ожидания функции JavaScript setTimeout() 0 мс не будет увеличено до 1 мс.
-          Если правило отключено, время ожидания функции JavaScript setTimeout() 0 мс будет увеличено до 1 мс.
-          Если правило не настроено, будет использоваться заданное по умолчанию поведение браузера для минимального времени задержки функции setTimeout().
-
-          Хотя эта функция соответствует веб-стандартам, ее использование может привести к тому,
-          что порядок выполнения задач на веб-странице изменится. В результате сайты,
-          на которых в той или иной мере важен этот порядок, могут работать со сбоями. Кроме того, если на сайте используется множество функций setTimeout()
-          с временем ожидания 0 мс, может повыситься нагрузка на процессор.
-
-          Для пользователей стабильной версии Chrome, в которой это правило не настроено, постепенно будет выпущено изменение.
-
-          Это временное правило, которое мы планируем удалить в версии Chrome 105. Срок его действия может быть продлен, если в этом возникнет необходимость у компаний.
-          </translation>
 <translation id="1808715480127969042">Блокировать файлы cookie на этих сайтах</translation>
 <translation id="1810261428246410396">Разрешить использование мгновенной точки доступа</translation>
 <translation id="1813638828646876133">Включить автоматическую отправку PIN-кода на заблокированном экране и экране входа</translation>
@@ -4125,6 +4107,7 @@
 <translation id="5025239932007658691">Если правило включено или не настроено, <ph name="PRODUCT_NAME" /> периодически отправляет запросы на сервер Google для получения точных временных меток.
 
       Если правило отключено, <ph name="PRODUCT_NAME" /> не отправляет эти запросы.</translation>
+<translation id="5033070732967197381">Разрешать запросы к WebAuthn API на сайтах с ненадежными TLS-сертификатами</translation>
 <translation id="5034504101537897433">Включить отправку данных о сбоях устройства</translation>
 <translation id="5039110755072335605">Поддержка заголовков запросов CORS без подстановочных знаков</translation>
 <translation id="504116558738617678">Показывать предупреждения о том, что на диске осталось мало места, только если устройство не является управляемым или если пользователь всего один</translation>
@@ -5692,6 +5675,7 @@
       – Если это правило отключено, администраторы должны уведомить об этом конечных пользователей устройства.</translation>
 <translation id="6609867253856597039">Настроить параметры доступа пользователей к отключенным функциям</translation>
 <translation id="6614557704487944013">Разрешить пользователям работать в браузере <ph name="LACROS_NAME" /></translation>
+<translation id="661610294649586421">Запрещать запросы к WebAuthn API на сайтах с ненадежными TLS-сертификатами</translation>
 <translation id="6617589895942747919">Время начала интервала, включительно.</translation>
 <translation id="6621830999036927230">Если правило настроено, хост удаленного доступа будет использовать этот URL для проверки токенов аутентификации от клиентов удаленного доступа для установки подключений. Эта функция недоступна, если правило не задано или URL не указан.
 
@@ -5994,6 +5978,9 @@
 <translation id="6907778402784621686">Блокировка небезопасного контента на текущих сайтах</translation>
 <translation id="6908640907898649429">Настройка поисковой системы по умолчанию. Можно указать поисковую систему по умолчанию, применяемую пользователем, или отключить поиск по умолчанию.</translation>
 <translation id="6913068954484253496">Разрешить <ph name="PRODUCT_NAME" /> подключаться к устройствам Google Cast на всех IP-адресах</translation>
+<translation id="6915493311660114995">Если правило включено, <ph name="PRODUCT_NAME" /> будет разрешать запросы веб-аутентификации на сайтах, в TLS-сертификатах которых есть ошибки (такие сайты считаются небезопасными).
+
+Если правило отключено или не настроено, такие запросы по умолчанию блокируются.</translation>
 <translation id="6919819553978815392">Если задано значение True или правило не настроено, в браузерах <ph name="PRODUCT_NAME" /> и <ph name="LACROS_NAME" /> разрешается использовать гостевой доступ. При гостевом доступе все окна для профилей <ph name="PRODUCT_NAME" /> открываются в режиме инкогнито.
 
       Если задано значение False, в браузерах <ph name="PRODUCT_NAME" /> и <ph name="LACROS_NAME" /> не разрешается использовать гостевые профили.
@@ -6097,7 +6084,6 @@
       Если выбран вариант U2F, используются встроенные возможности двухфакторной аутентификации в соответствии со спецификациями токена стандарта U2F от FIDO.
 
       Если выбран вариант U2F_EXTENDED, двухфакторная аутентификация обеспечивается с помощью технологии U2F и расширений для персонального подтверждения.</translation>
-<translation id="6998179760789945134">Отключать WebSQL в небезопасных контекстах, если он не включен с помощью экспериментального параметра Chrome</translation>
 <translation id="6999948519306285655">Это правило больше не поддерживается. Используйте вместо него правило <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        Оно позволяет указать URL файла PAC прокси-сервера. Это правило действует, только если не настроено <ph name="PROXY_SETTINGS_POLICY_NAME" />. Также должны быть выбраны <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> и <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -6907,6 +6893,7 @@
 <translation id="782661371433719637">Не разрешать сайтам запрашивать доступ на чтение файлов и каталогов через File System API</translation>
 <translation id="7827127381981620448">Приложение-платформа</translation>
 <translation id="7829436838673974723">Разрешить страницам отправлять синхронные запросы XHR при закрытии</translation>
+<translation id="782978857350824974">Разрешать запросы веб-аутентификации на сайтах с ненадежными TLS-сертификатами</translation>
 <translation id="7832225468415136704">Запретить Инструменту очистки Chrome выполнять периодическое сканирование и отключить возможность сканирования вручную</translation>
 <translation id="7833148823006528332">Идентификатор приложения Android, например com.google.android.gm для Gmail.</translation>
 <translation id="7835218570504220753">Отключить автоматическое нажатие кнопки мыши</translation>
@@ -7296,6 +7283,7 @@
 <translation id="8250048892729838843">Правило устарело. Если оно включено или не настроено, устройство будет получать параметры для отчетов с высокой детализацией.
       Если правило отключено, зарегистрированные устройства не будут получать параметры для отчетов с высокой детализацией.</translation>
 <translation id="82530263956734297">Идентификаторы расширений, исключаемых из списка блокировки</translation>
+<translation id="8256006033157034334">Это правило больше не поддерживается. Используйте вместо него правило <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation>
 <translation id="8256688113167012935">Управление названиями локальных аккаунтов, привязанных к устройству, на странице входа <ph name="PRODUCT_OS_NAME" />.
 
 Если этот параметр установлен, на странице входа будут использованы имена пользователей с соответствующими картинками профиля для каждого локального аккаунта.
@@ -8176,9 +8164,6 @@
       Если правило не настроено, сертификаты не будут выбираться автоматически ни для одного сайта.
 
       Сведения о допустимых шаблонах URL доступны на странице https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">WebSQL в небезопасных контекстах включен по умолчанию для версии M105, но его можно отключить с помощью экспериментального параметра Chrome.
-          Если это правило не настроено или для него задано значение False, WebSQL в небезопасных контекстах можно отключить.
-          Если установлено значение True, WebSQL отключить нельзя.</translation>
 <translation id="9068629430243705879">порт 6566 (можно разблокировать до 15.10.2021)</translation>
 <translation id="9069588907259547232">Если правило включено или не настроено, зарегистрированные устройства отправляют сведения об уровне громкости звука.
 
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 4e90760..469eba6 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -205,6 +205,7 @@
 
       หากตั้งค่านโยบายนี้เป็น "เท็จ" ช่องทำเครื่องหมาย "อนุญาตเสมอ" จะไม่แสดง และระบบจะแสดงข้อความแจ้งแก่ผู้ใช้ทุกครั้งที่มีการเรียกใช้โปรโตคอลภายนอก</translation>
 <translation id="1181598794547737681">เปิดใช้ UI ลูกโป่งสำหรับดาวน์โหลด</translation>
+<translation id="1184562656144537588">เปิดใช้ไฟล์ Manifest V2 อยู่สำหรับส่วนขยายที่บังคับติดตั้งแล้วเท่านั้น</translation>
 <translation id="11903325225202653">การตั้งค่านโยบายเป็น "จริง" จะเปิดโหมดคอนทราสต์สูงไว้ตลอด การตั้งค่านโยบายเป็น "เท็จ" จะปิดโหมดคอนทราสต์สูงไว้ตลอด
 
       หากคุณตั้งค่านโยบายไว้ ผู้ใช้จะเปลี่ยนไม่ได้ หากไม่ได้ตั้งค่าไว้ โหมดคอนทราสต์สูงจะปิดอยู่ แต่ผู้ใช้จะเปิดได้ทุกเมื่อ</translation>
@@ -449,11 +450,6 @@
       เครื่องพิมพ์ส่วนขยายเรียกอีกอย่างว่าปลายทางผู้ให้บริการการพิมพ์ โดยจะมีปลายทางทั้งหมดที่เป็นของส่วนขยาย <ph name="PRODUCT_NAME" />
 
       เครื่องพิมพ์ในพื้นที่เรียกอีกอย่างว่าปลายทางการพิมพ์เฉพาะที่ โดยจะมีปลายทางที่พร้อมใช้งานสำหรับคอมพิวเตอร์ในพื้นที่และเครื่องพิมพ์ของเครือข่ายที่แชร์</translation>
-<translation id="1456449214426764016">ระบบจะเลิกใช้งาน window.webkitStorageInfo ซึ่งเป็น API ที่ไม่เป็นไปตามมาตรฐานและมีแผนว่าจะนำออก
-      นโยบายนี้จะเปิดใช้ API อีกครั้ง
-      หากตั้งค่านโยบายนี้เป็น "เปิดใช้" window.webkitStorageInfo API จะพร้อมใช้งาน
-      หากตั้งค่านโยบายนี้เป็น "ปิดใช้" หรือไม่ได้ตั้งค่า window.webkitStorageInfo API จะใช้งานไม่ได้
-      </translation>
 <translation id="1456822151187621582">Windows (ไคลเอ็นต์ของ <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">ควบคุมพฤติกรรมของผู้ใช้ในเซสชันหลายโปรไฟล์บนอุปกรณ์ <ph name="PRODUCT_OS_NAME" />
 
@@ -823,16 +819,6 @@
 
       การไม่ตั้งค่านโยบายจะทำให้ผู้ใช้ดัดแปลงรายการภาษาที่ต้องการทั้งหมดได้</translation>
 <translation id="1803646570632580723">รายชื่อของแอปพลิเคชันที่ปักหมุดจะแสดงในตัวเรียกใช้งาน</translation>
-<translation id="1805056271257244521">เมื่อตั้งค่านโยบายนี้เป็น "เปิดใช้" JavaScript setTimeout() ที่มีระยะหมดเวลาเป็น 0 มิลลิวินาทีจะไม่ถูกปรับเป็น 1 มิลลิวินาที
-          เมื่อตั้งค่านโยบายนี้เป็น "ปิดใช้" JavaScript setTimeout() ที่มีระยะหมดเวลาเป็น 0 มิลลิวินาทีจะถูกปรับเป็น 1 มิลลิวินาที
-          เมื่อไม่มีการตั้งค่าสำหรับนโยบายนี้ ให้ใช้พฤติกรรมเริ่มต้นของเบราว์เซอร์สำหรับการปรับฟังก์ชัน setTimeout()
-
-          ฟีเจอร์นี้เป็นไปตามมาตรฐานของเว็บ แต่อาจทำให้ลำดับงานของบางหน้าเว็บเปลี่ยนไปได้ ซึ่งจะก่อให้เกิดพฤติกรรมที่ไม่ได้คาดไว้ในเว็บไซต์ที่อาศัยการเรียงลำดับงานในบางรูปแบบ นอกจากนี้ยังอาจส่งผลต่อเว็บไซต์ที่มี setTimeout() จำนวนมากที่มีการใช้ระยะหมดเวลาที่ 0 มิลลิวินาทีด้วย เช่น ทำให้โหลดของ CPU มากขึ้น
-
-          สำหรับผู้ใช้ที่ไม่ได้ตั้งค่านโยบายนี้ไว้ Chrome จะทยอยทำการเปลี่ยนแปลงทีละน้อยในเวอร์ชันเสถียร
-
-          นโยบายนี้เป็นนโยบายชั่วคราวซึ่งจะถูกนำออกใน Chrome 105 กำหนดเวลานี้อาจเลื่อนออกไปได้หากมีบริษัทที่ยังคงต้องการใช้จำนวนมาก
-          </translation>
 <translation id="1808715480127969042">ปิดกั้นคุกกี้บนไซต์เหล่านี้</translation>
 <translation id="1810261428246410396">อนุญาตให้ใช้การเชื่อมต่ออินเทอร์เน็ตผ่านมือถือแบบด่วน</translation>
 <translation id="1813638828646876133">เปิดใช้การส่ง PIN อัตโนมัติในหน้าจอล็อกและหน้าจอเข้าสู่ระบบ</translation>
@@ -1534,6 +1520,7 @@
 
       ควรระบุค่าของนโยบายเป็นวัน</translation>
 <translation id="2466131534462628618">การตรวจสอบสิทธิ์ของแคพทีฟพอร์ทัลจะข้ามพร็อกซีไป</translation>
+<translation id="2467181864598429837">ลักษณะการทำงานเริ่มต้นของเบราว์เซอร์</translation>
 <translation id="2467896267442150508">ระยะเวลาที่เกิดขึ้นนานสุด 1 สัปดาห์ หากเวลาเริ่มต้นเกิดขึ้นหลังเวลาสิ้นสุด ระยะเวลาจะวนกลับมาใหม่</translation>
 <translation id="2476249479201711962">เปิดการเข้าถึงเมนูตามบริบทของผู้ให้บริการค้นหาเริ่มต้น</translation>
 <translation id="247658312644322296">ปลายทาง "บันทึกเป็น PDF"</translation>
@@ -2655,6 +2642,7 @@
 <translation id="3524204464536655762">ไม่อนุญาตให้เว็บไซต์ขอสิทธิ์เข้าถึงอุปกรณ์ USB ผ่าน WebUSB API</translation>
 <translation id="3526752951628474302">การพิมพ์ขาวดำเท่านั้น</translation>
 <translation id="3528000905991875314">เปิดใช้งานหน้าเว็บแสดงข้อผิดพลาดสำรอง</translation>
+<translation id="3528681240373634003">ควบคุมความพร้อมใช้งานของส่วนขยายที่ใช้ไฟล์ Manifest V2</translation>
 <translation id="3530249698314520116">กำหนดค่ารายการกฎการป้องกันข้อมูลรั่วไหลใน "<ph name="PRODUCT_OS_NAME" />"
       ข้อมูลรั่วไหลอาจเกิดขึ้นได้จากการคัดลอกและวางข้อมูล การโอนไฟล์ การพิมพ์ การแชร์หน้าจอ หรือการจับภาพหน้าจอ และอื่นๆ
 
@@ -3031,6 +3019,13 @@
 
       การตั้งค่านโยบายเป็น 2 จะบล็อกโฆษณาในเว็บไซต์ซึ่งมีโฆษณาที่แทรก</translation>
 <translation id="3877517141460819966">โหมดการตรวจสอบสิทธิ์จากปัจจัยที่สองที่ผสานรวม</translation>
+<translation id="3877908683993837673">นโยบายนี้ควบคุมกลุ่มซอฟต์แวร์ที่จะใช้ในการสื่อสารกับเซิร์ฟเวอร์ DNS ซึ่งได้แก่ ไคลเอ็นต์ DNS ของระบบปฏิบัติการ หรือไคลเอ็นต์ DNS ในตัวของ <ph name="PRODUCT_NAME" /> นโยบายนี้ไม่มีผลกับเซิร์ฟเวอร์ DNS ที่จะใช้ เช่น หากมีการกำหนดค่าให้ระบบปฏิบัติการใช้เซิร์ฟเวอร์ DNS ขององค์กร ไคลเอ็นต์ DNS ในตัวก็จะใช้เซิร์ฟเวอร์เดียวกันนี้ด้วย นอกจากนี้ นโยบายยังไม่ได้ควบคุมว่าจะใช้ DNS-over-HTTPS หรือไม่ <ph name="PRODUCT_NAME" /> จะใช้รีโซลเวอร์ในตัวเมื่อมีคำขอ DNS-over-HTTPS เสมอ โปรดดูข้อมูลเกี่ยวกับการควบคุม DNS-over-HTTPS ในนโยบาย <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" />
+
+      หากตั้งค่านโยบายนี้เป็น "เปิดใช้" ระบบจะใช้ไคลเอ็นต์ DNS ในตัว (หากมี)
+
+      หากตั้งค่านโยบายนี้เป็น "ปิดใช้" จะมีการใช้ไคลเอ็นต์ DNS ในตัวเฉพาะเมื่อมีการใช้งาน DNS-over-HTTPS อยู่เท่านั้น
+
+      หากไม่มีการตั้งค่านโยบายนี้ ไคลเอ็นต์ DNS ในตัวจะเปิดใช้โดยค่าเริ่มต้นใน <ph name="MS_WIN_NAME" />, <ph name="MAC_OS_NAME" />, <ph name="ANDROID_NAME" /> (เมื่อปิดใช้ทั้ง DNS ส่วนตัวและ VPN) และ <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="3879208481373875102">กำหนดค่ารายการเว็บแอปที่บังคับติดตั้งแล้ว</translation>
 <translation id="3879700444818346084">ปิดใช้การนำเข้ารหัสผ่านที่บันทึกไว้เมื่อเรียกใช้ครั้งแรก</translation>
 <translation id="388237772682176890">นโยบายนี้เลิกใช้งานใน M53 และนำออกจาก M54 เนื่องจากไม่มีการสนับสนุน SPDY/3.1 อีกต่อไป
@@ -3131,6 +3126,7 @@
 <translation id="3990391739475801018">ระบบจะปิดใช้โหมดประหยัดแบตเตอรี่</translation>
 <translation id="3994043824457743421">แสดงประกาศในช่องกลางบนหน้าแท็บใหม่</translation>
 <translation id="399433537808390819">ไม่เปิดให้ผู้ใช้สามารถใช้โหมดเดสก์ท็อปแบบรวมหลายหน้าจอ</translation>
+<translation id="3995880046827722248">ปิดใช้ไฟล์ Manifest V2 อยู่</translation>
 <translation id="3996325823532867220">เราไม่รองรับนโยบายนี้อีกต่อไป แต่บางแพลตฟอร์มอาจรองรับนโยบายที่เกี่ยวข้อง <ph name="CHROME_ROOT_STORE_ENABLED_POLICY_NAME" />
 
       เมื่อเปิดใช้การตั้งค่านี้ <ph name="PRODUCT_NAME" /> จะทำการยืนยันใบรับรองเซิร์ฟเวอร์โดยใช้ตัวตรวจสอบใบรับรองในตัว
@@ -3629,6 +3625,7 @@
 
       หากไม่ได้ตั้งค่านโยบายนี้ ผู้ใช้จะปิดใช้ปลั๊กอินใดก็ตามที่ติดตั้งไว้ในระบบได้</translation>
 <translation id="4549405078915181477">เปิดใช้เวลาอยู่หน้าจอสำหรับเว็บไซต์</translation>
+<translation id="4549695018986780856">เปิดใช้ไฟล์ Manifest V2 อยู่</translation>
 <translation id="4554651132977135445">โหมดประมวลผล Loopback ของนโยบายด้านผู้ใช้</translation>
 <translation id="4554991346503872538">ไม่ต้องเสนอคำแปล</translation>
 <translation id="4555850956567117258">เปิดใช้งานการยืนยันระยะไกลสำหรับผู้ใช้</translation>
@@ -4957,6 +4954,17 @@
       เมื่อตั้งค่าเป็น "จริง" เว็บไซต์จะส่งโมดูล WebAssembly แบบข้ามต้นทางได้ด้วยโดยที่ไม่มีข้อจำกัด
 
       เมื่อตั้งค่าเป็น "เท็จ" หรือไม่ได้ตั้งค่า เว็บไซต์จะสามารถส่งโมดูล WebAssembly ไปยังหน้าต่างและผู้ปฏิบัติงานในต้นทางเดียวกันเท่านั้น</translation>
+<translation id="6005906773585863978">ควบคุมว่าจะให้เบราว์เซอร์ใช้ส่วนขยายซึ่งใช้ไฟล์ Manifest V2 หรือไม่
+
+เราจะเลิกรองรับส่วนขยายที่ใช้ไฟล์ Manifest V2 และจะย้ายข้อมูลส่วนขยายทั้งหมดไปยัง V3 ในอนาคต ดูข้อมูลเพิ่มเติมและลำดับเวลาการย้ายข้อมูลได้ที่ https://developer.chrome.com/docs/extensions/mv3/mv2-sunset/
+
+หากตั้งค่านโยบายเป็น <ph name="DEFAULT" /> (0) หรือไม่ได้ตั้งค่า เบราว์เซอร์จะโหลดส่วนขยายที่ใช้ไฟล์ Manifest V2 ตามลำดับเวลาด้านบน
+หากตั้งค่านโยบายเป็น <ph name="DISABLE" /> (1) ระบบจะบล็อกการติดตั้งส่วนขยายที่ใช้ไฟล์ Manifest V2 และปิดใช้ส่วนขยายที่มีอยู่ หลังจากเลิกรองรับไฟล์ Manifest V2 โดยค่าเริ่มต้น ระบบจะดำเนินการกับตัวเลือกในแนวทางเดียวกันราวกับว่าไม่ได้ตั้งค่านโยบาย
+หากตั้งค่านโยบายเป็น <ph name="ENABLE" /> (2) ระบบจะอนุญาตส่วนขยายที่ใช้ไฟล์ Manifest V2 ก่อนที่จะเลิกรองรับไฟล์ Manifest V2 โดยค่าเริ่มต้น ระบบจะดำเนินการกับตัวเลือกในแนวทางเดียวกันราวกับว่าไม่ได้ตั้งค่านโยบาย
+หากตั้งค่านโยบายเป็น <ph name="ENABLE_FOR_FORCED_EXTENSIONS" /> (3) ระบบจะอนุญาตส่วนขยายที่ใช้ไฟล์ Manifest V2 ซึ่งบังคับติดตั้งแล้ว ซึ่งรวมถึงส่วนขยายที่ <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME" /> แสดงหรือ <ph name="EXTENSION_SETTINGS_POLICY_NAME" /> ที่มี <ph name="INSTALLATION_MODE" /> "force_installed" หรือ "normal_installed" ปิดใช้ส่วนขยายอื่นๆ ทั้งหมดที่ใช้ไฟล์ Manifest V2 แล้ว ก่อนที่จะเลิกรองรับไฟล์ Manifest V2 โดยค่าเริ่มต้น ระบบจะดำเนินการกับตัวเลือกในแนวทางเดียวกันราวกับว่าไม่ได้ตั้งค่านโยบาย
+
+
+ทั้งนี้นโยบายอื่นๆ จะยังคงเป็นตัวกำหนดความพร้อมใช้งานของส่วนขยาย</translation>
 <translation id="6009062900206392980">การตั้งค่านโยบายเป็น "ไม่มี" จะปิดการขยายหน้าจอในหน้าจอลงชื่อเข้าใช้
 
        หากตั้งค่านโยบายไว้ ผู้ใช้จะเปิดหรือปิดแว่นขยายหน้าจอได้ชั่วคราว เมื่อหน้าจอลงชื่อเข้าใช้โหลดซ้ำหรือไม่มีการใช้งานเป็นเวลา 1 นาที แว่นขยายหน้าจอจะเปลี่ยนกลับไปอยู่ในสถานะเดิม
@@ -5528,6 +5536,7 @@
       หมายเหตุ: ปัจจุบันการรีบูตอัตโนมัติจะเปิดใช้ขณะกำลังแสดงหน้าจอการเข้าสู่ระบบ หรืออยู่ในระหว่างเซสชันของแอปคีออสก์เท่านั้น</translation>
 <translation id="6556586932263358975">อนุญาตให้ล็อกหน้าจอ</translation>
 <translation id="6559057113164934677">ไม่อนุญาตให้ไซต์ใดๆ เข้าถึงกล้องและไมโครโฟน</translation>
+<translation id="65591220958874949">ใช้ไคลเอ็นต์ DNS ในตัวกับ Windows, macOS, Android และ ChromeOS</translation>
 <translation id="6559221564468029245">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ตั้งค่าทำให้ผู้ใช้ไม่ถูกพิจารณาว่าไม่มีความเคลื่อนไหวในขณะกำลังเล่นเสียง ซึ่งจะป้องกันระยะหมดเวลาเนื่องจากไม่ความเคลื่อนไหวและป้องกันการตอบสนองการไม่มีความเคลื่อนไหว แต่จะยังมีการหรี่แสงหน้าจอ การปิดหน้าจอ และการล็อกหน้าจอหลังจากระยะหมดเวลาที่กำหนดค่าไว้ แม้จะมีกิจกรรมเสียงก็ตาม
 
       การตั้งค่านโยบายเป็น "ปิดใช้" ทำให้ระบบสามารถระบุว่าผู้ใช้ไม่มีความเคลื่อนไหวแม้จะมีกิจกรรมเสียง</translation>
@@ -5680,6 +5689,13 @@
       หากตั้งค่านโยบายนี้เป็น "เท็จ" ระบบจะใช้การแสดง URL โดยค่าเริ่มต้น
       หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้การแสดง URL โดยค่าเริ่มต้น และผู้ใช้จะสลับระหว่างการแสดง URL โดยค่าเริ่มต้นและแบบเต็มได้ด้วยตัวเลือกเมนูตามบริบท
       </translation>
+<translation id="6670716303606644752">ตามที่อธิบายไว้ใน https://www.chromestatus.com/feature/5148698084376576 กล่องโต้ตอบในโหมด JavaScript ที่เกิดจาก <ph name="JS_ALERT" />, <ph name="JS_CONFIRM" /> และ <ph name="JS_PROMPT" /> จะถูกบล็อกใน "<ph name="PRODUCT_NAME" />" เมื่อมีการเรียกใช้จากเฟรมย่อยที่มีต้นทางต่างจากต้นทางของเฟรมหลัก
+
+นโยบายนี้อนุญาตให้ลบล้างการเปลี่ยนแปลงดังกล่าว
+หากตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่า ระบบจะบล็อกกล่องโต้ตอบ JavaScript ซึ่งเกิดจากเฟรมย่อยที่เป็นต้นทางเฟรมอื่น
+หากตั้งค่านโยบายเป็น "ปิดใช้" ระบบจะไม่บล็อกกล่องโต้ตอบ JavaScript ซึ่งเกิดจากเฟรมย่อยที่เป็นต้นทางเฟรมอื่น
+
+เราจะนำนโยบายนี้ออกจาก "<ph name="PRODUCT_NAME" />" ในอนาคต</translation>
 <translation id="6670794785040100077">ปิดใช้การส่งเอกสารไปยัง "<ph name="CLOUD_PRINT_NAME" />"</translation>
 <translation id="6672070613706645316">อนุญาตให้ผู้ใช้ปรับแต่งพื้นหลังในหน้าแท็บใหม่</translation>
 <translation id="6672630473862787247">เปิดใช้การตรวจสอบสิทธิ์แบบแอมเบียนท์ในเซสชันปกติ เซสชันไม่ระบุตัวตน และเซสชันผู้เยี่ยมชม</translation>
@@ -6026,7 +6042,6 @@
       หากเลือก "U2F" ปัจจัยที่ 2 ที่รวมอยู่จะดำเนินการตามข้อกำหนดของ FIDO U2F
 
       หากเลือก "U2F_EXTENDED" ปัจจัยที่ 2 ที่รวมอยู่จะแจ้งฟังก์ชัน U2F พร้อมส่วนขยายบางอย่างสำหรับการรับรองแต่ละรายการ</translation>
-<translation id="6998179760789945134">ปิดใช้ WebSQL ในบริบทที่ไม่ปลอดภัย เว้นแต่จะเปิดใช้โดย Chrome Flag</translation>
 <translation id="6999948519306285655">นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้ <ph name="PROXY_SETTINGS_POLICY_NAME" /> แทน
 
        การตั้งค่านโยบายนี้ช่วยให้คุณระบุ URL ไปยังไฟล์ .pac ของพร็อกซีได้ นโยบายนี้จะมีผลก็ต่อเมื่อไม่ได้ระบุนโยบาย <ph name="PROXY_SETTINGS_POLICY_NAME" /> และคุณเลือก <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> ด้วย <ph name="PROXY_MODE_POLICY_NAME" /> เท่านั้น
@@ -8088,9 +8103,6 @@
       หากไม่มีการกำหนดนโยบายนี้ จะไม่มีการเลือกใบรับรองโดยอัตโนมัติสำหรับเว็บไซต์ใดก็ตาม
 
       ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ URL ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns</translation>
-<translation id="906349948439898016">WebSQL ในบริบทที่ไม่ปลอดภัยจะเปิดอยู่โดยค่าเริ่มต้นตั้งแต่ในเวอร์ชัน M105 แต่ก็สามารถปิดใช้ผ่าน Chrome Flag ได้
-          หากตั้งค่านโยบายนี้เป็น "เท็จ" หรือไม่ได้ตั้งค่าไว้ ระบบสามารถปิดใช้ WebSQL ในบริบทที่ไม่ปลอดภัยได้
-          หากตั้งค่านโยบายนี้เป็น "จริง" ระบบจะปิดใช้ WebSQL ไม่ได้</translation>
 <translation id="9068629430243705879">พอร์ต 6566 (เลิกบล็อกได้จนถึง 15/10/2021)</translation>
 <translation id="9069588907259547232">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้รายงานระดับเสียงของอุปกรณ์
 
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index fe3eaf9b..0fbe5939 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -448,11 +448,6 @@
       Uzantı yazıcıları ayrıca yazdırma sağlayıcı hedefleri olarak da bilinir ve <ph name="PRODUCT_NAME" /> uzantısına ait olan herhangi bir hedefi içerir.
 
       Yerel yazıcılar ayrıca yerel yazdırma hedefleri olarak da bilinir ve yerel makineler ile paylaşılan ağ yazıcılarının kullanabildiği hedefleri içerir.</translation>
-<translation id="1456449214426764016">Standart olmayan API window.webkitStorageInfo desteği sonlandırıldı ve kaldırılması planlanıyor.
-      Bu politika, API'yi yeniden etkinleştirir.
-      Bu politika, Etkin değerine ayarlanırsa window.webkitStorageInfo API'si kullanılabilir.
-      Bu politika, Devre Dışı değerine ayarlanırsa veya ayarlanmadan bırakılırsa window.webkitStorageInfo API'si kullanılamaz.
-      </translation>
 <translation id="1456822151187621582">Windows (<ph name="PRODUCT_OS_NAME" /> istemcileri):</translation>
 <translation id="1464848559468748897"><ph name="PRODUCT_OS_NAME" /> cihazlarda çoklu profil içeren oturumdaki kullanıcı davranışını denetle.
 
@@ -507,6 +502,7 @@
       Not: Birden fazla sunucu adını virgülle ayırın. Joker karakterlere (<ph name="WILDCARD_VALUE" />) izin verilir.</translation>
 <translation id="1488724823347505879">Android uygulamalarından Web uygulamalarına paylaşımı etkinleştirin</translation>
 <translation id="1494138678487405397">Giriş ekranında yüksek kontrastı devre dışı bırak</translation>
+<translation id="1499129134689253257">Yeni <ph name="OFFSET_PARENT" /> davranışını kontrol et</translation>
 <translation id="1501644502684303995">Online girişleri yalnızca giriş ekranında zorunlu kıl</translation>
 <translation id="1502843533062797703">Üçüncü taraf yazılımı yerleştirme engellemesini etkinleştirin</translation>
 <translation id="1503969899251962413">Politikanın ayarlanması, bu cihaz için <ph name="PLUGIN_VM_NAME" /> lisans anahtarını belirtir.
@@ -822,19 +818,6 @@
 
       Politikanın ayarlanmadan bırakılması, kullanıcıların tercih edilen diller listesinin tamamını manipüle etmelerine olanak tanır.</translation>
 <translation id="1803646570632580723">Başlatıcıda gösterilecek sabitlenmiş uygulamalar listesi</translation>
-<translation id="1805056271257244521">Politika etkin değerine ayarlandığında 0 ms'lik bir zaman aşımına sahip JavaScript setTimeout(), 1 ms'ye sabitlenmez.
-          Politika devre dışı değerine ayarlandığında 0 ms'lik bir zaman aşımına sahip JavaScript setTimeout(), 1 ms'ye sabitlenir.
-          Politika ayarlanmadan bırakılırsa setTimeout() fonksiyon zaman aşımı için tarayıcının varsayılan davranışını kullan.
-
-          Bu, web standartlarına uyumlu bir özelliktir ancak bir web sayfasındaki görev
-          sıralamasını değiştirerek bir şekilde belirli bir sıralamaya bağlı olan sitelerde beklenmeyen
-          davranışlara yol açabilir. Ayrıca, 0 ms zaman aşımına sahip çok sayıda
-          setTimeout() kullanımı içeren siteyi de etkileyebilir (ör. CPU yükünü artırabilir).
-
-          Chrome bu politikanın ayarlanmadığı kullanıcılar için değişikliği kararlı kanalında kademeli olarak kullanıma sunacaktır.
-
-          Bu politika geçicidir ve Chrome 105'te kaldırılması planlanmaktadır. Kuruluşların ihtiyaç duyması halinde bu süre uzatılabilir.
-          </translation>
 <translation id="1808715480127969042">Bu sitelerdeki çerezleri engelle</translation>
 <translation id="1810261428246410396">Hızlı Tethering'in kullanılmasına izin ver.</translation>
 <translation id="1813638828646876133">Kilit ve giriş ekranlarında otomatik PIN gönderme özelliğini etkinleştir</translation>
@@ -2360,6 +2343,17 @@
 
       Politika ayarlanmadan bırakılırsa <ph name="PRODUCT_NAME" />, tüm yüklü yerel mesajlaşma ana makinelerini yükler.</translation>
 <translation id="3211426942294667684">Tarayıcı oturum açma ayarları</translation>
+<translation id="3217774577897351942"><ph name="OFFSET_PARENT" /> API, <ph name="FIREFOX_PRODUCT_NAME" /> ve <ph name="SAFARI_PRODUCT_NAME" /> tarayıcılarında yapılan değişikliklere uymak için <ph name="PRODUCT_NAME" /> tarayıcıda da değiştiriliyor. Bu politika, M120 sürümüne kadar eski davranışı geri getirir.
+
+Yeni davranış, yalnızca Gölge DOM ile birlikte <ph name="OFFSET_PARENT" />, <ph name="OFFSET_TOP" /> veya <ph name="OFFSET_LEFT" /> kullanan <ph name="PRODUCT_NAME" /> web sitelerinin işleyişini bozabilir.
+
+Taşıma işlemine yardımcı olmak için eski davranışı geri getiren bazı çoklu dolguları https://github.com/josepharhar/offsetparent-polyfills adresinde bulabilirsiniz
+
+Bu politika etkinleştirilirse yeni davranış kullanılır.
+
+Bu politika devre dışı bırakılırsa eski davranış kullanılır.
+
+Bu politika ayarlanmazsa yeni davranış diğer Chromium kullanıcılarında olduğu gibi kullanılır.</translation>
 <translation id="3219421230122020860">Gizli mod kullanılabilir</translation>
 <translation id="3220624000494482595">Kiosk uygulaması bir Android uygulamasıysa bu politika <ph name="TRUE" /> seçeneğine ayarlansa dahi <ph name="PRODUCT_OS_NAME" /> sürümü üzerinde herhangi bir kontrolü olmaz.</translation>
 <translation id="3222088741899353813">Giriş ekranında sol düğme birincil</translation>
@@ -2762,6 +2756,7 @@
 <translation id="3589193811812796052">WebAssembly modüllerinin kaynaklar arasında gönderilmesini engelle</translation>
 <translation id="3591527072193107424">Eski Tarayıcı Desteği özelliğini etkinleştir.</translation>
 <translation id="3591584750136265240">Giriş için kimlik doğrulama yöntemini yapılandır</translation>
+<translation id="3593905652755912452">Devre dışı bırakılan form kontrollerinde eski etkinlik gönderme davranışı kullanılacak.</translation>
 <translation id="3596112486106491038">Sanal makine komut satırı erişimini etkinleştir</translation>
 <translation id="3603469950773500315">Yeni <ph name="CORS" /> uygulamasındaki çözümlerin <ph name="CORS" /> tarafından kontrol edilmesini sağlayarak Uzantıların uyumlu davranışı sürdürmesine ve belirtilen üstbilgilerin <ph name="PRODUCT_NAME" /> tarafından <ph name="CORS" /> kontrolleri olmadan gönderilmesine olanak tanıyın.
 
@@ -3061,6 +3056,7 @@
 <translation id="3891357445869647828">JavaScript’i Etkinleştir</translation>
 <translation id="3891769546914233112">PDF'yi Resim Olarak Yazdırma Seçeneği Kullanılabilir</translation>
 <translation id="3897218615484393758">SAML kullanarak kimlik doğrulaması yapmış kullanıcının, kilit ekranında çevrimdışı olarak giriş yapabileceği süreyi sınırla</translation>
+<translation id="3897860452756794695">Yeni offsetParent davranışı kullanılacak.</translation>
 <translation id="3898345958122666461">NTLMv2'yi kapat</translation>
 <translation id="3898795800259311780">Ekran görüntüsü almaya izin ver veya bunu reddet</translation>
 <translation id="3903313632842363082">Cihaz kullanıcılarının raporlamasını devre dışı bırak</translation>
@@ -4839,6 +4835,7 @@
 
       Kullanıcılar bu ayarı değiştiremez.</translation>
 <translation id="5838452040629810808">Fare imlecini vurgulamayı etkinleştir</translation>
+<translation id="5842283830553218200">Devre dışı bırakılan form kontrollerinde varsayılan olarak yeni etkinlik gönderme davranışı kullanılacak.</translation>
 <translation id="5848438019586925019">Anahtar çifti oluşturmak için kullanılan algoritma.</translation>
 <translation id="5851248808417680865">Koyu temayı kullan</translation>
 <translation id="585270638818921943">Kullanıcının güvenilmeyen kaynaklardan Android uygulamaları kullanmasını engelle</translation>
@@ -5334,6 +5331,7 @@
       Politika, Devre Dışı değerine ayarlanırsa veya ayarlanmadan bırakılırsa kullanıcıların <ph name="CHROME_SYNC_NAME" /> kullanma konusunda seçim yapmasına izin verilir.
 
       Not: Bu özellik aynı istemci taraflı işleve sahip olduğundan, <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> Etkinse bu politikayı etkinleştirmeyin. Bu durumda Google tarafından barındırılan senkronizasyon tamamen kapalıdır.</translation>
+<translation id="6320935916601887506">Varsayılan olarak yeni offsetParent davranışı kullanılacak.</translation>
 <translation id="6327643515544933974">Web USB ayarları</translation>
 <translation id="6330882599388782338">Sitelerin sensörlere erişmesine izin ver</translation>
 <translation id="6331167725613770725">Bu politikanın artık kullanılmadığını ve <ph name="PRODUCT_OS_NAME" /> sürüm 85'te kaldırılacağını unutmayın. Lütfen bunun yerine <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> politikasını kullanın.
@@ -5471,6 +5469,7 @@
 <translation id="6464074037294098618">Adresleri otomatik doldurmayı etkinleştir</translation>
 <translation id="6467613372414922590">Kullanıcı düzeyinde Yerel Mesajlaşma ana makinelerine izin ver (yönetici şifreleri olmadan yüklenir)</translation>
 <translation id="6473623140202114570">Güvenli Tarama'nın uyarıları tetiklemeyeceği alan adlarının listesini yapılandırır.</translation>
+<translation id="6474194795370862403">Eski offsetParent davranışı kullanılacak.</translation>
 <translation id="647645276885673708"><ph name="LACROS_NAME" /> tarayıcısını etkinleştir ve birincil tarayıcı yap</translation>
 <translation id="647698599569353771">Yakındakilerle Paylaş'ın etkinleştirilmesine izin verin.</translation>
 <translation id="6477685422297715670">Klavye arka ışığı yeşil</translation>
@@ -6064,7 +6063,6 @@
       "U2F" seçilirse entegre edilen ikinci etmen FIDO U2F özelliğine göre davranır.
 
       "U2F_EXTENDED" seçilirse entegre edilen ikinci etmen, U2F işlevlerinin yanı sıra bağımsız doğrulama için bazı uzantılar sunar.</translation>
-<translation id="6998179760789945134">Chrome flag'i üzerinden etkinleştirilmediği sürece, güvenli olmayan bağlamlarda WebSQL kullanımını devre dışı bırak.</translation>
 <translation id="6999948519306285655">Bu politika kullanımdan kaldırıldı, lütfen bunun yerine <ph name="PROXY_SETTINGS_POLICY_NAME" /> politikasını kullanın.
 
        Politikanın ayarlanması, proxy .pac dosyası için URL belirtmenizi sağlar. Bu politika, yalnızca <ph name="PROXY_SETTINGS_POLICY_NAME" /> politikası belirtilmediğinde ve <ph name="PROXY_MODE_POLICY_NAME" /> politikasıyla <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> seçtiğinizde geçerli olur.
@@ -7479,6 +7477,7 @@
 <translation id="8417305981081876834">Kilit ekranı PIN'inin maksimum uzunluğunu ayarla</translation>
 <translation id="841977920223099909">Şifre koruma uyarısı tetikleyicisi</translation>
 <translation id="8420426128163801949">Kullanıcıların Bluetooth'u açıp kapatmalarına izin ver</translation>
+<translation id="8422658829373743789">Devre dışı bırakılan form kontrollerinde etkinlik göndermeyle ilgili yeni davranışı kontrol et</translation>
 <translation id="8422866312638683210">Politika ayarlanırsa <ph name="PRODUCT_NAME" />, kendini <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> hizmetine kaydettirmeye çalışır. Bu politikanın değeri, <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" /> hizmetinden alabileceğiniz kayıt jetonudur.
 
       Ayrıntılar için https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744 adresine bakın.</translation>
@@ -8010,6 +8009,19 @@
 <translation id="8947415621777543415">Cihaz konumunu bildir</translation>
 <translation id="8948062138228904066">Kimlik doğrulama sunucusu izin verilenler listesi</translation>
 <translation id="8951350807133946005">Disk önbellek dizinini ayarla</translation>
+<translation id="8952611478149810182">Devre dışı bırakılan form kontrollerinde etkinlik gönderme, diğer tarayıcılarla uyumluluğu ve geliştirici deneyimini iyileştirmek için Chromium'da değiştirilecek.
+
+Bu değişiklik; click, mouse up ve mouse down dışındaki disabled form kontrolü öğelerinde MouseEvents'in gönderilmesini sağlar. Yeni etkinliklerde mousemove, mouseenter ve mouseleave gibi kontrol öğeleri yer alır.
+
+Bu değişiklik, devre dışı bırakılan form kontrollerinin alt öğelerinde gönderilmiş click, mouseup ve mousedown kontrol öğelerinin de etkinlik yolunu kısaltır. Böylece bu öğelerin, disabled form kontrolünde veya üst öğelerde gönderilmemesini sağlar.
+
+Yeni davranış, bazı web sitelerinin işleyişini bozabilir.
+
+Bu politika etkinleştirilirse yeni davranış kullanılır.
+
+Bu politika devre dışı bırakılırsa eski davranış kullanılır.
+
+Bu politika ayarlanmazsa yeni davranış diğer Chromium kullanıcılarında olduğu gibi kullanılır.</translation>
 <translation id="8955719471735800169">Başa dön</translation>
 <translation id="8956312248048980644">Varsayılan olarak kaynak içeren veya kaynaklarla ilişkili aracı kümelemeye izin verir.</translation>
 <translation id="8970205333161758602"><ph name="PRODUCT_FRAME_NAME" /> reddetme sorusunu engelle</translation>
@@ -8119,9 +8131,6 @@
       Bu politika ayarlanmadan bırakılırsa hiçbir site için otomatik seçim yapılmaz.
 
       Geçerli URL kalıpları hakkında ayrıntılı bilgi için https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns adresine bakabilirsiniz.</translation>
-<translation id="906349948439898016">Güvenli olmayan bağlamlarda WebSQL kullanımı, M105 sürümünden itibaren varsayılan olarak etkin olsa da Chrome flag'i aracılığıyla devre dışı bırakılabilir.
-          Bu politika yanlış değerine ayarlanırsa veya ayarlanmadan bırakılırsa güvenli olmayan bağlamlarda WebSQL kullanımı devre dışı bırakılabilir.
-          Bu politika doğru değerine ayarlanırsa WebSQL devre dışı bırakılamaz.</translation>
 <translation id="9068629430243705879">bağlantı noktası 6566 (15.10.2021'e kadar engellemesi kaldırılabilir)</translation>
 <translation id="9069588907259547232">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa kayıtlı cihazlar, cihaz ses seviyesini bildirir.
 
@@ -8195,6 +8204,7 @@
 <translation id="9135033364005346124"><ph name="CLOUD_PRINT_NAME" /> proxy'sini etkinleştir</translation>
 <translation id="9136212796239682721">İndirme baloncuğu kullanıcı arayüzünü devre dışı bırak</translation>
 <translation id="9136399279941091445">Belirtilen cihaz politikaları etkinleştirildiğinde kapalı olduğu saat aralıkları</translation>
+<translation id="9142561920976791097">Devre dışı bırakılan form kontrollerinde yeni etkinlik gönderme davranışı kullanılacak.</translation>
 <translation id="9148720248753722892">SHA-1 imzalı sertifikalara izin verme</translation>
 <translation id="9149678135092892302">Sürüm bilgilerinin raporlanmasını devre dışı bırak</translation>
 <translation id="9150416707757015439">Bu politika uygun bulunmamaktadır. Lütfen, bunun yerine IncognitoModeAvailability politikasını kullanın.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 6064c35..3d3e558 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -448,11 +448,6 @@
       Принтери, доступні через розширення, також називаються розташуваннями постачальника послуг друку та включають усі розташування, пов’язані з розширенням <ph name="PRODUCT_NAME" />.
 
       Локальні принтери також називаються розташуваннями власного друку та включають розташування, доступні локальному пристрою, і спільні мережеві принтери.</translation>
-<translation id="1456449214426764016">Нестандартний API window.cgiStorageInfo не підтримується, його буде видалено.
-      Це правило знову активує API.
-      Якщо ввімкнути це правило, API window.cgiStorageInfo стане доступним.
-      Якщо його вимкнути або не налаштувати, API window.cgiStorageInfo буде недоступний.
-      </translation>
 <translation id="1456822151187621582">Windows (клієнти <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">Керувати поведінкою користувача в багатопрофільному режимі на пристроях з <ph name="PRODUCT_OS_NAME" />.
 
@@ -823,16 +818,6 @@
 
       Якщо не налаштувати це правило, користувачі зможуть керувати всім списком вибраних мов.</translation>
 <translation id="1803646570632580723">Список закріплених програм для відображення на панелі запуску</translation>
-<translation id="1805056271257244521">Якщо для правила вибрано значення Enabled, функція JavaScript setTimeout(), для якої час очікування становить 0 мс, не округлюватиме значення до 1 мс.
-          Якщо для правила вибрано значення Disabled, це значення округлюватиметься до 1 мс.
-          Якщо для правила не вибрано значення, використовуйте поведінку веб-переглядача за умовчанням для округлення значення функції setTimeout().
-
-          Ця функція відповідає веб-стандартам, але вона може змінювати послідовність завдань на веб-сторінці. Через це на сайтах, що якимось чином залежать від певної послідовності, може відбуватися несподівана поведінка. Також це може впливати на сайти, що містять багато функцій setTimeout(), час очікування для яких становить 0 мс (зокрема може зрости навантаження на ЦП).
-
-          Якщо правило не вказано, Chrome запускатиме цю зміну поступово в стабільній версії.
-
-          Це тимчасове правило, яке планується вилучити з Chrome (код помилки: 105). Кінцевий термін може бути подовжено, якщо це потрібно для підприємств.
-          </translation>
 <translation id="1808715480127969042">Блокувати файли cookie на цих сайтах</translation>
 <translation id="1810261428246410396">Дозволити використання миттєвої точки доступу.</translation>
 <translation id="1813638828646876133">Увімкнути автоматичне надсилання PIN-кодів на заблокованому екрані й екрані входу</translation>
@@ -6108,7 +6093,6 @@
       Якщо вибрано опцію "U2F", поведінка вбудованого другого фактора залежить від характеристик ключа безпеки FIDO U2F.
 
       Якщо вибрано опцію "U2F_EXTENDED", вбудований другий фактор забезпечує функції U2F і деякі розширення для особистого підтвердження.</translation>
-<translation id="6998179760789945134">Вимкнути інтерфейс WebSQL у незахищених ресурсах, якщо його не ввімкнено за допомогою експериментального параметра Chrome.</translation>
 <translation id="6999948519306285655">Це правило більше не підтримується. Натомість використовуйте правило <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        За допомогою налаштувань цього правила можна вказати URL-адресу файлу .pac проксі-сервера. Це правило діє, лише якщо правило <ph name="PROXY_SETTINGS_POLICY_NAME" /> не вказане, а для правила <ph name="PROXY_MODE_POLICY_NAME" /> вибрано значення <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" />.
@@ -8187,9 +8171,6 @@
       Якщо це правило не налаштовано, сертифікати для сайтів не вибираються автоматично.
 
       Докладніше про дійсні шаблони URL-адрес можна дізнатися на сторінці https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">Починаючи з версії M105, у незахищених контекстах інтерфейс WebSQL увімкнено за умовчанням, але його можна вимкнути за допомогою експериментального параметра Chrome.
-          Якщо для цього правила вибрати значення "неправда" або не налаштувати його, інтерфейс WebSQL у незахищених контекстах може бути вимкнено.
-          Якщо для правила вибрати значення "правда", WebSQL не можна вимкнути.</translation>
 <translation id="9068629430243705879">порт 6566 (можна розблокувати до 15.10.2021)</translation>
 <translation id="9069588907259547232">Якщо ввімкнути або не налаштувати це правило, зареєстровані пристрої повідомлятимуть дані про гучність аудіо на пристрої.
 
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 29647d4f..08b97fa6 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -449,11 +449,6 @@
       Máy in ở dạng tiện ích còn gọi là đích cung cấp dịch vụ in và bao gồm mọi đích thuộc một tiện ích của <ph name="PRODUCT_NAME" />.
 
       Máy in cục bộ (còn gọi là đích in gốc) bao gồm các đích dùng được cho thiết bị cục bộ và máy in dùng chung qua mạng.</translation>
-<translation id="1456449214426764016">API window.webkitStorageInfo không chuẩn không còn được dùng nữa và dự kiến sẽ bị xoá bỏ.
-      Chính sách này sẽ bật lại API này.
-      Nếu bạn đặt chính sách này thành Bật, thì API window.webkitStorageInfo sẽ hoạt động.
-      Nếu bạn đặt chính sách này thành Tắt hoặc không đặt, API window.webkitStorageInfo sẽ không hoạt động.
-      </translation>
 <translation id="1456822151187621582">Windows (ứng dụng <ph name="PRODUCT_OS_NAME" />):</translation>
 <translation id="1464848559468748897">Kiểm soát hành vi người dùng trong phiên có nhiều cấu hình trên thiết bị <ph name="PRODUCT_OS_NAME" />.
 
@@ -824,19 +819,6 @@
 
       Nếu bạn không đặt chính sách này, thì người dùng có thể thao tác trên toàn bộ danh sách gồm các ngôn ngữ ưu tiên.</translation>
 <translation id="1803646570632580723">Danh sách các ứng dụng được ghim sẽ hiển thị trong trình chạy</translation>
-<translation id="1805056271257244521">Khi chính sách này được đặt thành Bật, hàm JavaScript setTimeout() có thời gian chờ 0 ms sẽ không được làm tròn thành 1 ms.
-          Khi chính sách này được đặt thành Tắt, hàm JavaScript setTimeout() có thời gian chờ 0 ms sẽ được làm tròn thành 1 ms.
-          Khi chính sách này chưa được đặt, hãy sử dụng hành vi mặc định của trình duyệt cho hàm setTimeout().
-
-          Đây là một tính năng tuân thủ tiêu chuẩn web, nhưng nó có thể thay đổi thứ tự thao tác
-          trên trang web, dẫn đến hành vi bất ngờ trên những trang web phụ thuộc vào
-          một thứ tự nhất định theo một cách nào đó. Nó cũng có thể ảnh hưởng tới những trang web có nhiều hàm setTimeout()
-          sử dụng thời gian chờ 0 ms, ví dụ: tăng tải CPU.
-
-          Đối với người dùng không đặt chính sách này, Chrome sẽ ra mắt thay đổi từng bước trên kênh chính thức
-
-          Đây là một chính sách tạm thời và dự kiến sẽ được loại bỏ trong Chrome 105. Thời hạn này có thể được gia hạn nếu các doanh nghiệp có nhu cầu.
-          </translation>
 <translation id="1808715480127969042">Chặn cookie trên các trang web này</translation>
 <translation id="1810261428246410396">Cho phép sử dụng tính năng Chia sẻ Internet tức thì.</translation>
 <translation id="1813638828646876133">Bật chế độ tự động gửi mã PIN trên màn hình đăng nhập và màn hình khoá</translation>
@@ -949,7 +931,7 @@
 <translation id="1930127294345368978">Số trang tính tối đa được phép sử dụng cho một lệnh in</translation>
 <translation id="1933378685401357864">Hình nền</translation>
 <translation id="1935409768874953955">Chính sách thu thập dữ liệu ẩn danh nhập dưới dạng URL luôn hoạt động</translation>
-<translation id="1942626390957213764">Tắt trung tâm chia sẻ máy tính</translation>
+<translation id="1942626390957213764">Tắt trung tâm chia sẻ trên máy tính</translation>
 <translation id="194407941132272412">Tắt tính năng tách biệt trang web đối với tất cả trang web nhưng cho phép người dùng bật tính năng này</translation>
 <translation id="1945994447126139909">Chính sách doanh nghiệp này là để áp dụng trong thời gian ngắn và sẽ bị loại bỏ trong phiên bản <ph name="PRODUCT_NAME" /> 88.
 
@@ -3070,6 +3052,13 @@
 
       Việc đặt chính sách thành 2 sẽ chặn quảng cáo xâm nhập trên các trang web.</translation>
 <translation id="3877517141460819966">Chế độ xác thực hai yếu tố tích hợp</translation>
+<translation id="3877908683993837673">Chính sách này quy định ngăn phần mềm nào được dùng để giao tiếp với máy chủ DNS: máy khách DNS của hệ điều hành hay máy khách DNS tích hợp sẵn của <ph name="PRODUCT_NAME" />. Chính sách này không ảnh hưởng đến việc máy chủ DNS nào được sử dụng: chẳng hạn như nếu hệ điều hành được định cấu hình để sử dụng một máy chủ DNS của doanh nghiệp, thì máy khách DNS tích hợp sẵn sẽ sử dụng chính máy chủ đó. Chính sách này cũng không quy định việc sử dụng DNS-over-HTTPS. <ph name="PRODUCT_NAME" /> sẽ luôn sử dụng trình phân giải tích hợp sẵn cho các yêu cầu DNS-over-HTTPS. Vui lòng xem chính sách <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> để biết thông tin về cách kiểm soát DNS-over-HTTPS.
+
+      Nếu bạn đặt chính sách này thành Bật, máy khách DNS tích hợp sẵn sẽ được sử dụng (nếu có).
+
+      Nếu bạn đặt chính sách này thành Tắt, máy khách DNS tích hợp sẵn sẽ chỉ được sử dụng khi DNS-over-HTTPS đang được sử dụng.
+
+      Nếu bạn không đặt chính sách này, thì máy khách DNS tích hợp sẵn sẽ được bật theo mặc định trên <ph name="MS_WIN_NAME" />, <ph name="MAC_OS_NAME" />, <ph name="ANDROID_NAME" /> (khi cả DNS riêng và VPN đều không được bật) và <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="3879208481373875102">Định cấu hình danh sách Ứng dụng web buộc cài đặt</translation>
 <translation id="3879700444818346084">Tắt chính sách nhập mật khẩu đã lưu trong lần chạy đầu tiên</translation>
 <translation id="388237772682176890">Chính sách này không được dùng trong M53 nữa và bị xóa trong M54, vì hỗ trợ của SPDY/3.1 đã bị xóa.
@@ -4126,6 +4115,7 @@
 <translation id="5025239932007658691">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì thỉnh thoảng, <ph name="PRODUCT_NAME" /> sẽ gửi các truy vấn đến máy chủ của Google để truy xuất dấu thời gian chính xác.
 
       Nếu bạn đặt chính sách này thành Tắt, <ph name="PRODUCT_NAME" /> sẽ ngừng gửi các truy vấn đó.</translation>
+<translation id="5033070732967197381">Cho phép yêu cầu API WebAuthn trên các trang web có chứng chỉ TLS bị hỏng.</translation>
 <translation id="5034504101537897433">Bật tính năng báo cáo thông tin trong báo cáo sự cố của thiết bị</translation>
 <translation id="5039110755072335605">hỗ trợ các tiêu đề của yêu cầu không phải ký tự đại diện CORS</translation>
 <translation id="504116558738617678">Chỉ hiển thị các cảnh báo dung lượng ổ đĩa thấp nếu thiết bị không được quản lý hoặc chỉ có 1 người dùng</translation>
@@ -5598,6 +5588,7 @@
       Lưu ý: Hiện tại, chế độ tự động khởi động lại chỉ được bật khi màn hình đăng nhập đang hiển thị hoặc phiên hoạt động của ứng dụng kiosk đang diễn ra.</translation>
 <translation id="6556586932263358975">Cho phép khoá màn hình</translation>
 <translation id="6559057113164934677">Không cho phép bất kỳ trang web nào truy cập vào máy ảnh và micrô</translation>
+<translation id="65591220958874949">Sử dụng máy khách DNS tích hợp sẵn trên Windows, macOS, Android và ChromeOS</translation>
 <translation id="6559221564468029245">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì người dùng sẽ không được coi là không hoạt động khi âm thanh phát. Điều này ngăn hệ thống đạt tới thời gian trì hoãn khi ở chế độ rảnh và ngăn việc thực hiện hành động ở chế độ rảnh. Tuy nhiên việc giảm độ sáng màn hình, tắt màn hình và khóa màn hình sẽ vẫn xảy ra sau thời gian chờ đã định cấu hình của những hành động này bất kể hoạt động âm thanh.
 
       Nếu bạn đặt chính sách này thành Tắt, hệ thống có thể coi người dùng là không hoạt động bất kể hoạt động âm thanh là gì.</translation>
@@ -5685,6 +5676,7 @@
       – Nếu bạn đặt chính sách này thành Tắt, quản trị viên sẽ phải thông báo điều này cho người dùng cuối của thiết bị.</translation>
 <translation id="6609867253856597039">Đặt trải nghiệm người dùng đối với các tính năng bị tắt</translation>
 <translation id="6614557704487944013">Cho phép người dùng sử dụng trình duyệt <ph name="LACROS_NAME" /></translation>
+<translation id="661610294649586421">Không cho phép yêu cầu API WebAuthn trên các trang web có chứng chỉ TLS bị hỏng.</translation>
 <translation id="6617589895942747919">Thời gian bắt đầu của khoảng thời gian, bao gồm cả giá trị đầu và giá trị cuối.</translation>
 <translation id="6621830999036927230">Nếu bạn đặt chính sách này, máy chủ truy cập từ xa sẽ dùng URL này để xác thực những mã xác thực từ các máy khách truy cập từ xa để chấp nhận các đường kết nối. Tính năng này sẽ bị tắt nếu bạn để trống hoặc không đặt chính sách này.
 
@@ -5987,6 +5979,12 @@
 <translation id="6907778402784621686">Chặn nội dung không an toàn trên các trang web này</translation>
 <translation id="6908640907898649429">Định cấu hình nhà cung cấp dịch vụ tìm kiếm mặc định. Bạn có thể chỉ định nhà cung cấp dịch vụ tìm kiếm mặc định mà người dùng sẽ sử dụng hoặc chọn tắt tìm kiếm mặc định.</translation>
 <translation id="6913068954484253496">Cho phép <ph name="PRODUCT_NAME" /> kết nối với Thiết bị truyền trên tất cả các địa chỉ IP.</translation>
+<translation id="6915493311660114995">Nếu bạn đặt chính sách này thành Bật, <ph name="PRODUCT_NAME" /> sẽ
+cho phép yêu cầu Xác thực web trên các trang web có chứng chỉ TLS kèm theo
+lỗi (tức là các trang web được coi là không an toàn).
+
+Nếu bạn không đặt hoặc đặt chính sách này thành Tắt thì thao tác mặc định,
+tức là chặn những yêu cầu này, sẽ được áp dụng.</translation>
 <translation id="6919819553978815392">Nếu bạn bật hoặc không thiết lập chính sách này, thì <ph name="PRODUCT_NAME" /> và <ph name="LACROS_NAME" /> sẽ chấp nhận phiên khách đăng nhập. Phiên đăng nhập khách là hồ sơ <ph name="PRODUCT_NAME" />, trong đó tất cả cửa sổ đều ở chế độ ẩn danh.
 
       Nếu bạn tắt chính sách này, <ph name="PRODUCT_NAME" /> và <ph name="LACROS_NAME" /> sẽ không cho phép khởi động hồ sơ khách.
@@ -6092,7 +6090,6 @@
       Nếu bạn chọn 'U2F', hai yếu tố đã tích hợp sẽ tuân theo thông số FIDO U2F.
 
       Nếu bạn chọn 'U2F_EXTENDED', hai yếu tố đã tích hợp sẽ cung cấp các chức năng của U2F cùng với một số tiện ích để chứng thực cá nhân.</translation>
-<translation id="6998179760789945134">Tắt WebSQL trong bối cảnh không an toàn, trừ khi WebSQL được bật bởi Cờ Chrome.</translation>
 <translation id="6999948519306285655">Chính sách này không còn dùng nữa, vui lòng sử dụng <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        Nếu đặt chính sách này, bạn có thể chỉ định URL dẫn tới một tệp proxy .pac. Chính sách này chỉ có hiệu lực nếu bạn chưa chỉ định chính sách <ph name="PROXY_SETTINGS_POLICY_NAME" /> và đã chọn <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> cho <ph name="PROXY_MODE_POLICY_NAME" />.
@@ -6905,6 +6902,7 @@
 <translation id="782661371433719637">Không cho phép trang web nào yêu cầu quyền đọc các tệp và thư mục qua API Hệ thống tệp</translation>
 <translation id="7827127381981620448">Ứng dụng nền tảng</translation>
 <translation id="7829436838673974723">Cho phép các trang gửi yêu cầu XHR đồng bộ trong khi đóng trang</translation>
+<translation id="782978857350824974">Cho phép yêu cầu Xác thực web trên các trang web có chứng chỉ TLS bị hỏng.</translation>
 <translation id="7832225468415136704">Không cho phép tính năng Làm sạch Chrome quét hệ thống theo định kỳ và không cho phép người dùng tự quét</translation>
 <translation id="7833148823006528332">Mã ứng dụng Android, chẳng hạn như "com.google.android.gm" cho Gmail</translation>
 <translation id="7835218570504220753">Tắt tính năng tự động nhấp</translation>
@@ -8182,9 +8180,6 @@
       Nếu bạn không đặt chính sách này, thì sẽ không có trang web nào được thực hiện thao tác tự động chọn.
 
       Để biết thông tin chi tiết về mẫu URL hợp lệ, vui lòng truy cập vào https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
-<translation id="906349948439898016">WebSQL trong ngữ cảnh không an toàn được bật theo mặc định kể từ M105, nhưng cờ Chrome cũng có thể tắt chính sách này.
-          Nếu bạn tắt hoặc không đặt chính sách này, thì WebSQL trong ngữ cảnh không an toàn có thể bị tắt.
-          Nếu chính sách này được đặt thành bật, thì không tắt được WebSQL.</translation>
 <translation id="9068629430243705879">cổng 6566 (có thể được bỏ chặn cho đến ngày 15/10/2021)</translation>
 <translation id="9069588907259547232">Nếu bạn bật hoặc không đặt chính sách này, thì các thiết bị đã đăng ký sẽ báo cáo âm lượng của thiết bị.
 
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 21da714..fc64e42 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -447,11 +447,6 @@
       基于扩展程序的打印机也称为打印提供程序目的地,包括 <ph name="PRODUCT_NAME" /> 扩展程序名下的所有目的地。
 
       本地打印机也称为本机打印目的地,包括可供本地计算机使用的目的地以及共享的网络打印机。</translation>
-<translation id="1456449214426764016">非标准 API window.webkitStorageInfo 已被弃用,我们计划将其移除。
-      此政策用于重新启用该 API。
-      如果此政策已启用,window.webkitStorageInfo API 将可使用。
-      如果此政策已停用或未设置,window.webkitStorageInfo API 将无法使用。
-      </translation>
 <translation id="1456822151187621582">Windows(<ph name="PRODUCT_OS_NAME" />客户端):</translation>
 <translation id="1464848559468748897">控制<ph name="PRODUCT_OS_NAME" />设备上多个人资料会话中的用户行为。
 
@@ -505,6 +500,7 @@
       注意:若要指定多个服务器名称,请用英文逗号分隔。允许使用通配符 <ph name="WILDCARD_VALUE" />。</translation>
 <translation id="1488724823347505879">允许将 Android 应用中的内容分享给 Web 应用</translation>
 <translation id="1494138678487405397">为登录屏幕停用高对比度模式</translation>
+<translation id="1499129134689253257">控制 <ph name="OFFSET_PARENT" /> 的新行为</translation>
 <translation id="1501644502684303995">仅在登录页面强制执行在线登录</translation>
 <translation id="1502843533062797703">禁止插入第三方软件</translation>
 <translation id="1503969899251962413">通过设置此政策,您可为该设备指定 <ph name="PLUGIN_VM_NAME" /> 许可密钥。
@@ -817,16 +813,6 @@
 
       如果此政策未设置,用户便可操控整个首选语言列表。</translation>
 <translation id="1803646570632580723">要在启动程序中显示的固定应用的列表</translation>
-<translation id="1805056271257244521">如果此政策已启用,超时设置为 0 毫秒的 JavaScript setTimeout() 将不会延迟到 1 毫秒。
-          如果此政策已停用,超时设置为 0 毫秒的 JavaScript setTimeout() 将会延迟到 1 毫秒。
-          如果此政策未设置,浏览器的默认行为将会用于 setTimeout() 函数延迟。
-
-          该功能符合 Web 标准,但可能会改变网页上的任务排序,从而导致那些依赖于某种特定排序的网站出现意外行为,也可能影响大量使用超时设置为 0 毫秒的 setTimeout() 的网站(例如,增加 CPU 负载)。
-
-          对于未设置此政策的用户,Chrome 将在稳定渠道上逐步推出相应变更。
-
-          此政策只是暂时性政策,计划在 Chrome 105 中移除。如果企业有需要,这个期限可以延长。
-          </translation>
 <translation id="1808715480127969042">在这些网站上阻止 Cookie</translation>
 <translation id="1810261428246410396">允许使用即时网络共享功能。</translation>
 <translation id="1813638828646876133">允许在锁定的屏幕和登录屏幕上自动提交 PIN 码</translation>
@@ -2332,6 +2318,17 @@
 
       如果您未设置此政策,<ph name="PRODUCT_NAME" /> 便会加载已安装的所有本地消息传递主机。</translation>
 <translation id="3211426942294667684">浏览器登录设置</translation>
+<translation id="3217774577897351942">我们正在 <ph name="PRODUCT_NAME" /> 中更改 <ph name="OFFSET_PARENT" /> API,以使其符合 <ph name="FIREFOX_PRODUCT_NAME" /> 和 <ph name="SAFARI_PRODUCT_NAME" /> 中发生的变更。此政策可用于恢复旧行为,直到 M120。
+
+新行为可能会导致下述类型的某些网站无法正常运作:仅支持 <ph name="PRODUCT_NAME" />,且将 <ph name="OFFSET_PARENT" />、<ph name="OFFSET_TOP" /> 或 <ph name="OFFSET_LEFT" /> 与 Shadow DOM 配合使用。
+
+如需了解哪些 polyfill 可用于恢复旧行为以便迁移,请参阅 https://github.com/josepharhar/offsetparent-polyfills
+
+如果此政策已启用,系统将会使用新行为。
+
+如果此政策已停用,系统将会使用旧行为。
+
+如果此政策未设置,系统则会像其余 Chromium 用户一样使用新行为。</translation>
 <translation id="3219421230122020860">可使用无痕模式</translation>
 <translation id="3220624000494482595">如果自助服务终端应用是一款 Android 应用,它将无法控制 <ph name="PRODUCT_OS_NAME" />版本,即使此政策设为 <ph name="TRUE" /> 也是如此。</translation>
 <translation id="3222088741899353813">在登录屏幕上,鼠标左键是主按键</translation>
@@ -2728,6 +2725,7 @@
 <translation id="3589193811812796052">禁止跨源发送 WebAssembly 模块</translation>
 <translation id="3591527072193107424">启用“旧版浏览器支持”功能。</translation>
 <translation id="3591584750136265240">配置登录身份验证行为</translation>
+<translation id="3593905652755912452">系统将使用针对已停用的表单控件分派事件的旧行为。</translation>
 <translation id="3596112486106491038">启用虚拟机命令行访问权限</translation>
 <translation id="3603469950773500315">在新版 <ph name="CORS" /> 实现方案中启用 <ph name="CORS" /> 检查缓解功能,从而允许扩展程序保持兼容的行为,并允许 <ph name="PRODUCT_NAME" /> 无需进行 <ph name="CORS" /> 检查便可发送指定标头。
 
@@ -3027,6 +3025,7 @@
 <translation id="3891357445869647828">启用 JavaScript</translation>
 <translation id="3891769546914233112">提供“以图片形式打印 PDF 文件”选项</translation>
 <translation id="3897218615484393758">限制通过 SAML 验证身份的用户可在锁定屏幕上离线登录的时长</translation>
+<translation id="3897860452756794695">系统将使用新的 offsetParent 行为。</translation>
 <translation id="3898345958122666461">开启 NTLMv2</translation>
 <translation id="3898795800259311780">允许或拒绝屏幕截图</translation>
 <translation id="3903313632842363082">停用设备用户报告功能</translation>
@@ -4786,6 +4785,7 @@
 
       用户无法更改此设置。</translation>
 <translation id="5838452040629810808">允许使用光标突出显示</translation>
+<translation id="5842283830553218200">系统将默认使用针对已停用的表单控件分派事件的新行为。</translation>
 <translation id="5848438019586925019">用于生成密钥对的算法。</translation>
 <translation id="5851248808417680865">使用深色主题</translation>
 <translation id="585270638818921943">禁止用户使用来源不受信任的 Android 应用</translation>
@@ -5268,6 +5268,7 @@
       如果此政策已停用或未设置,用户便可以选择是否使用 <ph name="CHROME_SYNC_NAME" />。
 
       注意:如果 <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> 已启用,请勿开启此政策,因为此功能具有相同的客户端功能。在这种情况下,由 Google 托管的同步服务会完全关闭。</translation>
+<translation id="6320935916601887506">系统将默认使用新的 offsetParent 行为。</translation>
 <translation id="6327643515544933974">网络 USB 设置</translation>
 <translation id="6330882599388782338">允许网站使用传感器</translation>
 <translation id="6331167725613770725">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 85 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
@@ -5403,6 +5404,7 @@
 <translation id="6464074037294098618">自动填充地址信息</translation>
 <translation id="6467613372414922590">允许使用用户级本地消息传递主机(安装时没有管理员权限)</translation>
 <translation id="6473623140202114570">配置安全浏览功能在哪些网域中不会触发警告。</translation>
+<translation id="6474194795370862403">系统将使用旧的 offsetParent 行为。</translation>
 <translation id="647645276885673708">启用 <ph name="LACROS_NAME" /> 并将其设为主要浏览器</translation>
 <translation id="647698599569353771">允许启用“附近分享”功能。</translation>
 <translation id="6477685422297715670">键盘背光颜色:绿色</translation>
@@ -5996,7 +5998,6 @@
       如果选择“U2F”,集成的双重身份验证将会按照 FIDO U2F 规范发挥作用。
 
       如果选择“U2F_EXTENDED”,集成的双重身份验证将不仅会提供 U2F 功能,还会提供一些扩展功能以便进行个人验证。</translation>
-<translation id="6998179760789945134">停用不安全情境中的 WebSQL,除非已通过 Chrome flag 启用。</translation>
 <translation id="6999948519306285655">此政策已被弃用,请改用 <ph name="PROXY_SETTINGS_POLICY_NAME" />。
 
        通过设置此政策,您可以指定代理 .pac 文件的网址。此政策仅在 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 政策未被指定并且您选择了 <ph name="PROXY_MODE_POLICY_NAME" /> 中的 <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> 时生效。
@@ -7189,6 +7190,7 @@
 <translation id="8250048892729838843">此政策已被弃用。如果此政策已启用或未设置,系统便会允许设备接收精细报告控件的报告。
       如果此政策已停用,已注册的设备将不会接收精细报告控件的报告。</translation>
 <translation id="82530263956734297">要从屏蔽名单中排除的扩展程序 ID</translation>
+<translation id="8256006033157034334">此政策已被弃用且不再受支持,请改用 <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />。</translation>
 <translation id="8256688113167012935">控制 <ph name="PRODUCT_OS_NAME" />在登录屏幕上为相应的设备本地帐号显示的帐号名。
 
       如果设置了此策略,登录屏幕将为相应的设备本地帐号使用图片式登录选择器中指定的字符串。
@@ -7389,6 +7391,7 @@
 <translation id="8417305981081876834">设置锁定屏幕 PIN 码的长度上限</translation>
 <translation id="841977920223099909">密码保护服务警告功能触发条件</translation>
 <translation id="8420426128163801949">允许用户开启或关闭蓝牙</translation>
+<translation id="8422658829373743789">控制针对已停用的表单控件分派事件的新行为</translation>
 <translation id="8422866312638683210">如果您设置了此政策,<ph name="PRODUCT_NAME" /> 会尝试向 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />注册自身。此政策的值是一个可从 <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />检索的注册令牌。
 
       如需了解详情,请访问 https://support.google.com/chrome/a/answer/9301891?ref_topic=9301744。</translation>
@@ -7927,6 +7930,19 @@
 <translation id="8947415621777543415">报告设备位置</translation>
 <translation id="8948062138228904066">身份验证服务器许可名单</translation>
 <translation id="8951350807133946005">设置磁盘缓存目录</translation>
+<translation id="8952611478149810182">我们正在 Chromium 中更改针对已停用的表单控件分派事件的行为,以便更好地兼容其他浏览器并提升开发者体验。
+
+这项变更会针对已停用的表单控件元素分派除 click、mouseup 和 mousedown 之外的 MouseEvent。例如,新事件将包括 mousemove、mouseenter 和 mouseleave。
+
+另外,在系统针对已停用的表单控件的子项分派 click、mouseup 和 mousedown 时,这项变更还会截断相应的事件路径,以确保系统不会针对此类控件或其任何祖先分派这三种事件。
+
+新行为可能会导致某些网站无法正常运作。
+
+如果此政策已启用,系统将会使用新行为。
+
+如果此政策已停用,系统将会使用旧行为。
+
+如果此政策未设置,系统则会像其余 Chromium 用户一样使用新行为。</translation>
 <translation id="8955719471735800169">返回页首</translation>
 <translation id="8956312248048980644">默认允许使用以源为键的代理集群。</translation>
 <translation id="8970205333161758602">阻止显示 <ph name="PRODUCT_FRAME_NAME" />停止支持的提示</translation>
@@ -8036,9 +8052,6 @@
       如果此政策未设置,系统将不会为任何网站自动选择证书。
 
       如需详细了解有效网址格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation>
-<translation id="906349948439898016">自 M105 起,不安全情境中的 WebSQL 会默认处于开启状态,但可通过 Chrome flag 停用。
-          如果此政策设为 false 或未设置,则可以停用不安全情境中的 WebSQL。
-          如果此政策设为 true,将无法停用 WebSQL。</translation>
 <translation id="9068629430243705879">端口 6566(可在 2021 年 10 月 15 日之前解禁)</translation>
 <translation id="9069588907259547232">如果此政策已启用或未设置,已注册的设备将会报告设备音量。
 
@@ -8112,6 +8125,7 @@
 <translation id="9135033364005346124">启用“<ph name="CLOUD_PRINT_NAME" />”代理</translation>
 <translation id="9136212796239682721">停用下载气泡界面</translation>
 <translation id="9136399279941091445">发布指定设备政策后的非工作时间的间隔</translation>
+<translation id="9142561920976791097">系统将使用针对已停用的表单控件分派事件的新行为。</translation>
 <translation id="9148720248753722892">禁止使用 SHA-1 签名证书</translation>
 <translation id="9149678135092892302">停用关于版本信息的报告</translation>
 <translation id="9150416707757015439">此政策已弃用,请改用 IncognitoModeAvailability。在 <ph name="PRODUCT_NAME" />中启用隐身模式。如果已启用或未配置此设置,用户就可以在隐身模式下打开网页。如果停用此设置,用户就无法在隐身模式下打开网页。如果未设置此政策,将会启用此设置,用户便能使用隐身模式。</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 240f945..be4c5bf 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -443,10 +443,6 @@
       擴充印表機也稱為列印服務提供者目的地,其中包含所有屬於 <ph name="PRODUCT_NAME" /> 擴充功能的目的地。
 
       本機印表機也稱為原生列印目的地,其中包含可供本機電腦和共用網路印表機使用的目的地。</translation>
-<translation id="1456449214426764016">非標準 API window.webkitStorageInfo 已淘汰,我們也計劃將這個 API 移除。
-      這項政策會重新啟用這個 API。
-      如果將這項政策設為啟用,系統將開放使用 window.webkitStorageInfo API。如果將這項政策設為停用或不設定,window.webkitStorageInfo API 就無法使用。
-      </translation>
 <translation id="1456822151187621582">Windows (<ph name="PRODUCT_OS_NAME" />用戶端):</translation>
 <translation id="1464848559468748897">針對使用者在 <ph name="PRODUCT_OS_NAME" /> 裝置多重設定檔工作階段中的行為進行控制。
 
@@ -818,16 +814,6 @@
 
       如果不設定這項政策,使用者就能完全控制偏好語言清單。</translation>
 <translation id="1803646570632580723">要顯示在啟動器中的固定應用程式清單</translation>
-<translation id="1805056271257244521">如果啟用這項政策,逾時 0 毫秒的 JavaScript setTimeout() 將不會延遲到 1 毫秒。
-          如果停用這項政策,逾時 0 毫秒的 JavaScript setTimeout() 將延遲到 1 毫秒。
-          如果未設定這項政策,請為 setTimeout() 延遲函式使用瀏覽器的預設行為。
-
-          這項功能符合網路標準,但可能會改變網頁上的工作排序,導致網站上出現與某種特定排序相關的非預期行為,也可能影響許多將 setTimeout() 設為逾時 0 毫秒使用量 (例如增加 CPU 負載) 的網站。
-
-          對於未設定這項政策的使用者,Chrome 將在穩定版上逐步推出變更。
-
-          這項政策是暫時性的,預計會在 Chrome 105 中移除。如果企業之間有需要,我們將會延長這個期限。
-          </translation>
 <translation id="1808715480127969042">封鎖這些網站的 Cookie</translation>
 <translation id="1810261428246410396">允許使用即時網路共用功能。</translation>
 <translation id="1813638828646876133">在鎖定畫面和登入畫面上啟用 PIN 碼自動提交功能</translation>
@@ -5981,7 +5967,6 @@
       如果選取 [U2F],整合式雙重驗證將依照 FIDO U2F 規格運作。
 
       如果選取 [U2F_EXTENDED],整合式雙重驗證會為個人認證提供 U2F 功能和一些擴充功能。</translation>
-<translation id="6998179760789945134">除非已經透過 Chrome 旗標加以啟用,否則請在不安全內容中停用 WebSQL。</translation>
 <translation id="6999948519306285655">這項政策已遭淘汰,請改用 <ph name="PROXY_SETTINGS_POLICY_NAME" />。
 
        你可以透過這項政策,指定 Proxy .pac 檔案的網址。只有在 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 政策未設定,且你為 <ph name="PROXY_MODE_POLICY_NAME" /> 選取 <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> 時,這項政策才會生效。
@@ -8023,9 +8008,6 @@
       如果不設定這項政策,系統不會為任何網站自動選取憑證。
 
       如果想進一步瞭解有效的網址模式,請參閱 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation>
-<translation id="906349948439898016">自 M105 起,系統預設會在不安全的內容中啟用 WebSQL,但你可以透過 Chrome 旗標停用。
-          如果這項政策設為 False 或不設定,就可以停用不安全內容中的 WebSQL。
-          如果將這項政策設為 True,系統將無法停用 WebSQL。</translation>
 <translation id="9068629430243705879">通訊埠 6566 (2021 年 10 月 15 日前可解除封鎖)</translation>
 <translation id="9069588907259547232">如果將這項政策設為啟用或不設定,已註冊的裝置會回報裝置音量。
 
diff --git a/components/policy/resources/templates/policy_definitions/Miscellaneous/ContextAwareAccessSignalsAllowlist.yaml b/components/policy/resources/templates/policy_definitions/Miscellaneous/ContextAwareAccessSignalsAllowlist.yaml
index 406ee08..734bacf 100644
--- a/components/policy/resources/templates/policy_definitions/Miscellaneous/ContextAwareAccessSignalsAllowlist.yaml
+++ b/components/policy/resources/templates/policy_definitions/Miscellaneous/ContextAwareAccessSignalsAllowlist.yaml
@@ -1,16 +1,14 @@
-caption: Enable attestation flow for a list of URLs
+caption: Enable the <ph name="CHROME_ENTERPRISE_DEVICE_TRUST_CONNECTOR">Chrome Enterprise Device Trust Connector</ph> attestation flow for a list of URLs
 desc: |-
-  Enable <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR">Chrome Enterprise Platform Identity Connector</ph> for a list of URLs.
+  Enable <ph name="CHROME_ENTERPRISE_DEVICE_TRUST_CONNECTOR">Chrome Enterprise Device Trust Connector</ph> for a list of URLs.
 
-        Setting this policy specifies which URLs should be allowed to be part of the attestation flow to get the set of signals from the machine.
+  Setting this policy specifies for which URLs <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will offer to start the attestation flow. The latter allows those websites to get an attested set of context-aware signals from the device.
 
-        Leaving this policy unset or empty means that no endpoint will be able to start the attestation flow nor get signals from the machine.
+  Leaving this policy unset or empty means that no website will be able to start the attestation flow nor get signals from the device.
 
-        Note: Wildcards, <ph name="WILDCARD_VALUE">*</ph>, are allowed.
+  For <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph>, this policy is related to remote attestation where a certificate is automatically generated and uploaded to the server. For usage of the attestation flow on the device's login screen, please use the <ph name="DEVICE_LOGIN_SCREEN_CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME">DeviceLoginScreenContextAwareAccessSignalsAllowlist</ph> policy.
 
-        For ChromeOS, this policy is related to remote attestation where a certificate is automatically generated and uploaded to the Device Management Server.
-
-        For detailed information on valid <ph name="URL_LABEL">URL</ph> patterns, please see https://support.google.com/chrome/a?p=url_blocklist_filter_format.
+  For detailed information on valid <ph name="URL_LABEL">URL</ph> patterns, please see https://support.google.com/chrome/a?p=url_blocklist_filter_format.
 example_value:
 - https://example1.com
 - example2.com
@@ -32,7 +30,9 @@
     type: string
   type: array
 supported_on:
-- chrome.*:95-
-- chrome_os:95-
+- chrome.win:108-
+- chrome.linux:108-
+- chrome.mac:109-
+- chrome_os:108-
 tags: []
 type: list
diff --git a/components/policy/resources/templates/policy_definitions/Miscellaneous/DeviceLoginScreenContextAwareAccessSignalsAllowlist.yaml b/components/policy/resources/templates/policy_definitions/Miscellaneous/DeviceLoginScreenContextAwareAccessSignalsAllowlist.yaml
index ce8a77f..1535401 100644
--- a/components/policy/resources/templates/policy_definitions/Miscellaneous/DeviceLoginScreenContextAwareAccessSignalsAllowlist.yaml
+++ b/components/policy/resources/templates/policy_definitions/Miscellaneous/DeviceLoginScreenContextAwareAccessSignalsAllowlist.yaml
@@ -1,16 +1,14 @@
-caption: Enable attestation flow for a list of URLs on the login and lock screen
+caption: Enable the <ph name="CHROME_ENTERPRISE_DEVICE_TRUST_CONNECTOR">Chrome Enterprise Device Trust Connector</ph> attestation flow for a list of URLs on the login screen
 desc: |-
-  Enable <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR">Chrome Enterprise Platform Identity Connector</ph> for a list of URLs on the login and lock screen.
+  Enable <ph name="CHROME_ENTERPRISE_DEVICE_TRUST_CONNECTOR">Chrome Enterprise Device Trust Connector</ph> for a list of URLs on the login and lock screen.
 
-        Setting this policy specifies which URLs should be allowed to be part of the attestation flow to get the set of signals from the machine.
+  Setting this policy specifies for which URLs <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> will offer to start the attestation flow. The latter allows those websites to get an attested set of context-aware signals from the device.
 
-        Leaving this policy unset or empty means that no endpoint will be able to start the attestation flow nor get signals from the machine.
+  Leaving this policy unset or empty means that no website will be able to start the attestation flow nor get signals from the device.
 
-        Note: Wildcards, <ph name="WILDCARD_VALUE">*</ph>, are allowed.
+  This policy will only impact the attestation flow on the login and lock screen. To change the in-session attestation flow, please use the <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME">ContextAwareAccessSignalsAllowlist</ph> policy.
 
-        This policy will only impact the attestation flow on the login and lock screen. To change the in-session attestation flow, please use the <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME">ContextAwareAccessSignalsAllowlist</ph> policy.
-
-        For detailed information on valid <ph name="URL_LABEL">URL</ph> patterns, please see https://support.google.com/chrome/a?p=url_blocklist_filter_format.
+  For detailed information on valid <ph name="URL_LABEL">URL</ph> patterns, please see https://support.google.com/chrome/a?p=url_blocklist_filter_format.
 device_only: true
 example_value:
 - https://example1.com
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 3c2e7ea..814079da 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="1622571349153632031">Vegetariese kos</translation>
 <translation id="1623104350909869708">Verhoed hierdie bladsy om bykomende dialoë te skep</translation>
+<translation id="1633137413609266904">{0,plural, =1{Administrateursbeleid verhoed dat hierdie lêer oopgemaak kan word}other{Administrateursbeleid verhoed dat # lêers oopgemaak word}}</translation>
 <translation id="1634828734222219955">Totaal</translation>
 <translation id="163669211644121865">Belastingvoorbereiding en -beplanning</translation>
 <translation id="1638780421120290329">Kan nie kaart stoor nie.</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">Ontdoen herrangskikking</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> wil koppel</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Adminbeleid beveel aan dat jy nie hierdie lêer in <ph name="DESTINATION_NAME" /> oopmaak nie}other{Adminbeleid beveel aan dat jy nie hierdie lêers in<ph name="DESTINATION_NAME" /> oopmaak nie}}</translation>
 <translation id="3282085321714087552">Jou organisasie, <ph name="ENROLLMENT_DOMAIN" />, het sommige inligting, soos instellings of beleide, na die volgende webwerwe gestuur.</translation>
 <translation id="3282497668470633863">Voeg naam op kaart by</translation>
 <translation id="3286372614333682499">portret</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Herbegin jou toestel</translation>
 <translation id="4277028893293644418">Stel wagwoord terug</translation>
 <translation id="4278390842282768270">Toegelaat</translation>
+<translation id="4281998142035485137">{0,plural, =1{Maak vertroulike lêer oop?}other{Maak vertroulike lêers oop?}}</translation>
 <translation id="4282346679996504092">Opletberigte vir hierdie produk is afgeskakel en die boekmerk is verwyder</translation>
 <translation id="4285498937028063278">Ontspeld</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Hierdie kaart is in jou Google-rekening gestoor}other{Hierdie kaarte is in jou Google-rekening gestoor}}</translation>
@@ -1686,7 +1689,6 @@
 <translation id="52517543715119994">Leer meer oor Chrome-kenmerke</translation>
 <translation id="5251803541071282808">Wolk</translation>
 <translation id="5254043433801397071">Optimeer drukinhoud</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Vang nogtans vas</translation>
 <translation id="5255833070095767006">350x460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Adminbeleid beveel aan dat jy nie hierdie lêer na <ph name="DESTINATION_NAME" /> toe kopieer nie}other{Adminbeleid beveel aan dat jy nie hierdie lêers na <ph name="DESTINATION_NAME" /> toe kopieer nie}}</translation>
@@ -1929,6 +1931,7 @@
 <translation id="5903264686717710770">Titel:</translation>
 <translation id="5904360430676679685">Gesin en verhoudings</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (gesinkroniseer)</translation>
+<translation id="5911110632211230665">Oopmaak word verhoed</translation>
 <translation id="59174027418879706">Geaktiveer</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 word gebruik}other{# word gebruik}}</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index 90d5d00f..e8dbd42e 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -1684,7 +1684,6 @@
 <translation id="52517543715119994">ስለChrome ባህሪዎች ይወቁ</translation>
 <translation id="5251803541071282808">ደመና</translation>
 <translation id="5254043433801397071">የህትመት ይዘትን አትባ</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">ለማንኛውም አንሳ</translation>
 <translation id="5255833070095767006">350 x 460 ሚሜ</translation>
 <translation id="5257739419779698609">{0,plural, =1{የአስተዳዳሪ መመሪያ ይህን ፋይል ወደ <ph name="DESTINATION_NAME" /> መቅዳትን አይመክርም}one{የአስተዳዳሪ መመሪያ ይህን ፋይል ወደ <ph name="DESTINATION_NAME" /> መቅዳትን አይመክርም}other{የአስተዳዳሪ መመሪያ እነዚህን ፋይሎች ወደ <ph name="DESTINATION_NAME" /> መቅዳትን አይመክርም}}</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index ffb29b3..745eeab1 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -1426,6 +1426,7 @@
 <translation id="4646534391647090355">الانتقال الآن</translation>
 <translation id="4648262692072505866">‏يجب أن يكون تنسيق التجزئة SHA-256.</translation>
 <translation id="4652266463001779298">غير مسموح به</translation>
+<translation id="4652440160515225514">حظرت مؤسستك هذا الموقع الإلكتروني لأنه ينتهك إحدى السياسات.</translation>
 <translation id="4653167719759882810">دمج شركات واستحواذ</translation>
 <translation id="4658638640878098064">وضع دبوس أعلى اليسار</translation>
 <translation id="4660119392514473465">يمكنك الآن التصفُّح بخصوصية تامّة، ولن يتمكّن الأشخاص الآخرون الذين يستخدمون هذا الجهاز من الاطّلاع على نشاطك، ولكن سيتم حفظ عمليات التنزيل والإشارات المرجعية وعناصر قائمة القراءة.</translation>
@@ -1679,7 +1680,6 @@
 <translation id="52517543715119994">‏التعرّف على ميزات Chrome</translation>
 <translation id="5251803541071282808">السحابة الإلكترونية</translation>
 <translation id="5254043433801397071">أدوات تحسين أداء محتوى الطباعة</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">التقاط على أي حال</translation>
 <translation id="5255833070095767006">350 × 460 ملم</translation>
 <translation id="5257739419779698609">{0,plural, =1{لا تنصح سياسة المشرف بنسخ هذا الملف إلى <ph name="DESTINATION_NAME" />.}zero{لا تنصح سياسة المشرف بنسخ هذه الملفات إلى <ph name="DESTINATION_NAME" />.}two{لا تنصح سياسة المشرف بنسخ هذين الملفين إلى <ph name="DESTINATION_NAME" />.}few{لا تنصح سياسة المشرف بنسخ هذه الملفات إلى <ph name="DESTINATION_NAME" />.}many{لا تنصح سياسة المشرف بنسخ هذه الملفات إلى <ph name="DESTINATION_NAME" />.}other{لا تنصح سياسة المشرف بنسخ هذه الملفات إلى <ph name="DESTINATION_NAME" />.}}</translation>
@@ -2912,6 +2912,7 @@
 <translation id="8437238597147034694">تراجع عن ال&amp;نقل</translation>
 <translation id="8438476240229491014">تذكر هذا الإعداد</translation>
 <translation id="8438786541497918448">هل تريد استخدام الكاميرا والميكروفون؟</translation>
+<translation id="8438923942245957911">أبلغت مؤسستك عن هذا الموقع الإلكتروني.</translation>
 <translation id="8443613539889492016">موسيقى "راب" و"هيب هوب"</translation>
 <translation id="8444543005280733648">شبكات كمبيوتر</translation>
 <translation id="8446884382197647889">مزيد من المعلومات</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index 1e59f698..e4e87698 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -1682,7 +1682,6 @@
 <translation id="52517543715119994">Chromeৰ সুবিধাসমূহৰ বিষয়ে জানক</translation>
 <translation id="5251803541071282808">ক্লাউড</translation>
 <translation id="5254043433801397071">প্ৰিণ্টৰ সমল অপ্টিমাইজ কৰক</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">তথাপি কেপচাৰ কৰক</translation>
 <translation id="5255833070095767006">৩৫০ x ৪৬০ মি.মি.</translation>
 <translation id="5257739419779698609">{0,plural, =1{প্ৰশাসকৰ নীতিয়ে এই ফাইলটো <ph name="DESTINATION_NAME" />লৈ প্ৰতিলিপি কৰাটো চুপাৰিছ নকৰে}one{প্ৰশাসকৰ নীতিয়ে এই ফাইলটো <ph name="DESTINATION_NAME" />লৈ প্ৰতিলিপি কৰাটো চুপাৰিছ নকৰে}other{প্ৰশাসকৰ নীতিয়ে এই ফাইলটো <ph name="DESTINATION_NAME" />লৈ প্ৰতিলিপি কৰাটো চুপাৰিছ নকৰে}}</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb
index e54efa3..87e3751 100644
--- a/components/strings/components_strings_az.xtb
+++ b/components/strings/components_strings_az.xtb
@@ -1682,7 +1682,6 @@
 <translation id="52517543715119994">Chrome funksiyaları haqqında öyrənin</translation>
 <translation id="5251803541071282808">Bulud</translation>
 <translation id="5254043433801397071">Çap məzmununu optimallaşdırın</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Yenə də çəkiliş edilsin</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Administrator siyasəti bu faylı <ph name="DESTINATION_NAME" /> bölməsinə kopyalamağı tövsiyə etmir}other{Administrator siyasəti bu faylları <ph name="DESTINATION_NAME" /> bölməsinə kopyalamağı tövsiyə etmir}}</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index e8551b2..b8bccae 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -1431,6 +1431,7 @@
 <translation id="4646534391647090355">Перайсці туды</translation>
 <translation id="4648262692072505866">Хэш павінен мець фармат SHA-256.</translation>
 <translation id="4652266463001779298">Забаронена</translation>
+<translation id="4652440160515225514">Ваша арганізацыя заблакіравала гэты сайт, бо ён парушае адну з палітык.</translation>
 <translation id="4653167719759882810">Зліцці і набыцці</translation>
 <translation id="4658638640878098064">Скаба зверху злева</translation>
 <translation id="4660119392514473465">Цяпер вы можаце праглядаць вэб-старонкі ў прыватным рэжыме, іншыя карыстальнікі гэтай прылады не будуць бачыць вашы дзеянні. Аднак спампоўкі, закладкі і дададзеныя ў спісы на прагляд элементы будуць захоўвацца.</translation>
@@ -1684,7 +1685,6 @@
 <translation id="52517543715119994">Даведацца больш пра функцыі Chrome</translation>
 <translation id="5251803541071282808">Воблака</translation>
 <translation id="5254043433801397071">Аптымізаваць змесціва друку</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Усё роўна зняць</translation>
 <translation id="5255833070095767006">350 x 460 мм</translation>
 <translation id="5257739419779698609">{0,plural, =1{Палітыка адміністратара не рэкамендуе капіраваць гэты файл сюды: <ph name="DESTINATION_NAME" />}one{Палітыка адміністратара не рэкамендуе капіраваць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}few{Палітыка адміністратара не рэкамендуе капіраваць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}many{Палітыка адміністратара не рэкамендуе капіраваць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}other{Палітыка адміністратара не рэкамендуе капіраваць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Адрабіць перамяшчэнне</translation>
 <translation id="8438476240229491014">Запомніць гэту наладу</translation>
 <translation id="8438786541497918448">Выкарыстоўваць камеру і мікрафон?</translation>
+<translation id="8438923942245957911">Ваша арганізацыя пазначыла, што гэты сайт парушае правілы</translation>
 <translation id="8443613539889492016">Рэп і хіп-хоп</translation>
 <translation id="8444543005280733648">Камп'ютарныя сеткі</translation>
 <translation id="8446884382197647889">Даведацца больш</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index ba57cbc3..116084c5 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Към изтеглянията</translation>
 <translation id="4648262692072505866">Хеш стойността трябва да е във формат SHA-256.</translation>
 <translation id="4652266463001779298">Не е разрешено</translation>
+<translation id="4652440160515225514">Организацията ви е блокирала този сайт, защото нарушава правило.</translation>
 <translation id="4653167719759882810">Сливания и придобивания</translation>
 <translation id="4658638640878098064">Телбодиране горе вляво</translation>
 <translation id="4660119392514473465">Сега можете да сърфирате частно и другите хора, които използват това устройство, няма да виждат активността ви. Изтеглянията, отметките и елементите в списъка за четене обаче ще се запазват.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Научете повече за функциите на Chrome</translation>
 <translation id="5251803541071282808">Облак</translation>
 <translation id="5254043433801397071">Оптимизиране на съдържанието за отпечатване</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Заснемане въпреки това</translation>
 <translation id="5255833070095767006">350 x 460 мм</translation>
 <translation id="5257739419779698609">{0,plural, =1{Според администраторско правило копирането на този файл в(ъв) <ph name="DESTINATION_NAME" /> не се препоръчва}other{Според администраторско правило копирането на тези файлове в(ъв) <ph name="DESTINATION_NAME" /> не се препоръчва}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Отмяна на преместването</translation>
 <translation id="8438476240229491014">Запомняне на тази настройка</translation>
 <translation id="8438786541497918448">Да се използват ли камерата и микрофонът?</translation>
+<translation id="8438923942245957911">Организацията ви е подала сигнал за този сайт</translation>
 <translation id="8443613539889492016">Рап и хип-хоп</translation>
 <translation id="8444543005280733648">Компютърни мрежи</translation>
 <translation id="8446884382197647889">Научете повече</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index a887a8c1..9bbb4c2 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -1687,7 +1687,6 @@
 <translation id="52517543715119994">Chrome-এর ফিচার সম্পর্কে জানুন</translation>
 <translation id="5251803541071282808">ক্লাউড</translation>
 <translation id="5254043433801397071">প্রিন্ট কন্টেন্ট অপ্টিমাইজ করুন</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">তবুও ক্যাপচার করুন</translation>
 <translation id="5255833070095767006">৩৫০ x ৪৬০ মিমি</translation>
 <translation id="5257739419779698609">{0,plural, =1{অ্যাডমিনিস্ট্রেটরের নীতি অনুযায়ী <ph name="DESTINATION_NAME" />-এ এই ফাইল কপি করা যাবে না}one{অ্যাডমিনিস্ট্রেটরের নীতি অনুযায়ী <ph name="DESTINATION_NAME" />-এ এই ফাইল কপি করা যাবে না}other{অ্যাডমিনিস্ট্রেটরের নীতি অনুযায়ী <ph name="DESTINATION_NAME" />-এ এই ফাইল কপি করা যাবে না}}</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index 77a7116..2a80c53 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="1622571349153632031">Vegetarijanska kuhinja</translation>
 <translation id="1623104350909869708">Spriječi da ova stranica kreira dodatne dijaloške okvire</translation>
+<translation id="1633137413609266904">{0,plural, =1{Otvaranje te datoteke blokirano je prema administratorskim pravilima}one{Otvaranje # datoteke blokirano je prema administratorskim pravilima}few{Otvaranje # datoteke blokirano je prema administratorskim pravilima}other{Otvaranje # datoteka blokirano je prema administratorskim pravilima}}</translation>
 <translation id="1634828734222219955">Ukupno</translation>
 <translation id="163669211644121865">Priprema i planiranje poreza</translation>
 <translation id="1638780421120290329">Nije moguće sačuvati karticu</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Poništi preuređivanje</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> se želi povezati</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Prema pravilima administratora ne preporučuje se otvaranje ove datoteke na odredištu <ph name="DESTINATION_NAME" />}one{Prema pravilima administratora ne preporučuje se otvaranje ovih datoteka na odredištu <ph name="DESTINATION_NAME" />}few{Prema pravilima administratora ne preporučuje se otvaranje ovih datoteka na odredištu <ph name="DESTINATION_NAME" />}other{Prema pravilima administratora ne preporučuje se otvaranje ovih datoteka na odredištu <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Vaša organizacija, <ph name="ENROLLMENT_DOMAIN" />, je poslala određene informacije web lokacijama u nastavku, naprimjer postavke ili pravila.</translation>
 <translation id="3282497668470633863">Dodajte ime na kartici</translation>
 <translation id="3286372614333682499">uspravno</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Ponovo pokrenite uređaj</translation>
 <translation id="4277028893293644418">Ponovo postavi lozinku</translation>
 <translation id="4278390842282768270">Dozvoljeno</translation>
+<translation id="4281998142035485137">{0,plural, =1{Želite li otvoriti povjerljivu datoteku?}one{Želite li otvoriti povjerljive datoteke?}few{Želite li otvoriti povjerljive datoteke?}other{Želite li otvoriti povjerljive datoteke?}}</translation>
 <translation id="4282346679996504092">Obavještenja za ovaj proizvod su isključena, a oznaka uklonjena</translation>
 <translation id="4285498937028063278">Otkači</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ova kartica je sačuvana na vašem Google računu}one{Ove kartice su sačuvane na vašem Google računu}few{Ove kartice su sačuvane na vašem Google računu}other{Ove kartice su sačuvane na vašem Google računu}}</translation>
@@ -1686,7 +1689,6 @@
 <translation id="52517543715119994">Saznajte više o funkcijama Chromea</translation>
 <translation id="5251803541071282808">Oblak</translation>
 <translation id="5254043433801397071">Optimiziranje sadržaja za štampanje</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Ipak snimi</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Prema administratorskim pravilima nije preporučeno kopiranje ovog fajla na <ph name="DESTINATION_NAME" />}one{Prema administratorskim pravilima nije preporučeno kopiranje ovih fajlova na <ph name="DESTINATION_NAME" />}few{Prema administratorskim pravilima nije preporučeno kopiranje ovih fajlova na <ph name="DESTINATION_NAME" />}other{Prema administratorskim pravilima nije preporučeno kopiranje ovih fajlova na <ph name="DESTINATION_NAME" />}}</translation>
@@ -1929,6 +1931,7 @@
 <translation id="5903264686717710770">Naslov:</translation>
 <translation id="5904360430676679685">Porodica i međuljudski odnosi</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinhronizirano)</translation>
+<translation id="5911110632211230665">Otvaranje je blokirano</translation>
 <translation id="59174027418879706">Omogućeno</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 u upotrebi}one{# u upotrebi}few{# u upotrebi}other{# u upotrebi}}</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index f34eecf..ffea64e 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Porta-m'hi ara</translation>
 <translation id="4648262692072505866">El valor resum ha de tenir el format SHA-256.</translation>
 <translation id="4652266463001779298">No permès</translation>
+<translation id="4652440160515225514">La teva organització ha bloquejat aquest lloc web perquè infringeix una política.</translation>
 <translation id="4653167719759882810">Fusions i adquisicions</translation>
 <translation id="4658638640878098064">Grapat a la part superior esquerra</translation>
 <translation id="4660119392514473465">Ara pots navegar de manera privada i les altres persones que utilitzin aquest dispositiu no veuran la teva activitat. Tanmateix, les baixades, les adreces d'interès i els elements de la llista de lectura sí que es desaran.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Més informació sobre les funcions de Chrome</translation>
 <translation id="5251803541071282808">Núvol</translation>
 <translation id="5254043433801397071">Optimitza el contingut d'impressió</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Captura igualment</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{La política de l'administrador no recomana copiar aquest fitxer a <ph name="DESTINATION_NAME" />}other{La política de l'administrador no recomana copiar aquests fitxers a <ph name="DESTINATION_NAME" />}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Desfés el moviment</translation>
 <translation id="8438476240229491014">Recorda aquesta opció de configuració</translation>
 <translation id="8438786541497918448">Vols utilitzar la càmera i el micròfon?</translation>
+<translation id="8438923942245957911">La teva organització ha marcat aquest lloc web</translation>
 <translation id="8443613539889492016">Rap i hip-hop</translation>
 <translation id="8444543005280733648">Xarxes informàtiques</translation>
 <translation id="8446884382197647889">Més informació</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 0111f61..ab6a52a 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="1622571349153632031">Vegetariánská kuchyně</translation>
 <translation id="1623104350909869708">Bránit této stránce ve vytváření dalších dialogových oken</translation>
+<translation id="1633137413609266904">{0,plural, =1{Otevření tohoto souboru je blokováno zásadami administrátora}few{Otevření # souborů je blokováno zásadami administrátora}many{Otevření # souboru je blokováno zásadami administrátora}other{Otevření # souborů je blokováno zásadami administrátora}}</translation>
 <translation id="1634828734222219955">Celkem</translation>
 <translation id="163669211644121865">Zpracování a optimalizace daní</translation>
 <translation id="1638780421120290329">Kartu nelze uložit</translation>
@@ -893,6 +894,7 @@
 <translation id="3270847123878663523">&amp;Vrátit změnu uspořádání zpět</translation>
 <translation id="3271648667212143903">Web <ph name="ORIGIN" /> žádá o připojení</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Zásady administrátora nedoporučují otevřít tento soubor v cíli <ph name="DESTINATION_NAME" />}few{Zásady administrátora nedoporučují otevřít tyto soubory v cíli <ph name="DESTINATION_NAME" />}many{Zásady administrátora nedoporučují otevřít tyto soubory v cíli <ph name="DESTINATION_NAME" />}other{Zásady administrátora nedoporučují otevřít tyto soubory v cíli <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Vaše organizace, <ph name="ENROLLMENT_DOMAIN" />, odeslala určité informace (například nastavení nebo zásady) následujícím webům.</translation>
 <translation id="3282497668470633863">Přidání jména na kartě</translation>
 <translation id="3286372614333682499">na výšku</translation>
@@ -1291,6 +1293,7 @@
 <translation id="4275830172053184480">Restartovat zařízení</translation>
 <translation id="4277028893293644418">Resetovat heslo</translation>
 <translation id="4278390842282768270">Povoleno</translation>
+<translation id="4281998142035485137">{0,plural, =1{Otevřít důvěrný soubor?}few{Otevřít důvěrné soubory?}many{Otevřít důvěrné soubory?}other{Otevřít důvěrné soubory?}}</translation>
 <translation id="4282346679996504092">Upozornění pro tento produkt byla vypnuta a záložka byla odstraněna</translation>
 <translation id="4285498937028063278">Odepnout</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Tato karta byla uložena do vašeho učtu Google}few{Tyto karty byly uloženy do vašeho účtu Google.}many{Tyto karty byly uloženy do vašeho účtu Google.}other{Tyto karty byly uloženy do vašeho účtu Google.}}</translation>
@@ -1428,6 +1431,7 @@
 <translation id="4646534391647090355">Zobrazit</translation>
 <translation id="4648262692072505866">Hodnota hash musí být ve formátu SHA-256.</translation>
 <translation id="4652266463001779298">Není povoleno</translation>
+<translation id="4652440160515225514">Vaše organizace tento web zablokovala, protože porušuje zásady.</translation>
 <translation id="4653167719759882810">Fúze a akvizice</translation>
 <translation id="4658638640878098064">Sponka vlevo nahoře</translation>
 <translation id="4660119392514473465">Nyní můžete procházet internet v soukromí a ostatní uživatelé tohoto zařízení vaši aktivitu neuvidí. Budou se ale ukládat stažené soubory, záložky a položky na seznamu četby.</translation>
@@ -1681,7 +1685,6 @@
 <translation id="52517543715119994">Informace o funkcích Chromu</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Optimalizovat obsah tisku</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Přesto pořídit</translation>
 <translation id="5255833070095767006">350 × 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Zásady administrátora nedoporučují kopírovat tento soubor do následujícího cíle: <ph name="DESTINATION_NAME" />}few{Zásady administrátora nedoporučují kopírovat tyto soubory do následujícího cíle: <ph name="DESTINATION_NAME" />}many{Zásady administrátora nedoporučují kopírovat tyto soubory do následujícího cíle: <ph name="DESTINATION_NAME" />}other{Zásady administrátora nedoporučují kopírovat tyto soubory do následujícího cíle: <ph name="DESTINATION_NAME" />}}</translation>
@@ -1924,6 +1927,7 @@
 <translation id="5903264686717710770">Název:</translation>
 <translation id="5904360430676679685">Rodina a vztahy</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronizováno)</translation>
+<translation id="5911110632211230665">Otevření je blokováno</translation>
 <translation id="59174027418879706">Povoleno</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Používá se 1}few{Používají se #}many{Používá se #}other{Používá se #}}</translation>
@@ -2914,6 +2918,7 @@
 <translation id="8437238597147034694">&amp;Vrátit přesunutí zpět</translation>
 <translation id="8438476240229491014">Zapamatovat toto nastavení</translation>
 <translation id="8438786541497918448">Použít kameru a mikrofon?</translation>
+<translation id="8438923942245957911">Vaše organizace tento web nahlásila</translation>
 <translation id="8443613539889492016">Hip-hop a rap</translation>
 <translation id="8444543005280733648">Počítačové sítě</translation>
 <translation id="8446884382197647889">Další informace</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index 93937e81..3be6817 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Ewch â fi yno nawr</translation>
 <translation id="4648262692072505866">Rhaid i'r hash fod yn y fformat SHA-256.</translation>
 <translation id="4652266463001779298">Ni chaniateir</translation>
+<translation id="4652440160515225514">Mae eich sefydliad wedi rhwystro'r wefan hon oherwydd ei bod yn torri polisi.</translation>
 <translation id="4653167719759882810">Cyfuniadau a chaffaeliadau</translation>
 <translation id="4658638640878098064">Stapl ar y chwith uchaf</translation>
 <translation id="4660119392514473465">Nawr gallwch bori'n breifat, a ni fydd pobl eraill sy'n defnyddio'r ddyfais hon yn gweld eich gweithgarwch. Fodd bynnag, bydd lawrlwythiadau, nodau tudalen ac eitemau'r rhestr ddarllen yn cael eu cadw.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Dysgu am nodweddion Chrome</translation>
 <translation id="5251803541071282808">Cwmwl</translation>
 <translation id="5254043433801397071">Optimeiddio'r cynnwys i'w argraffu</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Cipio beth bynnag</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Nid yw'r polisi gweinyddwr yn argymell copïo'r ffeil hon i <ph name="DESTINATION_NAME" />}zero{Nid yw'r polisi gweinyddwr yn argymell copïo'r ffeiliau hyn i <ph name="DESTINATION_NAME" />}two{Nid yw'r polisi gweinyddwr yn argymell copïo'r ffeiliau hyn i <ph name="DESTINATION_NAME" />}few{Nid yw'r polisi gweinyddwr yn argymell copïo'r ffeiliau hyn i <ph name="DESTINATION_NAME" />}many{Nid yw'r polisi gweinyddwr yn argymell copïo'r ffeiliau hyn i <ph name="DESTINATION_NAME" />}other{Nid yw'r polisi gweinyddwr yn argymell copïo'r ffeiliau hyn i <ph name="DESTINATION_NAME" />}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Dadwneud symud</translation>
 <translation id="8438476240229491014">Cofiwch y gosodiad hwn</translation>
 <translation id="8438786541497918448">Defnyddio camera a meicroffon?</translation>
+<translation id="8438923942245957911">Mae'r wefan hon wedi'i fflagio gan eich sefydliad</translation>
 <translation id="8443613539889492016">Rap a hip-hop</translation>
 <translation id="8444543005280733648">Rhwydweithiau cyfrifiadurol</translation>
 <translation id="8446884382197647889">Dysgu rhagor</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index d7521df..a383f6c 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -1070,7 +1070,7 @@
 <translation id="3705189812819839667"><ph name="RESULT_OWNER" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
 <translation id="370665806235115550">Indlæser...</translation>
 <translation id="3709599264800900598">Tekst, du har kopieret</translation>
-<translation id="370972442370243704">Aktivér Søgninger</translation>
+<translation id="370972442370243704">Aktivér Søgeforløb</translation>
 <translation id="3709866969787468031">Lyd- og musiksoftware</translation>
 <translation id="3711895659073496551">Suspender</translation>
 <translation id="3712006010833051684">Konvolut nr. 10</translation>
@@ -1384,7 +1384,7 @@
 <translation id="4506599922270137252">Kontakte systemadministratoren</translation>
 <translation id="450710068430902550">Deling med administrator</translation>
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" /> – tryk på Tab-tasten efterfulgt af Enter for at oversætte denne side med Google Oversæt</translation>
-<translation id="4514308731478712184">Deaktiver Søgninger</translation>
+<translation id="4514308731478712184">Deaktiver Søgeforløb</translation>
 <translation id="4515275063822566619">Kort og adresser stammer fra Chrome og din Google-konto (<ph name="ACCOUNT_EMAIL" />). Du kan administrere dem i <ph name="BEGIN_LINK" />Indstillinger<ph name="END_LINK" />.</translation>
 <translation id="4520048001084013693">Administratorpolitikken tillader ikke, at du downloader denne fil</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Få flere oplysninger om Chrome-funktioner</translation>
 <translation id="5251803541071282808">Skyen</translation>
 <translation id="5254043433801397071">Optimer udskriftsindhold</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Tag screenshot alligevel</translation>
 <translation id="5255833070095767006">350 x 460 tommer</translation>
 <translation id="5257739419779698609">{0,plural, =1{Administratorpolitikken fraråder at flytte denne fil til <ph name="DESTINATION_NAME" />}one{Administratorpolitikken fraråder at flytte denne fil til <ph name="DESTINATION_NAME" />}other{Administratorpolitikken fraråder at flytte disse filer til <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index ef09fb6..9792f17 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -1430,6 +1430,7 @@
 <translation id="4646534391647090355">Jetzt aufrufen</translation>
 <translation id="4648262692072505866">Der Hashwert muss das Format SHA-256 haben.</translation>
 <translation id="4652266463001779298">Nicht zugelassen</translation>
+<translation id="4652440160515225514">Deine Organisation hat diese Website blockiert, weil sie gegen eine Richtlinie verstößt.</translation>
 <translation id="4653167719759882810">Fusionen und Übernahmen</translation>
 <translation id="4658638640878098064">Heftklammer oben links</translation>
 <translation id="4660119392514473465">Du kannst jetzt privat surfen. Andere Personen, die dieses Gerät verwenden, können deine Aktivität nicht sehen. Downloads, Lesezeichen und Webseiten auf deiner Leseliste werden jedoch gespeichert.</translation>
@@ -1683,7 +1684,6 @@
 <translation id="52517543715119994">Informationen zu Chrome-Funktionen</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Druckinhalte optimieren</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Trotzdem aufnehmen</translation>
 <translation id="5255833070095767006">350 × 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Gemäß der Administratorrichtlinie wird nicht empfohlen, diese Datei nach <ph name="DESTINATION_NAME" /> zu kopieren}other{Gemäß der Administratorrichtlinie wird nicht empfohlen, diese Dateien nach <ph name="DESTINATION_NAME" /> zu kopieren}}</translation>
@@ -2918,6 +2918,7 @@
 <translation id="8437238597147034694">&amp;Verschieben rückgängig machen</translation>
 <translation id="8438476240229491014">Einstellung speichern</translation>
 <translation id="8438786541497918448">Kamera und Mikrofon verwenden?</translation>
+<translation id="8438923942245957911">Diese Website wurde von deiner Organisation gemeldet</translation>
 <translation id="8443613539889492016">Rap und Hip-Hop</translation>
 <translation id="8444543005280733648">Computernetzwerke</translation>
 <translation id="8446884382197647889">Weitere Informationen</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 071f5747..4effeb8 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Κάμερα</translation>
 <translation id="1622571349153632031">Κουζίνα για χορτοφάγους</translation>
 <translation id="1623104350909869708">Αποτροπή δημιουργίας πρόσθετων παραθύρων διαλόγου από αυτήν τη σελίδα</translation>
+<translation id="1633137413609266904">{0,plural, =1{Το άνοιγμα αυτού του αρχείου έχει αποκλειστεί από την πολιτική διαχειριστή}other{Το άνοιγμα # αρχείων έχει αποκλειστεί από την πολιτική διαχειριστή}}</translation>
 <translation id="1634828734222219955">Σύνολο</translation>
 <translation id="163669211644121865">Προετοιμασία και προγραμματισμός φόρου</translation>
 <translation id="1638780421120290329">Δεν είναι δυνατή η αποθήκευση της κάρτας</translation>
@@ -897,6 +898,7 @@
 <translation id="3270847123878663523">&amp;Αναίρεση αναδιάταξης</translation>
 <translation id="3271648667212143903">Ο ιστότοπος <ph name="ORIGIN" /> επιθυμεί σύνδεση</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Η πολιτική διαχειριστή δεν συνιστά το άνοιγμα αυτού του αρχείου στο <ph name="DESTINATION_NAME" />}other{Η πολιτική διαχειριστή δεν συνιστά το άνοιγμα αυτών των αρχείων στο <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Ο οργανισμός σας, <ph name="ENROLLMENT_DOMAIN" />, έστειλε ορισμένες πληροφορίες στους παρακάτω ιστοτόπους, όπως ρυθμίσεις ή πολιτικές.</translation>
 <translation id="3282497668470633863">Προσθήκη ονόματος στην κάρτα</translation>
 <translation id="3286372614333682499">κατακόρυφος προσανατολισμός</translation>
@@ -1297,6 +1299,7 @@
 <translation id="4275830172053184480">Επανεκκινήστε τη συσκευή σας</translation>
 <translation id="4277028893293644418">Επαναφορά κωδικού πρόσβασης</translation>
 <translation id="4278390842282768270">Επιτρέπεται</translation>
+<translation id="4281998142035485137">{0,plural, =1{Άνοιγμα εμπιστευτικού αρχείου;}other{Άνοιγμα εμπιστευτικών αρχείων;}}</translation>
 <translation id="4282346679996504092">Οι ειδοποιήσεις για αυτό το προϊόν έχουν απενεργοποιηθεί και ο σελιδοδείκτης καταργήθηκε.</translation>
 <translation id="4285498937028063278">Ξεκαρφίτσωμα</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Αυτή η κάρτα αποθηκεύτηκε στον Λογαριασμό σας Google}other{Αυτές οι κάρτες αποθηκεύτηκαν στον Λογαριασμό σας Google}}</translation>
@@ -1434,6 +1437,7 @@
 <translation id="4646534391647090355">Μετάβαση εκεί τώρα</translation>
 <translation id="4648262692072505866">Ο κατακερματισμός πρέπει να έχει τη μορφή SHA-256.</translation>
 <translation id="4652266463001779298">Δεν επιτρέπεται</translation>
+<translation id="4652440160515225514">Ο οργανισμός σας έχει αποκλείσει αυτόν τον ιστότοπο, επειδή παραβαίνει μια πολιτική.</translation>
 <translation id="4653167719759882810">Συγχωνεύσεις και εξαγορές</translation>
 <translation id="4658638640878098064">Συρραφή επάνω αριστερά</translation>
 <translation id="4660119392514473465">Στο εξής μπορείτε να περιηγηθείτε ιδιωτικά και η δραστηριότητά σας δεν θα είναι ορατή στα άλλα άτομα που χρησιμοποιούν αυτήν τη συσκευή. Ωστόσο, οι λήψεις, οι σελιδοδείκτες και τα στοιχεία στη λίστα ανάγνωσης θα αποθηκεύονται.</translation>
@@ -1688,7 +1692,6 @@
 <translation id="52517543715119994">Μάθετε σχετικά με τις λειτουργίες του Chrome</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Βελτιστοποίηση περιεχομένου εκτύπωσης</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Λήψη ούτως ή άλλως</translation>
 <translation id="5255833070095767006">350 x 460 χιλ.</translation>
 <translation id="5257739419779698609">{0,plural, =1{Η πολιτική διαχειριστή δεν συνιστά την αντιγραφή αυτού του αρχείου σε <ph name="DESTINATION_NAME" />.}other{Η πολιτική διαχειριστή δεν συνιστά την αντιγραφή αυτών των αρχείων σε <ph name="DESTINATION_NAME" />.}}</translation>
@@ -1932,6 +1935,7 @@
 <translation id="5903264686717710770">Τίτλος:</translation>
 <translation id="5904360430676679685">Οικογένεια και σχέσεις</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (συγχρονισμένο)</translation>
+<translation id="5911110632211230665">Το άνοιγμα έχει αποκλειστεί</translation>
 <translation id="59174027418879706">Ενεργοποιημένο</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 σε χρήση}other{# σε χρήση}}</translation>
@@ -2925,6 +2929,7 @@
 <translation id="8437238597147034694">&amp;Αναίρεση μετακίνησης</translation>
 <translation id="8438476240229491014">Απομνημόνευση αυτής της ρύθμισης</translation>
 <translation id="8438786541497918448">Χρήση της κάμερας και του μικροφώνου;</translation>
+<translation id="8438923942245957911">Αυτός ο ιστότοπος έχει επισημανθεί από τον οργανισμό σας</translation>
 <translation id="8443613539889492016">Ραπ και χιπ χοπ</translation>
 <translation id="8444543005280733648">Δίκτυα υπολογιστών</translation>
 <translation id="8446884382197647889">Μάθετε περισσότερα</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 1bc1126f..557b21b 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -1689,7 +1689,6 @@
 <translation id="52517543715119994">Learn about Chrome features</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Optimise print content</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Capture anyway</translation>
 <translation id="5255833070095767006">350 mm x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Administrator policy doesn’t recommend copying this file to <ph name="DESTINATION_NAME" />}other{Administrator policy doesn’t recommend copying these files to <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 459cf96..257507d 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -1433,6 +1433,7 @@
 <translation id="4646534391647090355">Ir ahora</translation>
 <translation id="4648262692072505866">El hash debe tener el formato SHA-256.</translation>
 <translation id="4652266463001779298">No se permite.</translation>
+<translation id="4652440160515225514">Tu organización bloqueó este sitio porque infringe una política.</translation>
 <translation id="4653167719759882810">Fusiones y adquisiciones</translation>
 <translation id="4658638640878098064">Grapa en la esquina superior izquierda</translation>
 <translation id="4660119392514473465">Ahora puedes navegar de forma privada; las demás personas que usan este dispositivo no verán tu actividad. Sin embargo, se guardarán las descargas, los favoritos y los elementos de la lista de lectura.</translation>
@@ -1686,7 +1687,6 @@
 <translation id="52517543715119994">Más información sobre las funciones de Chrome</translation>
 <translation id="5251803541071282808">Nube</translation>
 <translation id="5254043433801397071">Optimizar el contenido de impresión</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Capturar de todos modos</translation>
 <translation id="5255833070095767006">350 × 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{La política del administrador no recomienda copiar este archivo a <ph name="DESTINATION_NAME" />.}other{La política del administrador no recomienda copiar estos archivos a <ph name="DESTINATION_NAME" />.}}</translation>
@@ -2921,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;Deshacer Mover</translation>
 <translation id="8438476240229491014">Recordar esta configuración</translation>
 <translation id="8438786541497918448">¿Quieres permitir el uso de la cámara y el micrófono?</translation>
+<translation id="8438923942245957911">Tu organización marcó este sitio</translation>
 <translation id="8443613539889492016">Rap y hip-hop</translation>
 <translation id="8444543005280733648">Redes de computadoras</translation>
 <translation id="8446884382197647889">Más información</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index acab184..1715c181 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Ir allí ahora</translation>
 <translation id="4648262692072505866">El hash debe tener el formato SHA‑256.</translation>
 <translation id="4652266463001779298">No permitido</translation>
+<translation id="4652440160515225514">Tu organización ha bloqueado este sitio porque infringe una política.</translation>
 <translation id="4653167719759882810">Fusiones y adquisiciones</translation>
 <translation id="4658638640878098064">Grapado en la parte superior izquierda</translation>
 <translation id="4660119392514473465">Ahora puedes navegar de forma privada sin que los demás usuarios de este dispositivo vean tu actividad. Sin embargo, se guardarán las descargas, los marcadores y los elementos de la lista de lectura.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Consulta información sobre las funciones de Chrome</translation>
 <translation id="5251803541071282808">Nube</translation>
 <translation id="5254043433801397071">Optimizar el contenido de impresión</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Capturar de todos modos</translation>
 <translation id="5255833070095767006">350x460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{La política del administrador no recomienda copiar este archivo en <ph name="DESTINATION_NAME" />}other{La política del administrador no recomienda copiar estos archivos en <ph name="DESTINATION_NAME" />}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Deshacer movimiento</translation>
 <translation id="8438476240229491014">Recordar esta configuración</translation>
 <translation id="8438786541497918448">¿Usar cámara y micrófono?</translation>
+<translation id="8438923942245957911">Tu organización ha marcado este sitio</translation>
 <translation id="8443613539889492016">Rap y hip-hop</translation>
 <translation id="8444543005280733648">Redes informáticas</translation>
 <translation id="8446884382197647889">Más información</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 814aa7d..2278cec 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Vii mind kohe sinna</translation>
 <translation id="4648262692072505866">Räsiväärtuse vorming peab olema SHA-256.</translation>
 <translation id="4652266463001779298">Pole lubatud</translation>
+<translation id="4652440160515225514">Teie organisatsioon on selle saidi blokeerinud, sest see rikub eeskirju.</translation>
 <translation id="4653167719759882810">Ühinemised ja omandamised</translation>
 <translation id="4658638640878098064">Kirjaklamber vasakul ülal</translation>
 <translation id="4660119392514473465">Nüüd saate sirvida privaatselt ja teised seadme kasutajad ei näe teie tegevusi. Allalaaditud failid, järjehoidjad ja lugemisloendi üksused siiski salvestatakse.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Teave Chrome'i funktsioonide kohta</translation>
 <translation id="5251803541071282808">Pilv</translation>
 <translation id="5254043433801397071">Prindi sisu optimeerimine</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Jäädvusta ikkagi</translation>
 <translation id="5255833070095767006">350 × 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Administraatori reegel ei soovita seda faili sihtkohta <ph name="DESTINATION_NAME" /> kopeerida}other{Administraatori reegel ei soovita neid faile sihtkohta <ph name="DESTINATION_NAME" /> kopeerida}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Võta teisaldamine tagasi</translation>
 <translation id="8438476240229491014">Pea see seade meeles</translation>
 <translation id="8438786541497918448">Kas kasutada kaamerat ja mikrofoni?</translation>
+<translation id="8438923942245957911">Teie organisatsioon on selle saidi märgistanud</translation>
 <translation id="8443613539889492016">Räpp ja hiphop</translation>
 <translation id="8444543005280733648">Arvutivõrgud</translation>
 <translation id="8446884382197647889">Lisateave</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 26818b5d..9d8b900 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -1428,6 +1428,7 @@
 <translation id="4646534391647090355">Eraman nazazu hara</translation>
 <translation id="4648262692072505866">Hash-ak SHA-256 formatua izan behar du.</translation>
 <translation id="4652266463001779298">Baimenik gabe</translation>
+<translation id="4652440160515225514">Erakundeak blokeatu egin du webgunea, gidalerro bat urratzen duelako.</translation>
 <translation id="4653167719759882810">Fusioak eta erosketak</translation>
 <translation id="4658638640878098064">Grapa bat goian, ezkerretara</translation>
 <translation id="4660119392514473465">Modu pribatuan araka dezakezu sarea, gailua erabiltzen duten gainerakoek zure jardueren berririk izan ez dezaten. Hala ere, deskargak, laster-markak eta irakurketa-zerrendako elementuak gorde egingo dira.</translation>
@@ -1681,7 +1682,6 @@
 <translation id="52517543715119994">Lortu informazio gehiago Chrome-ren eginbideei buruz</translation>
 <translation id="5251803541071282808">Hodeia</translation>
 <translation id="5254043433801397071">Optimizatu inprimatu beharreko edukia</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Egin pantaila-argazki edo -grabaketa bat, halere</translation>
 <translation id="5255833070095767006">350 × 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Administratzailearen gidalerroek ez dute gomendatzen fitxategia hemen kopiatzea: <ph name="DESTINATION_NAME" />}other{Administratzailearen gidalerroek ez dute gomendatzen fitxategiak hemen kopiatzea: <ph name="DESTINATION_NAME" />}}</translation>
@@ -2915,6 +2915,7 @@
 <translation id="8437238597147034694">&amp;Desegin mugitzea</translation>
 <translation id="8438476240229491014">Gogoratu ezarpen hau</translation>
 <translation id="8438786541497918448">Kamera eta mikrofonoa erabili nahi dituzu?</translation>
+<translation id="8438923942245957911">Webgune hau markatuta dauka erakundeak</translation>
 <translation id="8443613539889492016">Rapa eta hip-hopa</translation>
 <translation id="8444543005280733648">Ordenagailu-sareak</translation>
 <translation id="8446884382197647889">Lortu informazio gehiago</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 82f140b..1af168d 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">‏با ویژگی‌های Chrome آشنا شوید</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">بهینه‌سازی محتوای چاپ</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">درهرصورت ضبط شود</translation>
 <translation id="5255833070095767006">۴۶۰ × ۳۵۰ میلی‌متر</translation>
 <translation id="5257739419779698609">{0,plural, =1{خط‌مشی سرپرست توصیه نمی‌کند این فایل را در <ph name="DESTINATION_NAME" /> کپی کنید}one{خط‌مشی سرپرست توصیه نمی‌کند این فایل را در <ph name="DESTINATION_NAME" /> کپی کنید}other{خط‌مشی سرپرست توصیه نمی‌کند این فایل‌ها را در <ph name="DESTINATION_NAME" /> کپی کنید}}</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index af9f8a7..5a7602e 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -1433,6 +1433,7 @@
 <translation id="4646534391647090355">Siirry nyt</translation>
 <translation id="4648262692072505866">Tiivisteen on oltava muodossa SHA-256.</translation>
 <translation id="4652266463001779298">Ei sallittu</translation>
+<translation id="4652440160515225514">Organisaatiosi on estänyt tämän sivuston, koska se rikkoo käytäntöä.</translation>
 <translation id="4653167719759882810">Fuusiot ja yrityskaupat</translation>
 <translation id="4658638640878098064">Niitti vasemmassa yläkulmassa</translation>
 <translation id="4660119392514473465">Nyt voit selata verkkoa yksityisesti. Muut laitteen käyttäjät eivät näe toimintaasi. Lataukset, kirjanmerkit ja lukulistan kohteet kuitenkin tallennetaan.</translation>
@@ -1686,7 +1687,6 @@
 <translation id="52517543715119994">Lue lisää Chromen ominaisuuksista</translation>
 <translation id="5251803541071282808">Pilvi</translation>
 <translation id="5254043433801397071">Optimoi tulostussisältö</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Ota kuvakaappaus silti</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Järjestelmänvalvojakäytännössä ei suositella tiedoston kopioimista tänne: <ph name="DESTINATION_NAME" />}other{Järjestelmänvalvojakäytännössä ei suositella tiedostojen kopioimista tänne: <ph name="DESTINATION_NAME" />}}</translation>
@@ -2921,6 +2921,7 @@
 <translation id="8437238597147034694">K&amp;umoa siirto</translation>
 <translation id="8438476240229491014">Muista tämä asetus</translation>
 <translation id="8438786541497918448">Käytetäänkö kameraa ja mikrofonia?</translation>
+<translation id="8438923942245957911">Organisaatiosi on merkinnyt sivuston</translation>
 <translation id="8443613539889492016">Rap ja hiphop</translation>
 <translation id="8444543005280733648">Tietokoneverkot</translation>
 <translation id="8446884382197647889">Lisätietoja</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index 235c2b1..71bd050 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Alamin ang tungkol sa mga feature ng Chrome</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">I-optimize ang content ng print</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">I-capture pa rin</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Hindi inirerekomenda ng patakaran ng administrator na kopyahin ang file na ito sa <ph name="DESTINATION_NAME" />}one{Hindi inirerekomenda ng patakaran ng administrator na kopyahin ang mga file na ito sa <ph name="DESTINATION_NAME" />}other{Hindi inirerekomenda ng patakaran ng administrator na kopyahin ang mga file na ito sa <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index 0ad01b94..f04b5223 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Caméra</translation>
 <translation id="1622571349153632031">Cuisine végétarienne</translation>
 <translation id="1623104350909869708">Empêcher cette page de générer des boîtes de dialogue supplémentaires</translation>
+<translation id="1633137413609266904">{0,plural, =1{La politique de l'administrateur bloque l'ouverture de ce fichier}one{La politique de l'administrateur bloque l'ouverture de # fichier}other{La politique de l'administrateur bloque l'ouverture de # fichiers}}</translation>
 <translation id="1634828734222219955">Total</translation>
 <translation id="163669211644121865">Planification et déclarations fiscales</translation>
 <translation id="1638780421120290329">Impossible d'enregistrer la carte</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Annuler la réorganisation</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> veut se connecter</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{La politique de l'administrateur ne recommande pas d'ouvrir ce fichier dans <ph name="DESTINATION_NAME" />}one{La politique de l'administrateur ne recommande pas d'ouvrir ce fichier dans <ph name="DESTINATION_NAME" />}other{La politique de l'administrateur ne recommande pas d'ouvrir ces fichiers dans <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Votre organisation, <ph name="ENROLLMENT_DOMAIN" />, a envoyé de l'information, comme des paramètres ou des politiques, aux sites Web suivants.</translation>
 <translation id="3282497668470633863">Ajouter le nom sur la carte</translation>
 <translation id="3286372614333682499">portrait</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Redémarrer l'appareil</translation>
 <translation id="4277028893293644418">Réinitialiser le mot de passe</translation>
 <translation id="4278390842282768270">Autorisé</translation>
+<translation id="4281998142035485137">{0,plural, =1{Ouvrir un fichier confidentiel?}one{Ouvrir un fichier confidentiel?}other{Ouvrir des fichiers confidentiels?}}</translation>
 <translation id="4282346679996504092">Les alertes pour ce produit ont été désactivées, et le favori a été supprimé</translation>
 <translation id="4285498937028063278">Annuler l'épinglage</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{La carte a été enregistrée dans votre compte Google}one{La carte a été enregistrée dans votre compte Google}other{Les cartes ont été enregistrées dans votre compte Google}}</translation>
@@ -1686,7 +1689,6 @@
 <translation id="52517543715119994">En savoir plus sur les fonctionnalités de Chrome</translation>
 <translation id="5251803541071282808">Politique provenant du nuage</translation>
 <translation id="5254043433801397071">Optimiser le contenu d'impression</translation>
-<translation id="5254958791078852567">E</translation>
 <translation id="5255690596502591079">Prendre une capture d'écran quand même</translation>
 <translation id="5255833070095767006">350 mm x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{La politique de l'administrateur ne recommande pas de transférer ce fichier vers <ph name="DESTINATION_NAME" />}one{La politique de l'administrateur ne recommande pas de transférer ce fichier vers <ph name="DESTINATION_NAME" />}other{La politique de l'administrateur ne recommande pas de transférer ces fichiers vers <ph name="DESTINATION_NAME" />}}</translation>
@@ -1929,6 +1931,7 @@
 <translation id="5903264686717710770">Titre :</translation>
 <translation id="5904360430676679685">Famille et relations personnelles</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronisé)</translation>
+<translation id="5911110632211230665">Ouverture bloquée</translation>
 <translation id="59174027418879706">Activé</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en cours d'utilisation}one{# en cours d'utilisation}other{# en cours d'utilisation}}</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index 6ddec4f..4bdae31 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Accéder</translation>
 <translation id="4648262692072505866">Le hachage doit être au format SHA-256.</translation>
 <translation id="4652266463001779298">Non autorisée</translation>
+<translation id="4652440160515225514">Votre organisation a bloqué ce site, car il ne respecte pas une règle.</translation>
 <translation id="4653167719759882810">Fusions-acquisitions</translation>
 <translation id="4658638640878098064">Agrafe en haut à gauche</translation>
 <translation id="4660119392514473465">Vous pouvez désormais naviguer de façon privée. Les autres utilisateurs de cet appareil ne verront pas votre activité. Toutefois, les téléchargements, les favoris et les éléments de la liste de lecture seront enregistrés.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">En savoir plus sur les fonctionnalités de Chrome</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Optimiser le contenu imprimé</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Capturer quand même</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Une règle de l'administrateur déconseille de copier ce fichier vers <ph name="DESTINATION_NAME" />}one{Une règle de l'administrateur déconseille de copier ce fichier vers <ph name="DESTINATION_NAME" />}other{Une règle de l'administrateur déconseille de copier ces fichiers vers <ph name="DESTINATION_NAME" />}}</translation>
@@ -2921,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;Annuler le déplacement</translation>
 <translation id="8438476240229491014">Mémoriser ce paramètre</translation>
 <translation id="8438786541497918448">Utiliser la caméra et le micro ?</translation>
+<translation id="8438923942245957911">Ce site est signalé par votre organisation</translation>
 <translation id="8443613539889492016">Rap et hip-hop</translation>
 <translation id="8444543005280733648">Réseaux informatiques</translation>
 <translation id="8446884382197647889">En savoir plus</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb
index b7238f5c..87859c6 100644
--- a/components/strings/components_strings_gl.xtb
+++ b/components/strings/components_strings_gl.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Visitar agora</translation>
 <translation id="4648262692072505866">O hash debe ter o formato SHA-256.</translation>
 <translation id="4652266463001779298">Permiso non concedido</translation>
+<translation id="4652440160515225514">A túa organización bloqueou este sitio porque infrinxe unha política.</translation>
 <translation id="4653167719759882810">Fusións e adquisicións</translation>
 <translation id="4658638640878098064">Grampa na parte superior esquerda</translation>
 <translation id="4660119392514473465">Agora podes navegar de forma privada sen que os outros usuarios deste dispositivo vexan a túa actividade. Non obstante, gardaranse as descargas, os marcadores e os elementos da lista de lectura.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Máis información sobre as funcións de Chrome</translation>
 <translation id="5251803541071282808">Nube</translation>
 <translation id="5254043433801397071">Optimizar contido da impresión</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Capturar de todos os modos</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{A política do administrador non recomenda copiar este ficheiro neste destino: <ph name="DESTINATION_NAME" />}other{A política do administrador non recomenda copiar estes ficheiros neste destino: <ph name="DESTINATION_NAME" />}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Desfacer movemento</translation>
 <translation id="8438476240229491014">Lembrar esta configuración</translation>
 <translation id="8438786541497918448">Queres usar a cámara e o micrófono?</translation>
+<translation id="8438923942245957911">A túa organización marcou este sitio</translation>
 <translation id="8443613539889492016">Rap e hip-hop</translation>
 <translation id="8444543005280733648">Redes informáticas</translation>
 <translation id="8446884382197647889">Máis información</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 8a9fa06..260febd 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">મને હવે ડાઉનલોડ હોમ પર લઈ જાઓ</translation>
 <translation id="4648262692072505866">હૅશનું ફૉર્મેટ SHA-256 હોવું આવશ્યક છે.</translation>
 <translation id="4652266463001779298">આ સાઇટને મંજૂરી નથી</translation>
+<translation id="4652440160515225514">આ સાઇટ કોઈ પૉલિસીનું ઉલ્લંઘન કરતી હોવાને કારણે તમારી સંસ્થા દ્વારા તેને બ્લૉક કરવામાં આવી છે.</translation>
 <translation id="4653167719759882810">વિલીનીકરણ અને અધિગ્રહણ</translation>
 <translation id="4658638640878098064">ઉપર ડાબી બાજુએ સ્ટેપલ લગાવો</translation>
 <translation id="4660119392514473465">હવે તમે ખાનગીમાં બ્રાઉઝ કરી શકો છો અને આ ડિવાઇસનો ઉપયોગ કરતા અન્ય લોકો તમારી પ્રવૃત્તિ જોઈ શકશે નહીં. જોકે, ડાઉનલોડ, બુકમાર્ક અને વાંચન સૂચિની આઇટમ સાચવવામાં આવશે.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Chromeની સુવિધાઓ વિશે જાણો</translation>
 <translation id="5251803541071282808">મેઘ</translation>
 <translation id="5254043433801397071">પ્રિન્ટ કન્ટેન્ટને ઑપ્ટિમાઇઝ કરો</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">તેમ છતાં કૅપ્ચર કરો</translation>
 <translation id="5255833070095767006">350 x 460 મિમી</translation>
 <translation id="5257739419779698609">{0,plural, =1{ઍડમિનિસ્ટ્રેટરની પૉલિસી આ ફાઇલને <ph name="DESTINATION_NAME" /> પર કૉપિ કરવાનો સુઝાવ આપતી નથી}one{ઍડમિનિસ્ટ્રેટરની પૉલિસી આ ફાઇલને <ph name="DESTINATION_NAME" /> પર કૉપિ કરવાનો સુઝાવ આપતી નથી}other{ઍડમિનિસ્ટ્રેટરની પૉલિસી આ ફાઇલોને <ph name="DESTINATION_NAME" /> પર કૉપિ કરવાનો સુઝાવ આપતી નથી}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;ખસેડવું પૂર્વવત્‌ કરો</translation>
 <translation id="8438476240229491014">આ સેટિંગ યાદ રાખો</translation>
 <translation id="8438786541497918448">કૅમેરા અને માઇક્રોફોનનો ઉપયોગ કરીએ?</translation>
+<translation id="8438923942245957911">તમારી સંસ્થા દ્વારા આ સાઇટને ચિહ્નિત કરવામાં આવી છે</translation>
 <translation id="8443613539889492016">રૅપ અને હિપ-હૉપ</translation>
 <translation id="8444543005280733648">કમ્પ્યુટર નેટવર્ક</translation>
 <translation id="8446884382197647889">વધુ જાણો</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 875b70f..b15890f 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Chrome की सुविधाओं के बारे में जानें</translation>
 <translation id="5251803541071282808">क्लाउड</translation>
 <translation id="5254043433801397071">प्रिंट सामग्री को ऑप्टिमाइज़ करें</translation>
-<translation id="5254958791078852567">ई1</translation>
 <translation id="5255690596502591079">फिर भी कैप्चर करें</translation>
 <translation id="5255833070095767006">350 x 460 मि॰मी॰</translation>
 <translation id="5257739419779698609">{0,plural, =1{एडमिन नीति, इस फ़ाइल को <ph name="DESTINATION_NAME" /> पर कॉपी करने का सुझाव नहीं देती}one{एडमिन नीति, इस फ़ाइल को <ph name="DESTINATION_NAME" /> पर कॉपी करने का सुझाव नहीं देती}other{एडमिन नीति, इन फ़ाइलों को <ph name="DESTINATION_NAME" /> पर कॉपी करने का सुझाव नहीं देती}}</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index d73213d..d8dbea54 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Fotoaparat</translation>
 <translation id="1622571349153632031">Vegetarijanska prehrana</translation>
 <translation id="1623104350909869708">Spriječi da ova stranica stvori dodatne dijaloške okvire</translation>
+<translation id="1633137413609266904">{0,plural, =1{Otvaranje te datoteke blokirano je prema administratorskim pravilima}one{Otvaranje # datoteke blokirano je prema administratorskim pravilima}few{Otvaranje # datoteke blokirano je prema administratorskim pravilima}other{Otvaranje # datoteka blokirano je prema administratorskim pravilima}}</translation>
 <translation id="1634828734222219955">Ukupno</translation>
 <translation id="163669211644121865">Priprema i planiranje poreza</translation>
 <translation id="1638780421120290329">Kartica nije spremljena</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Poništi promjenu rasporeda</translation>
 <translation id="3271648667212143903">Web-lokacija <ph name="ORIGIN" /> želi se povezati</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Prema pravilima administratora ne preporučuje se otvaranje ove datoteke na odredištu <ph name="DESTINATION_NAME" />}one{Prema pravilima administratora ne preporučuje se otvaranje ovih datoteka na odredištu <ph name="DESTINATION_NAME" />}few{Prema pravilima administratora ne preporučuje se otvaranje ovih datoteka na odredištu <ph name="DESTINATION_NAME" />}other{Prema pravilima administratora ne preporučuje se otvaranje ovih datoteka na odredištu <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Vaša organizacija, <ph name="ENROLLMENT_DOMAIN" />, poslala je neke podatke, poput postavki ili pravila, sljedećim web-lokacijama.</translation>
 <translation id="3282497668470633863">Dodajte ime na kartici</translation>
 <translation id="3286372614333682499">portret</translation>
@@ -1294,6 +1296,7 @@
 <translation id="4275830172053184480">Ponovo pokrenite svoj uređaj</translation>
 <translation id="4277028893293644418">Poništi zaporku</translation>
 <translation id="4278390842282768270">Dopušteno</translation>
+<translation id="4281998142035485137">{0,plural, =1{Želite li otvoriti povjerljivu datoteku?}one{Želite li otvoriti povjerljive datoteke?}few{Želite li otvoriti povjerljive datoteke?}other{Želite li otvoriti povjerljive datoteke?}}</translation>
 <translation id="4282346679996504092">Upozorenja za ovaj proizvod isključena su, a oznaka je uklonjena</translation>
 <translation id="4285498937028063278">Otkvači</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ova je kartica spremljena na vašem Google računu}one{Ove su kartice spremljene na vašem Google računu}few{Ove su kartice spremljene na vašem Google računu}other{Ove su kartice spremljene na vašem Google računu}}</translation>
@@ -1431,6 +1434,7 @@
 <translation id="4646534391647090355">Otvori odmah</translation>
 <translation id="4648262692072505866">Hash mora biti u formatu SHA-256.</translation>
 <translation id="4652266463001779298">Nije dopušteno</translation>
+<translation id="4652440160515225514">Vaša organizacija blokirala je ovu web-lokaciju jer krši pravila.</translation>
 <translation id="4653167719759882810">Spajanja i akvizicije</translation>
 <translation id="4658638640878098064">Spajanje pri vrhu lijevo</translation>
 <translation id="4660119392514473465">Sad možete privatno pregledavati, a ostale osobe koje upotrebljavaju vaš uređaj neće vidjeti vašu aktivnost. Međutim, preuzimanja, oznake i stavke s popisa za čitanje spremit će se.</translation>
@@ -1684,7 +1688,6 @@
 <translation id="52517543715119994">Saznajte više o Chromeovim značajkama</translation>
 <translation id="5251803541071282808">Oblak</translation>
 <translation id="5254043433801397071">Optimizacija sadržaja ispisa</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Ipak snimi</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Prema pravilima administratora ne preporučuje se kopiranje te datoteke u <ph name="DESTINATION_NAME" />}one{Prema pravilima administratora ne preporučuje se kopiranje tih datoteka u <ph name="DESTINATION_NAME" />}few{Prema pravilima administratora ne preporučuje se kopiranje tih datoteka u <ph name="DESTINATION_NAME" />}other{Prema pravilima administratora ne preporučuje se kopiranje tih datoteka u <ph name="DESTINATION_NAME" />}}</translation>
@@ -1927,6 +1930,7 @@
 <translation id="5903264686717710770">Naslov:</translation>
 <translation id="5904360430676679685">Obitelj i veze</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinkronizirano)</translation>
+<translation id="5911110632211230665">Otvaranje je blokirano</translation>
 <translation id="59174027418879706">Omogućeno</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 u upotrebi}one{# u upotrebi}few{# u upotrebi}other{# u upotrebi}}</translation>
@@ -2919,6 +2923,7 @@
 <translation id="8437238597147034694">&amp;Poništi premještanje</translation>
 <translation id="8438476240229491014">Zapamti postavku</translation>
 <translation id="8438786541497918448">Koristiti kameru i mikrofon?</translation>
+<translation id="8438923942245957911">Vaša organizacija označila je ovu web-lokaciju</translation>
 <translation id="8443613539889492016">Rap i hip-hop</translation>
 <translation id="8444543005280733648">Računalne mreže</translation>
 <translation id="8446884382197647889">Saznajte više</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index c35811e4..5e897e01 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -1430,6 +1430,7 @@
 <translation id="4646534391647090355">Megnézem most</translation>
 <translation id="4648262692072505866">A hashnek SHA-256 formátumúnak kell lennie.</translation>
 <translation id="4652266463001779298">Nem engedélyezett</translation>
+<translation id="4652440160515225514">Szervezete letiltotta ezt a webhelyet, mert az irányelvet sért.</translation>
 <translation id="4653167719759882810">Összeolvadások és felvásárlások</translation>
 <translation id="4658638640878098064">Kapocs balra fent</translation>
 <translation id="4660119392514473465">Most privát módon böngészhet, így az eszközt használó többi személy nem láthatja az Ön tevékenységeit. A letöltéseket, a könyvjelzőket és az olvasólista elemeit azonban elmenti a rendszer.</translation>
@@ -1683,7 +1684,6 @@
 <translation id="52517543715119994">További információ a Chrome funkcióiról</translation>
 <translation id="5251803541071282808">Felhő</translation>
 <translation id="5254043433801397071">Nyomattartalom optimalizálása</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Rögzítés mindenképpen</translation>
 <translation id="5255833070095767006">350 × 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{A rendszergazda által beállított házirend nem javasolja ennek a fájlnak a másolását a következő helyre: <ph name="DESTINATION_NAME" />}other{A rendszergazda által beállított házirend nem javasolja ezeknek a fájloknak a másolását a következő helyre: <ph name="DESTINATION_NAME" />}}</translation>
@@ -2918,6 +2918,7 @@
 <translation id="8437238597147034694">&amp;Áthelyezés visszavonása</translation>
 <translation id="8438476240229491014">Jegyezze meg ezt a beállítást</translation>
 <translation id="8438786541497918448">Engedélyezi a kamera és a mikrofon használatát?</translation>
+<translation id="8438923942245957911">Szervezete megjelölte ezt a webhelyet</translation>
 <translation id="8443613539889492016">Rap és hip-hop</translation>
 <translation id="8444543005280733648">Számítógép-hálózatok</translation>
 <translation id="8446884382197647889">További információ</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb
index 35fd927..b7733eec 100644
--- a/components/strings/components_strings_hy.xtb
+++ b/components/strings/components_strings_hy.xtb
@@ -354,6 +354,7 @@
 <translation id="1791820510173628507"><ph name="MANAGE_GOOGLE_ACCOUNT_FOCUSED_FRIENDLY_MATCH_TEXT" />։ Google հաշվում ձեր տվյալները, գաղտնիությունն ու անվտանգությունը կառավարելու համար սեղմեք Tab, ապա՝ Enter։</translation>
 <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />։ Հասանելի են բազմաթիվ գործողություններ։ Դրանք ընտրելու համար սեղմեք Tab:</translation>
 <translation id="1800473098294731951">B9</translation>
+<translation id="1801812870656502108">Վիրտուալ քարտի մանրամասներ</translation>
 <translation id="1803020234906945288">Առողջ սնունդ</translation>
 <translation id="1803264062614276815">Քարտատիրոջ անունը</translation>
 <translation id="1803351196216024260">Կարող է հայցել խոսափողն օգտագործելու թույլտվություն</translation>
@@ -447,6 +448,7 @@
 <translation id="2059202684901022309">22 x 34 դյույմ</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 առաջարկ}one{# առաջարկ}other{# առաջարկ}}</translation>
 <translation id="2066915425250589881">ջնջման հայտ ուղարկել</translation>
+<translation id="2066969741541525119">Այս կայքն արգելափակվել է ձեր կազմակերպության կողմից</translation>
 <translation id="2068528718802935086">Նորածիններ և մանկահասակ երեխաներ</translation>
 <translation id="2071156619270205202">Նշված համարը չի կարող օգտագործվել վիրտուալ քարտի համար։</translation>
 <translation id="2071692954027939183">Ծանուցումներն ավտոմատ արգելափակվել են, քանի որ դուք դրանք սովորաբար մերժում եք։</translation>
@@ -501,6 +503,7 @@
 <translation id="2188375229972301266">Մի քանի անցք ներքևում</translation>
 <translation id="219906046732893612">Տան վերանորոգում</translation>
 <translation id="2202020181578195191">Մուտքագրեք ժամկետի սպառման վավեր տարեթիվ</translation>
+<translation id="2202627062836089804">ձեր քարտի հետևի կողմում</translation>
 <translation id="22081806969704220">Դարակ 3</translation>
 <translation id="2210794033760923560">Վերբեռնել զեկույցը</translation>
 <translation id="2212735316055980242">Կանոնը չգտնվեց</translation>
@@ -985,6 +988,7 @@
 <translation id="350069200438440499">Ֆայլի անունը՝</translation>
 <translation id="3507936815618196901">Ստեղծել ձեր շրջակայքի եռաչափ քարտեզը և հետագծել տեսախցիկի դիրքը</translation>
 <translation id="3512163584740124171">Այս կանոնն անտեսվում է, քանի որ այս խմբի մեկ այլ կանոն ավելի բարձր առաջնահերթություն ունի:</translation>
+<translation id="3515972145999192222">Ձեր կազմակերպությունն արգելափակել է <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> կայքը, քանի որ այն կանոն է խախտում։ <ph name="BEGIN_LEARN_MORE_LINK" />Իմանալ ավելին<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="35172538073169599">«Կառավարել հասցեները» կոճակ։ Հասցեներ ավելացնելու և դրանք Chrome-ի կարգավորումներում կառավարելու համար սեղմեք Enter։</translation>
 <translation id="3518941727116570328">Մի քանի օբյեկտների մշակում</translation>
 <translation id="3525130752944427905">10 x 14 դյույմ</translation>
@@ -1059,6 +1063,7 @@
 <translation id="3678342917559046352">Անվավեր ընդլայնում․ պետք է լինի հետևյալ արժեքներից մեկը՝ &lt;extension_id&gt; կամ &lt;extension_id&gt;;&lt;update_url&gt;։</translation>
 <translation id="3678529606614285348">Բացել էջը նոր ինկոգնիտո պատուհանում (Ctrl+Shift+N)</translation>
 <translation id="3681007416295224113">Վկայագրի տեղեկություններ</translation>
+<translation id="3693327506115126094">Ընտրեք, թե ինչպես եք հաստատելու ձեր ինքնությունը</translation>
 <translation id="3699374065820972102">TouchID-ն միացված է գաղտնաբառեր լրացնելու համար</translation>
 <translation id="3701427423622901115">Վերակայումը հաստատված է։</translation>
 <translation id="3704162925118123524">Ցանցը, որից օգտվում եք, կարող է պահանջել, որպեսզի դուք այցելեք նրա մուտքի էջը:</translation>
@@ -1143,6 +1148,7 @@
 <translation id="3906954721959377182">Պլանշետ</translation>
 <translation id="3909477809443608991"><ph name="URL" />-ն ուզում է նվագարկել պաշտպանված բովանդակությունը։ Google-ը կստուգի ձեր սարքը, և այն կարող է հասանելի դառնալ այս կայքին։</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
+<translation id="3921869355029467742">Մուտքագրեք ձեր անվտանգությամ կոդը</translation>
 <translation id="3927932062596804919">Մերժել</translation>
 <translation id="393316646445601645">Ինտերնետ և հեռահաղորդակցություն</translation>
 <translation id="3939773374150895049">Օգտագործե՞լ WebAuthn՝ CVC-ի փոխարեն</translation>
@@ -1389,6 +1395,7 @@
 <translation id="4524805452350978254">Կառավարել քարտերը</translation>
 <translation id="4526465106919207193">Մարդիկ և հասարակություն</translation>
 <translation id="4530347922939905757">Տեքստային հաղորդագրություն</translation>
+<translation id="4531477351494678589">Վիրտուալ քարտի համարը՝</translation>
 <translation id="4540780316273593836">Սխալ առաջացավ</translation>
 <translation id="4541810033354695636">լրացված իրականություն</translation>
 <translation id="4542971377163063093">Դարակ 6</translation>
@@ -1398,6 +1405,7 @@
 <translation id="4567686777917670400">Ձեր ադմինիստրատորը կարող է հեռակա փոխել ձեր դիտարկիչի կարգավորումները։ Սարքում արվող գործողությունները նույնպես կարող են կառավարվել Chromium-ից դուրս։ <ph name="BEGIN_LINK" />Իմանալ ավելին<ph name="END_LINK" /></translation>
 <translation id="457875822857220463">Առաքում</translation>
 <translation id="4582204425268416675">Հեռացնել քարտը</translation>
+<translation id="4582595824823167856">Ստանալ տեքստային հաղորդագրություն</translation>
 <translation id="4587425331216688090">Հեռացնե՞լ հասցեն Chrome-ից:</translation>
 <translation id="459089498662672729">Համաձայն ադմինիստրատորի կանոնների՝ խորհուրդ չի տրվում <ph name="ORIGIN_NAME" /> կայքից տեղադրել այստեղ</translation>
 <translation id="4592951414987517459">Կապակցումը <ph name="DOMAIN" />-ի հետ գաղտնագրված է ժամանակակից ծածկագրերի լրակազմով:</translation>
@@ -1409,6 +1417,7 @@
 <translation id="4606870351894164739">Ազդեցիկ</translation>
 <translation id="4607603470419975064">«Տեսնել Chrome-ին առնչվող խորհուրդներ» կոճակ։ Chrome-ի գործառույթների մասին տեղեկանալու համար սեղմեք Enter։</translation>
 <translation id="4607608436550361748">Տեսնել Chrome-ին առնչվող խորհուրդներ</translation>
+<translation id="460848736049414407">Արգելափակվել է ադմինիստրատորի կողմից</translation>
 <translation id="4610279718074907952">Այս կայքը <ph name="SET_OWNER" />-ի կողմից սահմանված խմբում է և կարող է տեսնել ձեր գործողությունները</translation>
 <translation id="4617273035598175554">Գրաֆիկական և անիմացիոն ծրագրեր</translation>
 <translation id="4622292761762557753">Միևնույն է տեղափոխել</translation>
@@ -1423,6 +1432,7 @@
 <translation id="4646534391647090355">Անցնել հիմա</translation>
 <translation id="4648262692072505866">Հեշը պետք է լինի SHA-256 ձևաչափով։</translation>
 <translation id="4652266463001779298">Արգելված է</translation>
+<translation id="4652440160515225514">Ձեր կազմակերպությունն արգելափակել է այս կայքը, քանի որ այն կանոն է խախտում։</translation>
 <translation id="4653167719759882810">Միաձուլումներ և ձեռքբերումներ</translation>
 <translation id="4658638640878098064">Ամրակ վերևի ձախ կողմում</translation>
 <translation id="4660119392514473465">Ինկոգնիտո ռեժիմում ձեր գործողությունները տեսանելի չեն լինի այս սարքի մյուս օգտատերերին, սակայն ներբեռնումներն ու էջանիշները կպահվեն։</translation>
@@ -1677,7 +1687,6 @@
 <translation id="52517543715119994">Տեղեկանալ Chrome-ի գործառույթների մասին</translation>
 <translation id="5251803541071282808">Ամպ</translation>
 <translation id="5254043433801397071">Օպտիմալացնել տպվելիք բովանդակությունը</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Լուսանկարել</translation>
 <translation id="5255833070095767006">350 x 460 մմ</translation>
 <translation id="5257739419779698609">{0,plural, =1{Ադմինիստրատորը խորհուրդ չի տալիս այս ֆայլը պատճենել այստեղ՝ <ph name="DESTINATION_NAME" />}one{Ադմինիստրատորը խորհուրդ չի տալիս այս ֆայլը պատճենել այստեղ՝ <ph name="DESTINATION_NAME" />}other{Ադմինիստրատորը խորհուրդ չի տալիս այս ֆայլերը պատճենել այստեղ՝ <ph name="DESTINATION_NAME" />}}</translation>
@@ -1876,6 +1885,7 @@
 <translation id="57689295674415555">Վիրտուալ քարտի համարը չի՞ լրացվել</translation>
 <translation id="5772086939108830423">Օգտագործել անցաբառ մեկ այլ սարքում</translation>
 <translation id="5776313857861697733">Առաջնահերթություն</translation>
+<translation id="5776574724412881956">Քարտի տվյալները չե՞ն լրացվել։ Սեղմեք վիրտուալ քարտի մանրամասների վրա՝ սեղմատախտակին պատճենելու համար։ <ph name="IDS_AUTOFILL_VIRTUAL_CARD_MANUAL_FALLBACK_BUBBLE_LEARN_MORE_LINK_LABEL" /></translation>
 <translation id="5781136890105823427">Փորձարկումը միացված է</translation>
 <translation id="578305955206182703">Սաթ</translation>
 <translation id="57838592816432529">Անջատել ձայնը</translation>
@@ -2005,6 +2015,7 @@
 <translation id="6116338172782435947">Տեսնել սեղմատախտակին պատճենված տեքստը և պատկերները</translation>
 <translation id="6118782133429281336">Աղբյուրների ցանկը դատարկ է։</translation>
 <translation id="6120179357481664955">Հիշո՞ւմ եք ձեր UPI ID-ն</translation>
+<translation id="6122181661879998141">քարտի դիմացի կողմում</translation>
 <translation id="6124432979022149706">Chrome Enterprise-ի միակցիչներ</translation>
 <translation id="6126565365696310362">Envelope Chinese #2</translation>
 <translation id="6127379762771434464">Տարրը հեռացվեց</translation>
@@ -2371,6 +2382,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> կայքն ուզում է օգտագործել ձեր տեսախցիկը</translation>
 <translation id="7108819624672055576">Թույլատրվել է ընդլայնման կողմից</translation>
 <translation id="7111012039238467737">(վավեր)</translation>
+<translation id="7112327784801341716">Տեղեկությունները չե՞ն թարմացվել։ Դիմեք ձեր բանկ։</translation>
 <translation id="7118618213916969306">Սեղմատախտակին պահված URL-ի որոնում, <ph name="SHORT_URL" /></translation>
 <translation id="7119414471315195487">Փակեք մյուս ներդիրներն ու ծրագրերը</translation>
 <translation id="7129355289156517987">Երբ փակեք Chromium-ի բոլոր ինկոգնիտո ներդիրները, այս սարքից կհեռացվեն այդ ներդիրներում ձեր կատարած գործողությունները, այդ թվում՝
@@ -2674,6 +2686,7 @@
 <translation id="7798389633136518089">Անտեսվում է, քանի որ կանոնը չի սահմանվել ամպային աղբյուրի կողմից։</translation>
 <translation id="7800304661137206267">Հաղորդագրությունների իսկորոշման համար օգտագործվում է <ph name="CIPHER" />՝ <ph name="MAC" />-ով, բանալիների փոխանակման համար օգտագործվում է <ph name="KX" />:</translation>
 <translation id="7802523362929240268">Կայքը անվտանգ է</translation>
+<translation id="7802989406998618639">Մուտքագրեք <ph name="SIDE_OF_CARD" /> գտնվող <ph name="NUMBER_OF_DIGITS" />-թվանշանից բաղկացած անվտանգության կոդը, որպեսզի բանկը կարողանա հաստատել ձեր ինքնությունը</translation>
 <translation id="780301667611848630">Ոչ</translation>
 <translation id="7805571567667010077">Կառավարվում է ձեր կազմակերպության կողմից</translation>
 <translation id="7805768142964895445">Կարգավիճակ</translation>
@@ -2908,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;Հետարկել տեղափոխումը</translation>
 <translation id="8438476240229491014">Հիշել այս կարգավորումը</translation>
 <translation id="8438786541497918448">Օգտագործե՞լ տեսախցիկն ու խոսափողը</translation>
+<translation id="8438923942245957911">Այս կայքը նշվել է ձեր կազմակերպության կողմից</translation>
 <translation id="8443613539889492016">Ռեփ և հիփ հոփ</translation>
 <translation id="8444543005280733648">Համակարգչային ցանցեր</translation>
 <translation id="8446884382197647889">Մանրամասն</translation>
@@ -3001,6 +3015,7 @@
 <translation id="8725066075913043281">Փորձել կրկին</translation>
 <translation id="8726549941689275341">Էջի չափսը`</translation>
 <translation id="8730621377337864115">Պատրաստ է</translation>
+<translation id="8731268612289859741">Անվտանգության կոդ</translation>
 <translation id="8731544501227493793">«Կառավարել գաղտնաբառերը» կոճակ։ Chrome-ի կարգավորումներում գաղտնաբառերը դիտելու և կառավարելու համար սեղմեք Enter։</translation>
 <translation id="8734529307927223492">Ձեր <ph name="DEVICE_TYPE" /> սարքը կառավարվում է <ph name="MANAGER" />-ի կողմից</translation>
 <translation id="8736059027199600831">30 x 40 դյույմ</translation>
@@ -3106,6 +3121,7 @@
 <translation id="9005998258318286617">Չհաջողվեց բեռնել PDF փաստաթուղթը։</translation>
 <translation id="9008178007718859630">Տան և ինտերիերի ձևավորում</translation>
 <translation id="9008201768610948239">Անտեսել</translation>
+<translation id="9018120810758822233">Մուտքագրեք <ph name="CREDIT_CARD" /> քարտի ձեր անվտանգության կոդը</translation>
 <translation id="901834265349196618">էլփոստ</translation>
 <translation id="9020200922353704812">Անհրաժեշտ է նշել քարտի վճարային հասցեն</translation>
 <translation id="9020542370529661692">Այս էջը թարգմանվել է <ph name="TARGET_LANGUAGE" /></translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index e93ee1d..2c824365 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -1685,7 +1685,6 @@
 <translation id="52517543715119994">Pelajari fitur-fitur Chrome</translation>
 <translation id="5251803541071282808">Awan</translation>
 <translation id="5254043433801397071">Optimalkan konten cetak</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Tetap ambil screenshot</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Kebijakan administrator tidak merekomendasikan untuk menyalin file ini ke <ph name="DESTINATION_NAME" />}other{Kebijakan administrator tidak merekomendasikan untuk menyalin file ini ke <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb
index 9f11c03..ba640d15 100644
--- a/components/strings/components_strings_is.xtb
+++ b/components/strings/components_strings_is.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Kynntu þér eiginleika Chrome</translation>
 <translation id="5251803541071282808">Skýið</translation>
 <translation id="5254043433801397071">Fínstilla prentefni</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Taka samt mynd</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Regla kerfisstjóra mælir ekki með að afrita þessa skrá á <ph name="DESTINATION_NAME" />}one{Regla kerfisstjóra mælir ekki með að afrita þessar skrár á <ph name="DESTINATION_NAME" />}other{Regla kerfisstjóra mælir ekki með að afrita þessar skrár á <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 13245a6..5e0449db 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -1683,7 +1683,6 @@
 <translation id="52517543715119994">Scopri di più sulle funzionalità di Chrome</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Ottimizza contenuti di stampa</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Acquisisci comunque</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Il criterio dell'amministratore sconsiglia di copiare questo file su <ph name="DESTINATION_NAME" />}other{Il criterio dell'amministratore sconsiglia di copiare questi file su <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 994a1eb..9d4ca02 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -1690,7 +1690,6 @@
 <translation id="52517543715119994">‏מידע על התכונות של Chrome</translation>
 <translation id="5251803541071282808">ענן</translation>
 <translation id="5254043433801397071">אופטימיזציה של תוכן ההדפסה</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">אני בכל זאת רוצה לצלם</translation>
 <translation id="5255833070095767006">‏350x460 מ"מ</translation>
 <translation id="5257739419779698609">{0,plural, =1{בהתאם למדיניות האדמין, לא מומלץ להעתיק את הקובץ הזה אל <ph name="DESTINATION_NAME" />}two{בהתאם למדיניות האדמין, לא מומלץ להעתיק את הקבצים האלה אל <ph name="DESTINATION_NAME" />}many{בהתאם למדיניות האדמין, לא מומלץ להעתיק את הקבצים האלה אל <ph name="DESTINATION_NAME" />}other{בהתאם למדיניות האדמין, לא מומלץ להעתיק את הקבצים האלה אל <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 9e2f619..abb1cab 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -1685,7 +1685,6 @@
 <translation id="52517543715119994">Chrome の機能を確認します</translation>
 <translation id="5251803541071282808">クラウド</translation>
 <translation id="5254043433801397071">印刷コンテンツの最適化</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">このままキャプチャする</translation>
 <translation id="5255833070095767006">350x460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{管理者のポリシーでは、このファイルを <ph name="DESTINATION_NAME" /> にコピーすることは推奨されていません}other{管理者のポリシーでは、これらのファイルを <ph name="DESTINATION_NAME" /> にコピーすることは推奨されていません}}</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb
index 3f7d9b8e..2d83935 100644
--- a/components/strings/components_strings_ka.xtb
+++ b/components/strings/components_strings_ka.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Chrome-ის ფუნქციების შესახებ</translation>
 <translation id="5251803541071282808">ღრუბლოვანი</translation>
 <translation id="5254043433801397071">საბეჭდი კონტენტის ოპტიმიზაცია</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">მაინც აღბეჭდვა</translation>
 <translation id="5255833070095767006">350 x 460 მმ</translation>
 <translation id="5257739419779698609">{0,plural, =1{ადმინისტრატორის წესების მიხედვით, ამ ფაილის <ph name="DESTINATION_NAME" />-ში კოპირება რეკომენდებული არ არის}other{ადმინისტრატორის წესების მიხედვით, ამ ფაილების <ph name="DESTINATION_NAME" />-ში კოპირება რეკომენდებული არ არის}}</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index 1a97b376..ceac2ea 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -1431,6 +1431,7 @@
 <translation id="4646534391647090355">Қазір өту</translation>
 <translation id="4648262692072505866">Хеш SHA-256 форматында болуы керек.</translation>
 <translation id="4652266463001779298">Рұқсат етілмеген</translation>
+<translation id="4652440160515225514">Ұйымыңыз бұл сайтты бөгеді, себебі ол саясатты бұзады.</translation>
 <translation id="4653167719759882810">Қосылу және қосып алу</translation>
 <translation id="4658638640878098064">Жоғарғы сол жағын қапсыру</translation>
 <translation id="4660119392514473465">Енді браузерді құпия пайдалануыңызға болады, ал осы құрылғыны пайдаланатын басқа адамдар әрекетіңізді көрмейді. Бірақ жүктеп алынған материалдар, бетбелгілер және оқу тізіміндегі элементтер сақталады.</translation>
@@ -1684,7 +1685,6 @@
 <translation id="52517543715119994">Chrome функциялары туралы білу</translation>
 <translation id="5251803541071282808">Бұлт</translation>
 <translation id="5254043433801397071">Баспа мазмұнын оңтайландыру</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Бәрібір түсіру</translation>
 <translation id="5255833070095767006">350 x 460 мм</translation>
 <translation id="5257739419779698609">{0,plural, =1{Әкімші саясатына сәйкес бұл файлды <ph name="DESTINATION_NAME" /> қалтасына көшірмеген жөн.}other{Әкімші саясатына сәйкес бұл файлдарды <ph name="DESTINATION_NAME" /> қалтасына көшірмеген жөн.}}</translation>
@@ -2919,6 +2919,7 @@
 <translation id="8437238597147034694">&amp;Жылжытуды болдырмау</translation>
 <translation id="8438476240229491014">Осы параметр сақталсын</translation>
 <translation id="8438786541497918448">Камера және микрофон пайдаланылсын ба?</translation>
+<translation id="8438923942245957911">Бұл сайтқа ұйымыңыз жалауша қойды</translation>
 <translation id="8443613539889492016">Рэп және хип-хоп</translation>
 <translation id="8444543005280733648">Компьютер желілері</translation>
 <translation id="8446884382197647889">Толығырақ</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index f2f7e94..c4371f3 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -283,6 +283,7 @@
 <translation id="1620510694547887537">កាមេរ៉ា</translation>
 <translation id="1622571349153632031">ម្ហូប​បួស</translation>
 <translation id="1623104350909869708">បង្ការទំព័រនេះពីការបង្កើតប្រអប់បន្ថែម។</translation>
+<translation id="1633137413609266904">{0,plural, =1{ការបើក​ឯកសារ​នេះ​ត្រូវបាន​ទប់ស្កាត់​ដោយ​គោលការណ៍​របស់​អ្នក​គ្រប់គ្រង}other{ការបើក​ឯកសារ # ត្រូវបាន​ទប់ស្កាត់​ដោយ​គោលការណ៍​របស់​អ្នក​គ្រប់គ្រង}}</translation>
 <translation id="1634828734222219955">សរុប</translation>
 <translation id="163669211644121865">ការរៀបចំ​ផែនការ និងការរៀបចំ​លិខិតប្រកាសពន្ធ</translation>
 <translation id="1638780421120290329">មិនអាចរក្សាទុក​បណ្ណបានទេ</translation>
@@ -899,6 +900,7 @@
 <translation id="3270847123878663523">បកក្រោយការតម្រៀបឡើងវិញ</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> ចង់ភ្ជាប់</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{គោលការណ៍​អ្នកគ្រប់គ្រង​មិន​ណែនាំ​ឱ្យ​បើក​ឯកសារ​នេះ​នៅក្នុង <ph name="DESTINATION_NAME" /> ទេ}other{គោលការណ៍​អ្នកគ្រប់គ្រង​មិន​ណែនាំ​ឱ្យ​បើក​ឯកសារ​ទាំងនេះ​នៅក្នុង <ph name="DESTINATION_NAME" /> ទេ}}</translation>
 <translation id="3282085321714087552">ស្ថាប័នរបស់អ្នក <ph name="ENROLLMENT_DOMAIN" /> បានបញ្ជូនព័ត៌មានមួយចំនួនទៅគេហទំព័រខាងក្រោមដូចជា ការកំណត់ ឬគោលការណ៍ជាដើម។</translation>
 <translation id="3282497668470633863">បញ្ចូលឈ្មោះលើកាត</translation>
 <translation id="3286372614333682499">បញ្ឈរ​</translation>
@@ -1298,6 +1300,7 @@
 <translation id="4275830172053184480">ចាប់ផ្តើមឧបករណ៍របស់អ្នកឡើងវិញ</translation>
 <translation id="4277028893293644418">កំណត់​ពាក្យ​សម្ងាត់​ឡើងវិញ</translation>
 <translation id="4278390842282768270">បានអនុញ្ញាត</translation>
+<translation id="4281998142035485137">{0,plural, =1{បើក​ឯកសារ​សម្ងាត់​ឬ?}other{បើក​ឯកសារ​សម្ងាត់ឬ?}}</translation>
 <translation id="4282346679996504092">ការជូនដំណឹង​សម្រាប់​ផលិតផល​នេះ​ត្រូវបាន​បិទ ហើយ​ចំណាំ​ត្រូវបានដកចេញ</translation>
 <translation id="4285498937028063278">ដកការដៅ</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{បណ្ណនេះ​ត្រូវបានរក្សាទុក​នៅក្នុងគណនី Google របស់អ្នក}other{បណ្ណទាំងនេះ​ត្រូវបានរក្សាទុក​នៅក្នុងគណនី Google របស់អ្នក}}</translation>
@@ -1690,7 +1693,6 @@
 <translation id="52517543715119994">ស្វែងយល់អំពី​មុខងារ Chrome</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">បង្កើនប្រសិទ្ធភាព​ខ្លឹមសារបោះពុម្ព</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">មិនអីទេ ថតចុះ</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{គោលការណ៍​អ្នកគ្រប់គ្រង​មិន​ណែនាំ​ឱ្យ​ចម្លង​ឯកសារ​នេះ​ទៅ​ក្នុង <ph name="DESTINATION_NAME" /> ទេ}other{គោលការណ៍​អ្នកគ្រប់គ្រង​មិន​ណែនាំ​ឱ្យ​​ចម្លង​ឯកសារ​ទាំង​នេះ​ទៅក្នុង <ph name="DESTINATION_NAME" /> ទេ}}</translation>
@@ -1933,6 +1935,7 @@
 <translation id="5903264686717710770">ចំណង​ជើង៖</translation>
 <translation id="5904360430676679685">គ្រួសារ និង​ទំនាក់ទំនង</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (បានធ្វើសមកាលកម្ម)</translation>
+<translation id="5911110632211230665">បានទប់ស្កាត់ការបើក</translation>
 <translation id="59174027418879706">បានបើកដំណើរការ</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{បានប្រើ 1}other{បានប្រើ #}}</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index f8579bd..107a7f8 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -1682,7 +1682,6 @@
 <translation id="52517543715119994">Chrome ಫೀಚರ್‌ಗಳ ಕುರಿತು ತಿಳಿಯಿರಿ</translation>
 <translation id="5251803541071282808">ಕ್ಲೌಡ್</translation>
 <translation id="5254043433801397071">ಪ್ರಿಂಟ್ ವಿಷಯವನ್ನು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಿ</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">ಹೇಗಿದ್ದರೂ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ</translation>
 <translation id="5255833070095767006">350 x 460 ಮಿಮೀ</translation>
 <translation id="5257739419779698609">{0,plural, =1{ನಿರ್ವಾಹಕರ ನೀತಿಯು ಈ ಫೈಲ್ ಅನ್ನು <ph name="DESTINATION_NAME" /> ಗೆ ನಕಲಿಸಲು ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ}one{ನಿರ್ವಾಹಕರ ನೀತಿಯು ಈ ಫೈಲ್‌ಗಳನ್ನು <ph name="DESTINATION_NAME" /> ಗೆ ನಕಲಿಸಲು ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ}other{ನಿರ್ವಾಹಕರ ನೀತಿಯು ಈ ಫೈಲ್‌ಗಳನ್ನು <ph name="DESTINATION_NAME" /> ಗೆ ನಕಲಿಸಲು ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ}}</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 28d3fe1..c715b66 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Chrome 기능 자세히 알아보기</translation>
 <translation id="5251803541071282808">클라우드</translation>
 <translation id="5254043433801397071">인쇄 콘텐츠 최적화</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">무시하고 캡처</translation>
 <translation id="5255833070095767006">350x460mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{관리자 정책에 따라 이 파일을 <ph name="DESTINATION_NAME" />에 복사하지 않는 것이 좋습니다.}other{관리자 정책에 따라 이 파일을 <ph name="DESTINATION_NAME" />에 복사하지 않는 것이 좋습니다.}}</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb
index d780ed0..9dbf529 100644
--- a/components/strings/components_strings_ky.xtb
+++ b/components/strings/components_strings_ky.xtb
@@ -1431,6 +1431,7 @@
 <translation id="4646534391647090355">Азыр көрүнсүн</translation>
 <translation id="4648262692072505866">Хештин форматы: SHA-256 болушу керек.</translation>
 <translation id="4652266463001779298">Тыюу салынган</translation>
+<translation id="4652440160515225514">Саясатты бузгандыктан, уюмуңуз бул сайтты бөгөттөп койду.</translation>
 <translation id="4653167719759882810">Компанияларды бириктирүү жана сатып алуу</translation>
 <translation id="4658638640878098064">Жогорку сол жагын илмек менен бекитүү</translation>
 <translation id="4660119392514473465">Жашыруун режимдеги аракеттериңиз ушул түзмөктүн башка колдонуучуларына көрүнбөйт. Бирок жүктөп алынган файлдар жана кыстармалар сакталып кала берет.</translation>
@@ -1684,7 +1685,6 @@
 <translation id="52517543715119994">Chrome'догу функциялар жөнүндө кеңири маалымат алыңыз</translation>
 <translation id="5251803541071282808">Булут</translation>
 <translation id="5254043433801397071">Басып чыгаруу мазмунун оптималдаштыруу</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Баары бир тартып алуу</translation>
 <translation id="5255833070095767006">350 x 460 мм.</translation>
 <translation id="5257739419779698609">{0,plural, =1{Администратордун саясаты бул файлды төмөнкүгө көчүрүүнү сунуштабайт: <ph name="DESTINATION_NAME" />}other{Администратордун саясаты бул файлдарды төмөнкүгө көчүрүүнү сунуштабайт: <ph name="DESTINATION_NAME" />}}</translation>
@@ -2919,6 +2919,7 @@
 <translation id="8437238597147034694">Жылдырууну &amp;жасабоо</translation>
 <translation id="8438476240229491014">Бул жөндөө эсте калсын</translation>
 <translation id="8438786541497918448">Камера жана микрофон колдонулсунбу?</translation>
+<translation id="8438923942245957911">Уюмуңуз бул сайтты орунсуз деп кабарлады</translation>
 <translation id="8443613539889492016">Рэп жана хип-хоп</translation>
 <translation id="8444543005280733648">Компьютер тармактары</translation>
 <translation id="8446884382197647889">Көбүрөөк билүү</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 924b72ba..52c6c63e 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">ກ້ອງ​ຖ່າຍ​ຮູບ</translation>
 <translation id="1622571349153632031">ອາຫານມັງສະວິລັດ</translation>
 <translation id="1623104350909869708">ປ້ອງກັນບໍ່ໃຫ້ໜ້ານີ້ສ້າງກ່ອງເພີ່ມເຕີມ</translation>
+<translation id="1633137413609266904">{0,plural, =1{ນະໂຍບາຍຂອງຜູ້ເບິ່ງແຍງລະບົບບລັອກການເປີດໄຟລ໌ນີ້}other{ນະໂຍບາຍຂອງຜູ້ເບິ່ງແຍງລະບົບບລັອກການເປີດໄຟລ໌ # ລາຍການ}}</translation>
 <translation id="1634828734222219955">ທັງໝົດ</translation>
 <translation id="163669211644121865">ການກະກຽມ ແລະ ວາງແຜນພາສີ</translation>
 <translation id="1638780421120290329">ບໍ່ສາມາດບັນທຶກບັດໄດ້</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">ປ່ຽນ​ກັບ​ຄືນຄໍາສັ່ງຈັດລໍາດັບຄືນ</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> ຕ້ອງການເຊື່ອມຕໍ່</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{ນະໂຍບາຍຂອງຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ເປີດໄຟລ໌ນີ້ໃນ <ph name="DESTINATION_NAME" />}other{ນະໂຍບາຍຂອງຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ເປີດໄຟລ໌ເຫຼົ່ານີ້ໃນ <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">ອົງການຂອງທ່ານ, <ph name="ENROLLMENT_DOMAIN" />, ໄດ້ສົ່ງຂໍ້ມູນຈຳນວນໜຶ່ງໄປໃຫ້ເວັບໄຊຕໍ່ໄປນີ້ແລ້ວ ເຊັ່ນ: ການຕັ້ງຄ່າ ຫຼື ນະໂຍບາຍ.</translation>
 <translation id="3282497668470633863">ເພີ່ມຊື່ໃນບັດ</translation>
 <translation id="3286372614333682499">ແນວຕັ້ງ</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">ເລີ່ມຕົ້ນອຸປະກອນຂອງທ່ານໃໝ່</translation>
 <translation id="4277028893293644418">ຣີເຊັດລະຫັດຜ່ານ</translation>
 <translation id="4278390842282768270">ອະນຸຍາດແລ້ວ</translation>
+<translation id="4281998142035485137">{0,plural, =1{ຕ້ອງການເປີດໄຟລ໌ທີ່ເປັນຄວາມລັບບໍ?}other{ຕ້ອງການເປີດໄຟລ໌ທີ່ເປັນຄວາມລັບບໍ?}}</translation>
 <translation id="4282346679996504092">ການແຈ້ງເຕືອນສຳລັບສິນຄ້ານີ້ໄດ້ຖືກປິດໄວ້ແລ້ວ ແລະ ລຶບບຸກມາກອອກແລ້ວ</translation>
 <translation id="4285498937028063278">ຖອນໝຸດ</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{ບັນທຶກບັດນີ້ໄວ້ໃນບັນຊີ Google ຂອງທ່ານແລ້ວ}other{ບັນທຶກບັດເຫຼົ່ານີ້ໄວ້ໃນບັນຊີ Google ຂອງທ່ານແລ້ວ}}</translation>
@@ -1686,7 +1689,6 @@
 <translation id="52517543715119994">ສຶກສາເພີ່ມເຕີມກ່ຽວກັບຄຸນສົມບັດ Chrome</translation>
 <translation id="5251803541071282808">ຄ​ລາວ</translation>
 <translation id="5254043433801397071">ເພີ່ມປະສິດທິພາບເນື້ອຫາທີ່ພິມ</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">ຢືນຢັນການບັນທຶກ</translation>
 <translation id="5255833070095767006">350 x 460 ມມ</translation>
 <translation id="5257739419779698609">{0,plural, =1{ນະໂຍບາຍຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ສຳເນົາໄຟລ໌ນີ້ໄປໃສ່ <ph name="DESTINATION_NAME" />}other{ນະໂຍບາຍຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ສຳເນົາໄຟລ໌ເຫຼົ່ານີ້ໄປໃສ່ <ph name="DESTINATION_NAME" />}}</translation>
@@ -1929,6 +1931,7 @@
 <translation id="5903264686717710770">ຊື່:</translation>
 <translation id="5904360430676679685">ຄອບຄົວ ແລະ ຄວາມສຳພັນ</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ຊິ້ງຂໍ້ມູນແລ້ວ)</translation>
+<translation id="5911110632211230665">ການເປີດໄຟລ໌ຖືກບລັອກ</translation>
 <translation id="59174027418879706">ເປີດໃຊ້ງານແລ້ວ</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ໃຊ້ຢູ່}other{# ໃຊ້ຢູ່}}</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 6ce800c9..e5d22f73 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -1433,6 +1433,7 @@
 <translation id="4646534391647090355">Eiti dabar</translation>
 <translation id="4648262692072505866">Maišos formatas turi būti SHA-256.</translation>
 <translation id="4652266463001779298">Neleidžiama</translation>
+<translation id="4652440160515225514">Jūsų organizacija užblokavo šią svetainę, nes ji pažeidžia politiką.</translation>
 <translation id="4653167719759882810">Susiliejimai ir įsigijimai</translation>
 <translation id="4658638640878098064">Sankabėlė viršuje kairėje</translation>
 <translation id="4660119392514473465">Dabar galite naršyti privačiai, o kiti šį įrenginį naudojantys žmonės nematys jūsų veiklos. Tačiau atsisiuntimai, žymės ir skaitymo sąrašo elementai bus išsaugoti.</translation>
@@ -1686,7 +1687,6 @@
 <translation id="52517543715119994">Sužinokite apie „Chrome“ funkcijas</translation>
 <translation id="5251803541071282808">Debesis</translation>
 <translation id="5254043433801397071">Optimizuoti spausdinimo turinį</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Vis tiek užfiksuoti</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Pagal administratoriaus politikos nuostatas nerekomenduojama kopijuoti šio failo į <ph name="DESTINATION_NAME" />}one{Pagal administratoriaus politikos nuostatas nerekomenduojama kopijuoti šių failų į <ph name="DESTINATION_NAME" />}few{Pagal administratoriaus politikos nuostatas nerekomenduojama kopijuoti šių failų į <ph name="DESTINATION_NAME" />}many{Pagal administratoriaus politikos nuostatas nerekomenduojama kopijuoti šių failų į <ph name="DESTINATION_NAME" />}other{Pagal administratoriaus politikos nuostatas nerekomenduojama kopijuoti šių failų į <ph name="DESTINATION_NAME" />}}</translation>
@@ -2921,6 +2921,7 @@
 <translation id="8437238597147034694">&amp;Anuliuoti perkėlimą</translation>
 <translation id="8438476240229491014">Įsiminti šį nustatymą</translation>
 <translation id="8438786541497918448">Naudoti fotoaparatą ir mikrofoną?</translation>
+<translation id="8438923942245957911">Šią svetainę pažymėjo jūsų organizacija</translation>
 <translation id="8443613539889492016">Repas ir hiphopas</translation>
 <translation id="8444543005280733648">Kompiuterių tinklai</translation>
 <translation id="8446884382197647889">Sužinokite daugiau</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 5b57dc31..257bde6 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -1685,7 +1685,6 @@
 <translation id="52517543715119994">Uzzināt vairāk par Chrome funkcijām</translation>
 <translation id="5251803541071282808">Mākonis</translation>
 <translation id="5254043433801397071">Drukājamā satura optimizācija</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Tomēr tvert</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Administratora politika nosaka, ka nav ieteicams kopēt šo failu šeit: <ph name="DESTINATION_NAME" />}zero{Administratora politika nosaka, ka nav ieteicams kopēt šos failus šeit: <ph name="DESTINATION_NAME" />}one{Administratora politika nosaka, ka nav ieteicams kopēt šos failus šeit: <ph name="DESTINATION_NAME" />}other{Administratora politika nosaka, ka nav ieteicams kopēt šos failus šeit: <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index 2e173d6..189951073 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -1689,7 +1689,6 @@
 <translation id="52517543715119994">Дознајте за функциите на Chrome</translation>
 <translation id="5251803541071282808">Облак</translation>
 <translation id="5254043433801397071">Оптимизирај ја содржината за печатење</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Сепак сними</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Администраторското правило не препорачува да се копира датотекава во <ph name="DESTINATION_NAME" />}one{Администраторското правило не препорачува да се копираат датотекиве во <ph name="DESTINATION_NAME" />}other{Администраторското правило не препорачува да се копираат датотекиве во <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index 549c8ab..78d4dde 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -1685,7 +1685,6 @@
 <translation id="52517543715119994">Chrome ഫീച്ചറുകളെ കുറിച്ച് അറിയുക</translation>
 <translation id="5251803541071282808">ക്ലൗഡ്</translation>
 <translation id="5254043433801397071">പ്രിന്റ് ചെയ്യാനുള്ള ഉള്ളടക്കം ഒപ്റ്റിമൈസ് ചെയ്യുക</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">എന്തായാലും ക്യാപ്‌ചർ ചെയ്യുക</translation>
 <translation id="5255833070095767006">350 x 460 മി.മീ</translation>
 <translation id="5257739419779698609">{0,plural, =1{ഈ ഫയൽ <ph name="DESTINATION_NAME" /> എന്നതിലേക്ക് പകർത്താൻ അഡ്‌മിൻ നയം നിർദ്ദേശിക്കുന്നില്ല}other{ഈ ഫയലുകൾ <ph name="DESTINATION_NAME" /> എന്നതിലേക്ക് പകർത്താൻ അഡ്‌മിൻ നയം നിർദ്ദേശിക്കുന്നില്ല}}</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 93165c07..1725d7c 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -1687,7 +1687,6 @@
 <translation id="52517543715119994">Chrome-н онцлогуудын талаар мэдэж аваарай</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Хэвлэлийн контентыг оновчлох</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Ямартай ч зургийг нь авах</translation>
 <translation id="5255833070095767006">350 x 460 мм</translation>
 <translation id="5257739419779698609">{0,plural, =1{Администраторын бодлого нь энэ файлыг <ph name="DESTINATION_NAME" /> руу хуулахыг санал болгодоггүй}other{Администраторын бодлого нь эдгээр файлыг <ph name="DESTINATION_NAME" /> руу хуулахыг санал болгодоггүй}}</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index b55674e..365d43b 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -1685,7 +1685,6 @@
 <translation id="52517543715119994">Chrome च्या वैशिष्‍ट्यांविषयी जाणून घ्या</translation>
 <translation id="5251803541071282808">क्लाउड</translation>
 <translation id="5254043433801397071">प्रिंट आशय ऑप्टिमाइझ करा</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">तरीही कॅप्चर करा</translation>
 <translation id="5255833070095767006">३५० x ४६० मिमी</translation>
 <translation id="5257739419779698609">{0,plural, =1{अ‍ॅडमिनिस्ट्रेटर धोरण ही फाइल <ph name="DESTINATION_NAME" /> वर कॉपी करण्याची शिफारस करत नाही}other{अ‍ॅडमिनिस्ट्रेटर धोरण ही फाइल <ph name="DESTINATION_NAME" /> वर कॉपी करण्याची शिफारस करत नाही}}</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 17f83eb..2ade032f 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="1622571349153632031">Masakan vegetarian</translation>
 <translation id="1623104350909869708">Halang halaman ini daripada mencipta dialog tambahan</translation>
+<translation id="1633137413609266904">{0,plural, =1{Pembukaan fail ini disekat oleh dasar pentadbir}other{Pembukaan # fail disekat oleh dasar pentadbir}}</translation>
 <translation id="1634828734222219955">Jumlah</translation>
 <translation id="163669211644121865">Persediaan &amp; perancangan cukai</translation>
 <translation id="1638780421120290329">Tidak dapat menyimpan kad</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Buat asal Susun semula</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> ingin menyambung</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Dasar pentadbir tidak mengesyorkan anda membuka fail ini dalam <ph name="DESTINATION_NAME" />}other{Dasar pentadbir tidak mengesyorkan anda membuka fail ini dalam <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Organisasi anda, <ph name="ENROLLMENT_DOMAIN" />, telah menghantar beberapa maklumat, seperti tetapan atau dasar ke laman web berikut.</translation>
 <translation id="3282497668470633863">Tambahkan nama pada kad</translation>
 <translation id="3286372614333682499">potret</translation>
@@ -1296,6 +1298,7 @@
 <translation id="4275830172053184480">Mulakan semula peranti anda</translation>
 <translation id="4277028893293644418">Tetapkan semula kata laluan</translation>
 <translation id="4278390842282768270">Dibenarkan</translation>
+<translation id="4281998142035485137">{0,plural, =1{Buka fail sulit?}other{Buka fail sulit?}}</translation>
 <translation id="4282346679996504092">Makluman untuk produk ini telah dimatikan dan penanda halaman dialih keluar</translation>
 <translation id="4285498937028063278">Menyahpin</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Kad ini telah disimpan ke Akaun Google anda}other{Kad ini telah disimpan ke Akaun Google anda}}</translation>
@@ -1687,7 +1690,6 @@
 <translation id="52517543715119994">Ketahui tentang ciri Chrome</translation>
 <translation id="5251803541071282808">Awan</translation>
 <translation id="5254043433801397071">Optimumkan kandungan cetak</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Tangkap juga</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Dasar pentadbir tidak mengesyorkan anda menyalin fail ini ke <ph name="DESTINATION_NAME" />}other{Dasar pentadbir tidak mengesyorkan anda menyalin fail ini ke <ph name="DESTINATION_NAME" />}}</translation>
@@ -1930,6 +1932,7 @@
 <translation id="5903264686717710770">Tajuk:</translation>
 <translation id="5904360430676679685">Keluarga &amp; perhubungan</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (disegerakkan)</translation>
+<translation id="5911110632211230665">Buka disekat</translation>
 <translation id="59174027418879706">Didayakan</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 sedang digunakan}other{# sedang digunakan}}</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index 111e960..83707f14 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -1687,7 +1687,6 @@
 <translation id="52517543715119994">Chrome ဝန်ဆောင်မှုများအကြောင်း လေ့လာရန်</translation>
 <translation id="5251803541071282808">မိုးတိမ်</translation>
 <translation id="5254043433801397071">ပုံနှိပ်ရန် အကြောင်းအရာကို အကောင်းဆုံးလုပ်ရန်</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">မည်သို့ပင်ဖြစ်စေ ဖမ်းယူရန်</translation>
 <translation id="5255833070095767006">၃၅၀ x ၄၆၀ မီလီမီတာ</translation>
 <translation id="5257739419779698609">{0,plural, =1{ဤဖိုင်အား <ph name="DESTINATION_NAME" /> သို့ မိတ္တူကူးခြင်းကို စီမံခန့်ခွဲသူ မူဝါဒက အကြံမပြုပါ}other{ဤဖိုင်များအား <ph name="DESTINATION_NAME" /> သို့ မိတ္တူကူးခြင်းကို စီမံခန့်ခွဲသူ မူဝါဒက အကြံမပြုပါ}}</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index bc5b539e..5ac0cd5f 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">क्यामेरा</translation>
 <translation id="1622571349153632031">शाकाहारी भोजन</translation>
 <translation id="1623104350909869708">यो पृष्ठलाई अतिरिक्त संवादहरू सिर्जना गर्नबाट रोक्नुहोस्</translation>
+<translation id="1633137413609266904">{0,plural, =1{एड्मिनले तोक्नुभएको नीतिअनुसार यो फाइल खोल्न पाइँदैन}other{एड्मिनले तोक्नुभएको नीतिअनुसार # वटा फाइल खोल्न पाइँदैन}}</translation>
 <translation id="1634828734222219955">कुल</translation>
 <translation id="163669211644121865">करको तयारी तथा योजना</translation>
 <translation id="1638780421120290329">कार्ड सुरक्षित गर्न सकिएन</translation>
@@ -893,6 +894,7 @@
 <translation id="3270847123878663523">क्रम परिवर्तन &amp;पूर्ववत गर्नुहोस्</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> जडान गर्न चाहन्छ</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{एड्मिनले तोक्नुभएको नीतिअनुसार यो फाइल <ph name="DESTINATION_NAME" /> मा खोल्न सिफारिस गरिँदैन}other{एड्मिनले तोक्नुभएको नीतिअनुसार यी फाइलहरू <ph name="DESTINATION_NAME" /> मा खोल्न सिफारिस गरिँदैन}}</translation>
 <translation id="3282085321714087552">तपाईंको सङ्गठन <ph name="ENROLLMENT_DOMAIN" /> ले निम्न वेबसाइटहरूमा सेटिङ वा नीतिहरू जस्ता केही जानकारी पठाएको छ।</translation>
 <translation id="3282497668470633863">कार्डमा रहेको नाम थप्नुहोस्</translation>
 <translation id="3286372614333682499">पोर्ट्रेट</translation>
@@ -1292,6 +1294,7 @@
 <translation id="4275830172053184480">आफ्नो यन्त्रलाई फेरि सुरु गर्नुहोस्</translation>
 <translation id="4277028893293644418">पासवर्ड रिसेट गर्नुहोस्</translation>
 <translation id="4278390842282768270">अनुमति प्राप्त</translation>
+<translation id="4281998142035485137">{0,plural, =1{गोप्य फाइल खोल्ने हो?}other{गोप्य फाइलहरू खोल्ने हो?}}</translation>
 <translation id="4282346679996504092">यो उत्पादनका हकमा अलर्ट पठाउने सुविधा अफ गरिएको छ र बुकमार्क हटाइएको छ</translation>
 <translation id="4285498937028063278">अनपिन गर्नुहोस्</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{यो कार्डलाई तपाईंको Google खातामा सुरक्षित गरिएको छ।}other{यी कार्डहरूलाई तपाईंको Google खातामा सुरक्षित गरिएको छ}}</translation>
@@ -1683,7 +1686,6 @@
 <translation id="52517543715119994">Chrome का सुविधाहरूका बारेमा जान्नुहोस्</translation>
 <translation id="5251803541071282808">क्लाउड</translation>
 <translation id="5254043433801397071">छाप्ने सामग्री अनुकूलन गर्नुहोस्</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">जे भए पनि खिच्नुहोस्</translation>
 <translation id="5255833070095767006">३५० x ४६० मिलिमिटर</translation>
 <translation id="5257739419779698609">{0,plural, =1{एड्मिनले तोकेको नीतिअनुसार यो फाइल <ph name="DESTINATION_NAME" /> मा कपी गर्न सिफारिस गरिँदैन}other{एड्मिनले तोकेको नीतिअनुसार यी फाइलहरू <ph name="DESTINATION_NAME" /> मा कपी गर्न सिफारिस गरिँदैन}}</translation>
@@ -1926,6 +1928,7 @@
 <translation id="5903264686717710770">शीर्षक:</translation>
 <translation id="5904360430676679685">परिवार तथा नातागोता</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (सिंक गरिएको)</translation>
+<translation id="5911110632211230665">फाइल खोल्न पाइँदैन</translation>
 <translation id="59174027418879706">सक्षम गरिएको</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{१ प्रयोगमा छ}other{# प्रयोगमा छन्}}</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index 0a72eab..6629e5d 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -1681,7 +1681,6 @@
 <translation id="52517543715119994">Meer informatie over Chrome-functies</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Afdrukcontent optimaliseren</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Toch vastleggen</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Op basis van het beheerdersbeleid wordt afgeraden dit bestand te kopiëren naar <ph name="DESTINATION_NAME" />}other{Op basis van het beheerdersbeleid wordt afgeraden deze bestanden te kopiëren naar <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 27531cb4..fe8e9bd 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Lær om Chrome-funksjoner</translation>
 <translation id="5251803541071282808">Nettsky</translation>
 <translation id="5254043433801397071">Optimaliser utskriftsinnhold</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Ta opp likevel</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Administratorreglene anbefaler ikke at du kopierer denne filen til <ph name="DESTINATION_NAME" />}other{Administratorreglene anbefaler ikke at du kopierer disse filene til <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index 8cc8c65a..d70209b 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -1684,7 +1684,6 @@
 <translation id="52517543715119994">Chrome ଫିଚରଗୁଡ଼ିକ ବିଷୟରେ ଜାଣନ୍ତୁ</translation>
 <translation id="5251803541071282808">କ୍ଲାଉଡ୍</translation>
 <translation id="5254043433801397071">ପ୍ରିଣ୍ଟ ବିଷୟବସ୍ତୁକୁ ଅପ୍ଟିମାଇଜ୍ କରନ୍ତୁ</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">ଯେ କୌଣସି ମତେ କ୍ୟାପଚର୍ କରନ୍ତୁ</translation>
 <translation id="5255833070095767006">350 x 460 ମିମି</translation>
 <translation id="5257739419779698609">{0,plural, =1{<ph name="DESTINATION_NAME" />କୁ ଏହି ଫାଇଲ କପି କରିବା ପାଇଁ ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ସୁପାରିଶ କରେ ନାହିଁ}other{<ph name="DESTINATION_NAME" />କୁ ଏହି ଫାଇଲଗୁଡ଼ିକ କପି କରିବା ପାଇଁ ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ସୁପାରିଶ କରେ ନାହିଁ}}</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index 8177ffca..c20f383 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">ਕੈਮਰਾ</translation>
 <translation id="1622571349153632031">ਸ਼ਾਕਾਹਾਰੀ ਪਕਵਾਨ</translation>
 <translation id="1623104350909869708">ਇਸ ਸਫ਼ੇ ਨੂੰ ਵਾਧੂ ਡਾਇਲੌਗ ਬਣਾਉਣ ਤੋਂ ਰੋਕੋ</translation>
+<translation id="1633137413609266904">{0,plural, =1{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਵੱਲੋਂ ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਦੀ ਸੁਵਿਧਾ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਹੈ}one{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਵੱਲੋਂ # ਫ਼ਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਦੀ ਸੁਵਿਧਾ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਹੈ}other{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਵੱਲੋਂ # ਫ਼ਾਈਲਾਂ ਨੂੰ ਖੋਲ੍ਹਣ ਦੀ ਸੁਵਿਧਾ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਹੈ}}</translation>
 <translation id="1634828734222219955">ਕੁੱਲ</translation>
 <translation id="163669211644121865">ਟੈਕਸ ਭਰਨਾ ਅਤੇ ਯੋਜਨਾਬੰਦੀ</translation>
 <translation id="1638780421120290329">ਕਾਰਡ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation>
@@ -894,6 +895,7 @@
 <translation id="3270847123878663523">&amp;ਦੁਬਾਰਾ ਕ੍ਰਮ ਦੇਣ ਨੂੰ ਅਨਡੂ ਕਰੋ</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> ਕਨੈਕਟ ਹੋਣਾ ਚਾਹੁੰਦੀ ਹੈ</translation>
 <translation id="3272091146646336650">ਸੁਪਰ B</translation>
+<translation id="3281350579597955952">{0,plural, =1{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਇਸ ਫ਼ਾਈਲ ਨੂੰ <ph name="DESTINATION_NAME" /> ਵਿੱਚ ਖੋਲ੍ਹਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕਰਦੀ ਹੈ}one{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਇਸ ਫ਼ਾਈਲ ਨੂੰ <ph name="DESTINATION_NAME" /> ਵਿੱਚ ਖੋਲ੍ਹਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕਰਦੀ ਹੈ}other{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਇਨ੍ਹਾਂ ਫ਼ਾਈਲਾਂ ਨੂੰ <ph name="DESTINATION_NAME" /> ਵਿੱਚ ਖੋਲ੍ਹਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕਰਦੀ ਹੈ}}</translation>
 <translation id="3282085321714087552">ਤੁਹਾਡੀ ਸੰਸਥਾ, <ph name="ENROLLMENT_DOMAIN" />, ਨੇ ਅੱਗੇ ਦਿੱਤੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਨੂੰ ਕੁਝ ਜਾਣਕਾਰੀ ਭੇਜੀ ਹੈ, ਜਿਵੇਂ ਸੈਟਿੰਗਾਂ ਜਾਂ ਨੀਤੀਆਂ।</translation>
 <translation id="3282497668470633863">ਕਾਰਡ 'ਤੇ ਨਾਮ ਸ਼ਾਮਲ ਕਰੋ</translation>
 <translation id="3286372614333682499">ਪੋਰਟਰੇਟ</translation>
@@ -1292,6 +1294,7 @@
 <translation id="4275830172053184480">ਆਪਣੀ ਡੀਵਾਈਸ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ</translation>
 <translation id="4277028893293644418">ਪਾਸਵਰਡ ਰੀਸੈੱਟ ਕਰੋ</translation>
 <translation id="4278390842282768270">ਆਗਿਆ ਦਿੱਤੀ</translation>
+<translation id="4281998142035485137">{0,plural, =1{ਕੀ ਗੁਪਤ ਫ਼ਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?}one{ਕੀ ਗੁਪਤ ਫ਼ਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?}other{ਕੀ ਗੁਪਤ ਫ਼ਾਈਲਾਂ ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?}}</translation>
 <translation id="4282346679996504092">ਇਸ ਉਤਪਾਦ ਲਈ ਸੁਚੇਤਨਾਵਾਂ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ ਅਤੇ ਬੁੱਕਮਾਰਕ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ</translation>
 <translation id="4285498937028063278">ਅਨਪਿਨ ਕਰੋ</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{ਇਸ ਕਾਰਡ ਨੂੰ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ}one{ਇਸ ਕਾਰਡ ਨੂੰ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ}other{ਇਹਨਾਂ ਕਾਰਡਾਂ ਨੂੰ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ}}</translation>
@@ -1429,6 +1432,7 @@
 <translation id="4646534391647090355">ਮੈਨੂੰ ਹੁਣੇ ਉੱਥੇ ਲੈ ਜਾਓ</translation>
 <translation id="4648262692072505866">ਹੈਸ਼ ਦਾ ਫਾਰਮੈਟ SHA-256 ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।</translation>
 <translation id="4652266463001779298">ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ</translation>
+<translation id="4652440160515225514">ਨੀਤੀ ਦੀ ਉਲੰਘਣਾ ਕਰਨ ਕਰਕੇ ਤੁਹਾਡੀ ਸੰਸਥਾ ਨੇ ਇਸ ਸਾਈਟ ਨੂੰ ਬਲਾਕ ਕਰ ਦਿੱਤਾ ਹੈ।</translation>
 <translation id="4653167719759882810">ਮਰਜਰ ਅਤੇ ਪ੍ਰਾਪਤੀਆਂ</translation>
 <translation id="4658638640878098064">ਉੱਪਰ ਖੱਬੇ ਪਾਸੇ ਪਿੰਨ</translation>
 <translation id="4660119392514473465">ਹੁਣ ਤੁਸੀਂ ਨਿੱਜੀ ਤੌਰ 'ਤੇ ਬ੍ਰਾਊਜ਼ ਕਰ ਸਕਦੇ ਹੋ ਅਤੇ ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਵਰਤਣ ਵਾਲੇ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਤੁਹਾਡੀ ਸਰਗਰਮੀ ਨਹੀਂ ਦਿਸੇਗੀ। ਹਾਲਾਂਕਿ, ਡਾਊਨਲੋਡਾਂ, ਬੁੱਕਮਾਰਕਾਂ ਅਤੇ ਪੜ੍ਹਨ-ਸੂਚੀ ਦੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
@@ -1682,7 +1686,6 @@
 <translation id="52517543715119994">Chrome ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਬਾਰੇ ਜਾਣੋ</translation>
 <translation id="5251803541071282808">ਕਲਾਊਡ</translation>
 <translation id="5254043433801397071">ਪ੍ਰਿੰਟ ਸਮੱਗਰੀ ਨੂੰ ਸੁਯੋਗ ਬਣਾਓ</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">ਫਿਰ ਵੀ ਕੈਪਚਰ ਕਰੋ</translation>
 <translation id="5255833070095767006">350 x 460 ਮਿ.ਮੀ.</translation>
 <translation id="5257739419779698609">{0,plural, =1{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਇਸ ਫ਼ਾਈਲ ਨੂੰ <ph name="DESTINATION_NAME" /> ਵਿੱਚ ਕਾਪੀ ਕਰਨ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕਰਦੀ ਹੈ}one{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਇਸ ਫ਼ਾਈਲ ਨੂੰ <ph name="DESTINATION_NAME" /> ਵਿੱਚ ਕਾਪੀ ਕਰਨ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕਰਦੀ ਹੈ}other{ਪ੍ਰਸ਼ਾਸਕ ਨੀਤੀ ਇਨ੍ਹਾਂ ਫ਼ਾਈਲਾਂ ਨੂੰ <ph name="DESTINATION_NAME" /> ਵਿੱਚ ਕਾਪੀ ਕਰਨ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕਰਦੀ ਹੈ}}</translation>
@@ -1925,6 +1928,7 @@
 <translation id="5903264686717710770">ਸਿਰਲੇਖ:</translation>
 <translation id="5904360430676679685">ਪਰਿਵਾਰ ਅਤੇ ਰਿਸ਼ਤੇ</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ਸਿੰਕ ਕੀਤਾ)</translation>
+<translation id="5911110632211230665">ਖੋਲ੍ਹਣ ਦੀ ਸੁਵਿਧਾ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="59174027418879706">ਸਮਰਥਿਤ</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ਵਰਤੋਂ ਵਿੱਚ ਹੈ}one{# ਵਰਤੋਂ ਵਿੱਚ ਹਨ}other{# ਵਰਤੋਂ ਵਿੱਚ ਹਨ}}</translation>
@@ -2916,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;ਮੂਵ ਨੂੰ ਅਨਡੂ ਕਰੋ</translation>
 <translation id="8438476240229491014">ਇਹ ਸੈਟਿੰਗ ਯਾਦ ਰੱਖੋ</translation>
 <translation id="8438786541497918448">ਕੀ ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਵਰਤਣਾ ਹੈ?</translation>
+<translation id="8438923942245957911">ਇਹ ਸਾਈਟ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਫਲੈਗ ਕੀਤੀ ਗਈ ਹੈ</translation>
 <translation id="8443613539889492016">ਰੈਪ ਅਤੇ ਹਿੱਪ-ਹੌਪ</translation>
 <translation id="8444543005280733648">ਕੰਪਿਊਟਰ ਨੈੱਟਵਰਕ</translation>
 <translation id="8446884382197647889">ਹੋਰ ਜਾਣੋ</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 12a1101..46bf0c6 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="1622571349153632031">Kuchnia wegetariańska</translation>
 <translation id="1623104350909869708">Zapobiegaj wyświetlaniu dodatkowych okien dialogowych na tej stronie</translation>
+<translation id="1633137413609266904">{0,plural, =1{Otwieranie tego pliku jest zablokowane przez zasady administratora}few{Otwieranie # plików jest zablokowane przez zasady administratora}many{Otwieranie # plików jest zablokowane przez zasady administratora}other{Otwieranie # pliku jest zablokowane przez zasady administratora}}</translation>
 <translation id="1634828734222219955">Suma</translation>
 <translation id="163669211644121865">Pomoc i planowanie dotyczące rozliczeń podatkowych</translation>
 <translation id="1638780421120290329">Nie można zapisać karty</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Cofnij zmianę kolejności</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> chce się połączyć</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Zgodnie z zasadą administratora nie zaleca się otwierania tego pliku, jeśli miejscem docelowym jest <ph name="DESTINATION_NAME" />}few{Zgodnie z zasadą administratora nie zaleca się otwierania tych plików, jeśli miejscem docelowym jest <ph name="DESTINATION_NAME" />}many{Zgodnie z zasadą administratora nie zaleca się otwierania tych plików, jeśli miejscem docelowym jest <ph name="DESTINATION_NAME" />}other{Zgodnie z zasadą administratora nie zaleca się otwierania tych plików, jeśli miejscem docelowym jest <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Twoja organizacja, <ph name="ENROLLMENT_DOMAIN" />, wysłała do tych witryn pewne informacje, takie jak ustawienia lub zasady.</translation>
 <translation id="3282497668470633863">Dodaj imię i nazwisko na karcie</translation>
 <translation id="3286372614333682499">orientacja pionowa</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Zrestartuj urządzenie</translation>
 <translation id="4277028893293644418">Resetuj hasło</translation>
 <translation id="4278390842282768270">Dopuszczone</translation>
+<translation id="4281998142035485137">{0,plural, =1{Otworzyć poufny plik?}few{Otworzyć poufne pliki?}many{Otworzyć poufne pliki?}other{Otworzyć poufne pliki?}}</translation>
 <translation id="4282346679996504092">Alerty dotyczące tego produktu zostały wyłączone, a zakładka usunięta</translation>
 <translation id="4285498937028063278">Odepnij</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Ta karta została zapisana na Twoim koncie Google}few{Te karty zostały zapisane na Twoim koncie Google}many{Te karty zostały zapisane na Twoim koncie Google}other{Te karty zostały zapisane na Twoim koncie Google}}</translation>
@@ -1432,6 +1435,7 @@
 <translation id="4646534391647090355">Przejdź tam teraz</translation>
 <translation id="4648262692072505866">Hasz musi mieć format SHA-256.</translation>
 <translation id="4652266463001779298">Nie zezwolono</translation>
+<translation id="4652440160515225514">Twoja organizacja zablokowała tę witrynę, ponieważ narusza ona zasady.</translation>
 <translation id="4653167719759882810">Fuzje i przejęcia</translation>
 <translation id="4658638640878098064">Zszywka w lewym górnym rogu</translation>
 <translation id="4660119392514473465">Teraz możesz przeglądać prywatnie, a inne osoby korzystające z tego urządzenia nie zobaczą Twojej aktywności. Pobrane pliki, zakładki i elementy na liście Do przeczytania zostaną jednak zapisane.</translation>
@@ -1685,7 +1689,6 @@
 <translation id="52517543715119994">Poznaj funkcje Chrome</translation>
 <translation id="5251803541071282808">Chmura</translation>
 <translation id="5254043433801397071">Optymalizuj zawartość wydruku</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Wykonaj mimo to</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Zgodnie z zasadą administratora nie zaleca się kopiowania tego pliku, jeśli miejscem docelowym jest <ph name="DESTINATION_NAME" />}few{Zgodnie z zasadą administratora nie zaleca się kopiowania tych plików, jeśli miejscem docelowym jest <ph name="DESTINATION_NAME" />}many{Zgodnie z zasadą administratora nie zaleca się kopiowania tych plików, jeśli miejscem docelowym jest <ph name="DESTINATION_NAME" />}other{Zgodnie z zasadą administratora nie zaleca się kopiowania tych plików, jeśli miejscem docelowym jest <ph name="DESTINATION_NAME" />}}</translation>
@@ -1928,6 +1931,7 @@
 <translation id="5903264686717710770">Tytuł:</translation>
 <translation id="5904360430676679685">Rodziny i związki</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (zsynchronizowane)</translation>
+<translation id="5911110632211230665">Otwieranie zostało zablokowane</translation>
 <translation id="59174027418879706">Włączony</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{W użyciu: 1}few{W użyciu: #}many{W użyciu: #}other{W użyciu: #}}</translation>
@@ -2920,6 +2924,7 @@
 <translation id="8437238597147034694">&amp;Cofnij przeniesienie</translation>
 <translation id="8438476240229491014">Zapamiętaj to ustawienie</translation>
 <translation id="8438786541497918448">Korzystać z kamery i mikrofonu?</translation>
+<translation id="8438923942245957911">Ta witryna została oznaczona przez Twoją organizację</translation>
 <translation id="8443613539889492016">Rap i hip-hop</translation>
 <translation id="8444543005280733648">Sieci komputerowe</translation>
 <translation id="8446884382197647889">Więcej informacji</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 0878d585..de2e68dd 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Saiba mais sobre os recursos do Chrome</translation>
 <translation id="5251803541071282808">Nuvem</translation>
 <translation id="5254043433801397071">Otimizar o conteúdo da impressão</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Capturar mesmo assim</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{A política do administrador não recomenda copiar o arquivo para: <ph name="DESTINATION_NAME" />}one{A política do administrador não recomenda copiar o arquivo para: <ph name="DESTINATION_NAME" />}other{A política do administrador não recomenda copiar os arquivos para: <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index e36580c..32971f5 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Câmara</translation>
 <translation id="1622571349153632031">Cozinha vegetariana</translation>
 <translation id="1623104350909869708">Evitar que esta página crie caixas de diálogo adicionais</translation>
+<translation id="1633137413609266904">{0,plural, =1{A abertura deste ficheiro foi bloqueada pela política do administrador}other{A abertura de # ficheiros foi bloqueada pela política do administrador}}</translation>
 <translation id="1634828734222219955">Total</translation>
 <translation id="163669211644121865">Preparação e planeamento de impostos</translation>
 <translation id="1638780421120290329">Não é possível guardar o cartão</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Anular reordenação</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> pretende estabelecer ligação</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{A política do administrador não recomenda abrir este ficheiro em <ph name="DESTINATION_NAME" />}other{A política do administrador não recomenda abrir estes ficheiros em <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">A sua entidade, <ph name="ENROLLMENT_DOMAIN" />, enviou algumas informações para os seguintes Websites, como definições ou políticas.</translation>
 <translation id="3282497668470633863">Adicionar nome no cartão</translation>
 <translation id="3286372614333682499">retrato</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Reiniciar o dispositivo</translation>
 <translation id="4277028893293644418">Repor palavra-passe</translation>
 <translation id="4278390842282768270">Permitido</translation>
+<translation id="4281998142035485137">{0,plural, =1{Abrir ficheiro confidencial?}other{Abrir ficheiros confidenciais?}}</translation>
 <translation id="4282346679996504092">Os alertas para este produto foram desativados e o marcador foi removido</translation>
 <translation id="4285498937028063278">Soltar</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Este cartão foi guardado na sua Conta Google.}other{Estes cartões foram guardados na sua Conta Google.}}</translation>
@@ -1686,7 +1689,6 @@
 <translation id="52517543715119994">Saiba mais acerca das funcionalidades do Chrome</translation>
 <translation id="5251803541071282808">Nuvem</translation>
 <translation id="5254043433801397071">Otimizar conteúdo para impressão</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Capturar mesmo assim</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{A política do administrador não recomenda copiar este ficheiro para <ph name="DESTINATION_NAME" />}other{A política do administrador não recomenda copiar estes ficheiros para <ph name="DESTINATION_NAME" />}}</translation>
@@ -1929,6 +1931,7 @@
 <translation id="5903264686717710770">Título:</translation>
 <translation id="5904360430676679685">Família e relações</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizados)</translation>
+<translation id="5911110632211230665">Abertura bloqueada</translation>
 <translation id="59174027418879706">Ativada</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 em utilização}other{# em utilização}}</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 5df2507..da196b5c 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Cameră</translation>
 <translation id="1622571349153632031">Bucătărie pentru vegetarieni</translation>
 <translation id="1623104350909869708">Restricționați capacitatea acestei pagini de a crea casete de dialog suplimentare</translation>
+<translation id="1633137413609266904">{0,plural, =1{Deschiderea acestui fișier este blocată de politica implementată de administrator}few{Deschiderea a # fișiere este blocată de politica implementată de administrator}other{Deschiderea a # de fișiere este blocată de politica implementată de administrator}}</translation>
 <translation id="1634828734222219955">Total</translation>
 <translation id="163669211644121865">Pregătirea și planificarea impozitelor</translation>
 <translation id="1638780421120290329">Nu se poate salva cardul</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Anulați reordonarea</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> dorește să se conecteze</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Politica implementată de administrator nu recomandă să deschizi acest fișier în <ph name="DESTINATION_NAME" />}few{Politica implementată de administrator nu recomandă să deschizi aceste fișiere în <ph name="DESTINATION_NAME" />}other{Politica implementată de administrator nu recomandă să deschizi aceste fișiere în <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Organizația ta, <ph name="ENROLLMENT_DOMAIN" />, a trimis câteva informații următoarelor site-uri, cum ar fi setări sau politici.</translation>
 <translation id="3282497668470633863">Adaugă numele de pe card</translation>
 <translation id="3286372614333682499">portret</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Reporniți gadgetul</translation>
 <translation id="4277028893293644418">Resetează parola</translation>
 <translation id="4278390842282768270">Se permite</translation>
+<translation id="4281998142035485137">{0,plural, =1{Deschizi fișierul confidențial?}few{Deschizi fișierele confidențiale?}other{Deschizi fișierele confidențiale?}}</translation>
 <translation id="4282346679996504092">Alertele pentru acest produs au fost dezactivate și marcajul a fost eliminat</translation>
 <translation id="4285498937028063278">Anulați fixarea</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Acest card a fost salvat în Contul tău Google}few{Aceste carduri au fost salvate în Contul tău Google}other{Aceste carduri au fost salvate în Contul tău Google}}</translation>
@@ -1686,7 +1689,6 @@
 <translation id="52517543715119994">Află despre funcțiile Chrome</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Optimizează conținutul printării</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Capturează oricum</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Politica implementată de administrator nu recomandă să copiezi acest fișier în <ph name="DESTINATION_NAME" />}few{Politica implementată de administrator nu recomandă să copiezi aceste fișiere în <ph name="DESTINATION_NAME" />}other{Politica implementată de administrator nu recomandă să copiezi aceste fișiere în <ph name="DESTINATION_NAME" />}}</translation>
@@ -1929,6 +1931,7 @@
 <translation id="5903264686717710770">Titlul:</translation>
 <translation id="5904360430676679685">Familie și relații</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizat)</translation>
+<translation id="5911110632211230665">Deschidere blocată</translation>
 <translation id="59174027418879706">Activat</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 în uz}few{# în uz}other{# în uz}}</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 4f0bb88..e0f9dd21 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -1685,7 +1685,6 @@
 <translation id="52517543715119994">Подробнее о функциях Chrome</translation>
 <translation id="5251803541071282808">Облако</translation>
 <translation id="5254043433801397071">Оптимизировать контент для печати</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Все равно записать</translation>
 <translation id="5255833070095767006">350 x 460 мм</translation>
 <translation id="5257739419779698609">{0,plural, =1{Администратор не рекомендует копировать этот файл в место назначения "<ph name="DESTINATION_NAME" />".}one{Администратор не рекомендует копировать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}few{Администратор не рекомендует копировать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}many{Администратор не рекомендует копировать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}other{Администратор не рекомендует копировать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}}</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb
index cf88f7b..9a370e137 100644
--- a/components/strings/components_strings_si.xtb
+++ b/components/strings/components_strings_si.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">දැන් මාව එතැනට ගෙන යන්න</translation>
 <translation id="4648262692072505866">හැෂ් SHA-256 ආකෘතියෙන් විය යුතු වේ.</translation>
 <translation id="4652266463001779298">ඉඩ නොදේ</translation>
+<translation id="4652440160515225514">ඔබේ සංවිධානය මෙම අඩවිය එය ප්‍රතිපත්තියක් උල්ලංඝනය කරන නිසා අවහිර කර ඇත.</translation>
 <translation id="4653167719759882810">ඒකාබද්ධ කිරීම් සහ අත්පත් කර ගැනීම්</translation>
 <translation id="4658638640878098064">ඉහළ වම ස්ටේපල් කරන්න</translation>
 <translation id="4660119392514473465">දැන් ඔබට පෞද්ගලිකව බ්‍රවුස් කළ හැකි අතර, මෙම උපාංගය භාවිතා කරන වෙනත් පුද්ගලයින් ඔබගේ ක්‍රියාකාරකම් නොදකිනු ඇත. කෙසේ වෙතත්, බාගැනීම්, පිටුසන් සහ කියවීම් ලැයිස්තු අයිතම සුරකිනු ඇත.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Chrome විශේෂාංග ගැන දැන ගන්න</translation>
 <translation id="5251803541071282808">වලාකුළ</translation>
 <translation id="5254043433801397071">මුද්‍රණ අන්තර්ගතය ප්‍රශස්ත කරන්න</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">කෙසේ වෙතත් ග්‍රහණය කර ගන්න</translation>
 <translation id="5255833070095767006">මිමි 350 x 460</translation>
 <translation id="5257739419779698609">{0,plural, =1{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනුව <ph name="DESTINATION_NAME" /> වෙත පිටපත් කිරීම නිර්දේශ නොකරයි}one{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනු <ph name="DESTINATION_NAME" /> වෙත පිටපත් කිරීම නිර්දේශ නොකරයි}other{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනු <ph name="DESTINATION_NAME" /> වෙත පිටපත් කිරීම නිර්දේශ නොකරයි}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">ගෙන යාම &amp;පසුගමනය කරන්න</translation>
 <translation id="8438476240229491014">මෙම සැකසීම මතක තබා ගන්න</translation>
 <translation id="8438786541497918448">කැමරාව සහ මයික්‍රෆෝනය භාවිත කරන්නද?</translation>
+<translation id="8438923942245957911">මෙම අඩවිය ඔබේ සංවිධානය විසින් සලකුණු කර ඇත</translation>
 <translation id="8443613539889492016">රැප් සහ හිප්-හොප්</translation>
 <translation id="8444543005280733648">පරිගණක ජාල</translation>
 <translation id="8446884382197647889">තවත් දැනගන්න</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 52f7197..28d3b4f 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="1622571349153632031">Vegetariánska kuchyňa</translation>
 <translation id="1623104350909869708">Zakázať tejto stránke otvárať ďalšie dialógové okná</translation>
+<translation id="1633137413609266904">{0,plural, =1{Otvorenie tohto súboru je blokované pravidlami správcu}few{Otvorenie # súborov je blokované pravidlami správcu}many{Opening # files is blocked by administrator policy}other{Otvorenie # súborov je blokované pravidlami správcu}}</translation>
 <translation id="1634828734222219955">Celkove</translation>
 <translation id="163669211644121865">Daňová príprava a plánovanie</translation>
 <translation id="1638780421120290329">Karta sa nedá uložiť</translation>
@@ -893,6 +894,7 @@
 <translation id="3270847123878663523">&amp;Vrátiť späť zmenu poradia</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> žiada o pripojenie</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Pravidlá správcu otvorenie tohto súboru v službe <ph name="DESTINATION_NAME" /> neodporúčajú}few{Pravidlá správcu otvorenie týchto súborov v službe <ph name="DESTINATION_NAME" /> neodporúčajú}many{Administrator policy doesn’t recommend opening these files in <ph name="DESTINATION_NAME" />}other{Pravidlá správcu otvorenie týchto súborov v službe <ph name="DESTINATION_NAME" /> neodporúčajú}}</translation>
 <translation id="3282085321714087552">Vaša organizácia, <ph name="ENROLLMENT_DOMAIN" />, odoslala na nasledujúce weby nejaké informácie, napríklad nastavenia alebo pravidlá.</translation>
 <translation id="3282497668470633863">Pridanie mena na karte</translation>
 <translation id="3286372614333682499">na výšku</translation>
@@ -1291,6 +1293,7 @@
 <translation id="4275830172053184480">Reštart zariadenia</translation>
 <translation id="4277028893293644418">Obnoviť heslo</translation>
 <translation id="4278390842282768270">Povolené</translation>
+<translation id="4281998142035485137">{0,plural, =1{Chcete otvoriť dôverný súbor?}few{Chcete otvoriť dôverné súbory?}many{Open confidential files?}other{Chcete otvoriť dôverné súbory?}}</translation>
 <translation id="4282346679996504092">Upozornenia na tento výrobok boli vypnuté a záložka bola odstránená</translation>
 <translation id="4285498937028063278">Odopnúť</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Táto karta sa uložila do vášho účtu Google}few{Tieto karty sa uložili do vášho účtu Google}many{Tieto karty sa uložili do vášho účtu Google}other{Tieto karty sa uložili do vášho účtu Google}}</translation>
@@ -1682,7 +1685,6 @@
 <translation id="52517543715119994">Informácie o funkciách Chromu</translation>
 <translation id="5251803541071282808">Cloud</translation>
 <translation id="5254043433801397071">Optimalizovať obsah tlače</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Napriek tomu nasnímať</translation>
 <translation id="5255833070095767006">350 × 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Pravidlá správcu kopírovanie tohto súboru do úložiska <ph name="DESTINATION_NAME" /> neodporúčajú}few{Pravidlá správcu kopírovanie týchto súborov do úložiska <ph name="DESTINATION_NAME" /> neodporúčajú}many{Pravidlá správcu kopírovanie týchto súborov do úložiska <ph name="DESTINATION_NAME" /> neodporúčajú}other{Pravidlá správcu kopírovanie týchto súborov do úložiska <ph name="DESTINATION_NAME" /> neodporúčajú}}</translation>
@@ -1925,6 +1927,7 @@
 <translation id="5903264686717710770">Názov:</translation>
 <translation id="5904360430676679685">Rodina a vzťahy</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronizované)</translation>
+<translation id="5911110632211230665">Otváranie je blokované</translation>
 <translation id="59174027418879706">Povolené</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Používa sa 1}few{Používajú sa #}many{Používa sa #}other{Používa sa #}}</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index 3b713444b..097ec9d 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Odpri zdaj</translation>
 <translation id="4648262692072505866">Zgoščena vrednost mora biti v obliki zapisa SHA-256.</translation>
 <translation id="4652266463001779298">Ni dovoljeno</translation>
+<translation id="4652440160515225514">Vaša organizacija je blokirala to spletno mesto, ker krši pravilnik.</translation>
 <translation id="4653167719759882810">Združitve in pridobitve</translation>
 <translation id="4658638640878098064">Spenjanje zgoraj levo</translation>
 <translation id="4660119392514473465">Zdaj je mogoče brskati zasebno in drugi, ki uporabljajo to napravo, ne bodo videli vaše dejavnosti. Prenosi, zaznamki in elementi na bralnem seznamu bodo vseeno shranjeni.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Več o funkcijah Chroma</translation>
 <translation id="5251803541071282808">Oblak</translation>
 <translation id="5254043433801397071">Optimiziranje vsebine za tiskanje</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Vseeno zajemi</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Pravilnik skrbnika ne priporoča kopiranja te datoteke sem: <ph name="DESTINATION_NAME" />.}one{Pravilnik skrbnika ne priporoča kopiranja teh datotek sem: <ph name="DESTINATION_NAME" />.}two{Pravilnik skrbnika ne priporoča kopiranja teh datotek sem: <ph name="DESTINATION_NAME" />.}few{Pravilnik skrbnika ne priporoča kopiranja teh datotek sem: <ph name="DESTINATION_NAME" />.}other{Pravilnik skrbnika ne priporoča kopiranja teh datotek sem: <ph name="DESTINATION_NAME" />.}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">&amp;Razveljavi premik</translation>
 <translation id="8438476240229491014">Zapomni si to nastavitev</translation>
 <translation id="8438786541497918448">Želite uporabiti kamero in mikrofon?</translation>
+<translation id="8438923942245957911">To spletno mesto je označila vaša organizacija</translation>
 <translation id="8443613539889492016">Rap in hip-hop</translation>
 <translation id="8444543005280733648">Računalniška omrežja</translation>
 <translation id="8446884382197647889">Več o tem</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index a2b80f6..0d4fc59 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">Më ço atje tani</translation>
 <translation id="4648262692072505866">Vlera hash duhet të jenë në formatin SHA-256.</translation>
 <translation id="4652266463001779298">Nuk lejohet</translation>
+<translation id="4652440160515225514">Organizata jote e ka bllokuar këtë sajt sepse ai shkel një politikë.</translation>
 <translation id="4653167719759882810">Shkrirjet dhe blerjet</translation>
 <translation id="4658638640878098064">Kapje me tel lart majtas</translation>
 <translation id="4660119392514473465">Tani mund të shfletosh në mënyrë private dhe personat e tjerë që përdorin këtë pajisje nuk do ta shikojnë aktivitetin tënd. Sidoqoftë, shkarkimet dhe faqeshënuesit do të ruhen.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Mëso për veçoritë e Chrome</translation>
 <translation id="5251803541071282808">Reja kompjuterike</translation>
 <translation id="5254043433801397071">Optimizo përmbajtjen e printimit</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Shkrepe gjithsesi</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Politika e administratorit nuk rekomandon kopjimin e këtij skedari te: <ph name="DESTINATION_NAME" />}other{Politika e administratorit nuk rekomandon kopjimin e këtyre skedarëve te: <ph name="DESTINATION_NAME" />}}</translation>
@@ -2919,6 +2919,7 @@
 <translation id="8437238597147034694">&amp;Zhbëj zhvendosjen</translation>
 <translation id="8438476240229491014">Kujtoje këtë cilësim</translation>
 <translation id="8438786541497918448">Të përdoret kamera dhe mikrofoni?</translation>
+<translation id="8438923942245957911">Ky sajt është raportuar nga organizata jote</translation>
 <translation id="8443613539889492016">Muzika rap dhe hip-hop</translation>
 <translation id="8444543005280733648">Rrjetet kompjuterike</translation>
 <translation id="8446884382197647889">Mëso më shumë</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index 7781314..859be7fc7 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Saznajte više o Chrome funkcijama</translation>
 <translation id="5251803541071282808">Klaud</translation>
 <translation id="5254043433801397071">Optimizujte sadržaj za štampanje</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Ipak snimi</translation>
 <translation id="5255833070095767006">350×460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Smernice administratora ne preporučuju kopiranje ovog fajla na <ph name="DESTINATION_NAME" />}one{Smernice administratora ne preporučuju kopiranje ovih fajlova na <ph name="DESTINATION_NAME" />}few{Smernice administratora ne preporučuju kopiranje ovih fajlova na <ph name="DESTINATION_NAME" />}other{Smernice administratora ne preporučuju kopiranje ovih fajlova na <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 7b61589..7f92051 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Сазнајте више о Chrome функцијама</translation>
 <translation id="5251803541071282808">Клауд</translation>
 <translation id="5254043433801397071">Оптимизујте садржај за штампање</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Ипак сними</translation>
 <translation id="5255833070095767006">350×460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Смернице администратора не препоручују копирање овог фајла на <ph name="DESTINATION_NAME" />}one{Смернице администратора не препоручују копирање ових фајлова на <ph name="DESTINATION_NAME" />}few{Смернице администратора не препоручују копирање ових фајлова на <ph name="DESTINATION_NAME" />}other{Смернице администратора не препоручују копирање ових фајлова на <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index c5c1c91..13eb303 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">Kamera</translation>
 <translation id="1622571349153632031">Vegetarisk mat</translation>
 <translation id="1623104350909869708">Hindra sidan från att skapa fler dialogrutor</translation>
+<translation id="1633137413609266904">{0,plural, =1{Möjligheten att öppna den här filen blockeras av administratörspolicyn}other{Möjligheten att öppna # filer blockeras av administratörspolicyn}}</translation>
 <translation id="1634828734222219955">Totalt</translation>
 <translation id="163669211644121865">Skattefrågor och skatteplanering</translation>
 <translation id="1638780421120290329">Det gick inte att spara kortet</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;Ångra Ändra ordning</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> vill ansluta</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{Enligt administratörspolicyn är det inte rekommenderat att öppna filen i <ph name="DESTINATION_NAME" />}other{Enligt administratörspolicyn är det inte rekommenderat att öppna filerna i <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">Organisationen <ph name="ENROLLMENT_DOMAIN" /> har skickat en del information, t.ex. inställningar eller principer, till följande webbplatser.</translation>
 <translation id="3282497668470633863">Lägg till namnet på kortet</translation>
 <translation id="3286372614333682499">stående</translation>
@@ -1295,6 +1297,7 @@
 <translation id="4275830172053184480">Starta om enheten</translation>
 <translation id="4277028893293644418">Återställ lösenord</translation>
 <translation id="4278390842282768270">Tillåts</translation>
+<translation id="4281998142035485137">{0,plural, =1{Vill du öppna den konfidentiella filen?}other{Vill du öppna de konfidentiella filerna?}}</translation>
 <translation id="4282346679996504092">Aviseringar för den här produkten har inaktiverats och bokmärket har tagits bort</translation>
 <translation id="4285498937028063278">Lossa</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Det här kortet har sparats i ditt Google-konto}other{De här korten har sparats i ditt Google-konto}}</translation>
@@ -1432,6 +1435,7 @@
 <translation id="4646534391647090355">Gå dit nu</translation>
 <translation id="4648262692072505866">Ett hashvärde måste ha formatet SHA-256.</translation>
 <translation id="4652266463001779298">Tillåts inte</translation>
+<translation id="4652440160515225514">Organisationen har blockerat den här webbplatsen eftersom den bryter mot en policy.</translation>
 <translation id="4653167719759882810">Företagsfusioner och förvärv</translation>
 <translation id="4658638640878098064">Häfta uppe till vänster</translation>
 <translation id="4660119392514473465">Nu kan du surfa privat. Din aktivitet visas inte för andra som använder enheten. Nedladdningar, bokmärken och objekt i läslistan sparas dock.</translation>
@@ -1685,7 +1689,6 @@
 <translation id="52517543715119994">Läs mer om funktioner i Chrome</translation>
 <translation id="5251803541071282808">Moln</translation>
 <translation id="5254043433801397071">Optimera utskriftsinnehåll</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Ta bild/spela in ändå</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Enligt administratörspolicyn är det inte rekommenderat att kopiera den här filen till <ph name="DESTINATION_NAME" />}other{Enligt administratörspolicyn är det inte rekommenderat att kopiera dessa filer till <ph name="DESTINATION_NAME" />}}</translation>
@@ -1928,6 +1931,7 @@
 <translation id="5903264686717710770">Namn:</translation>
 <translation id="5904360430676679685">Familj och relationer</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkroniserade)</translation>
+<translation id="5911110632211230665">Öppning har blockerats</translation>
 <translation id="59174027418879706">Aktiverad</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 används}other{# används}}</translation>
@@ -2920,6 +2924,7 @@
 <translation id="8437238597147034694">&amp;Ångra Flytta</translation>
 <translation id="8438476240229491014">Kom ihåg inställningen</translation>
 <translation id="8438786541497918448">Vill du använda kameran och mikrofonen?</translation>
+<translation id="8438923942245957911">Den här webbplatsen har markerats av organisationen</translation>
 <translation id="8443613539889492016">Rap och hip-hop</translation>
 <translation id="8444543005280733648">Datornätverk</translation>
 <translation id="8446884382197647889">Läs mer</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index 270574db..cb9d9e1 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Pata maelezo kuhusu vipengele vya Chrome</translation>
 <translation id="5251803541071282808">Wingu</translation>
 <translation id="5254043433801397071">Boresha maudhui ya kuchapisha</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Nasa licha ya hayo</translation>
 <translation id="5255833070095767006">Milimita 350 x 460</translation>
 <translation id="5257739419779698609">{0,plural, =1{Sera ya msimamizi haipendekezi kunakili faili hii kwenye <ph name="DESTINATION_NAME" />}other{Sera ya msimamizi haipendekezi kunakili faili hizi kwenye <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 3f0373e..882a9b8 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -1428,6 +1428,7 @@
 <translation id="4646534391647090355">அங்கே செல்</translation>
 <translation id="4648262692072505866">SHA-256 வடிவத்தில் ஹேஷ் இருக்க வேண்டும்.</translation>
 <translation id="4652266463001779298">அனுமதி முடக்கப்பட்டுள்ளது</translation>
+<translation id="4652440160515225514">கொள்கையை மீறுவதால் இந்தத் தளத்தை உங்கள் நிறுவனம் தடுத்துள்ளது.</translation>
 <translation id="4653167719759882810">நிறுவன ஒருங்கிணைப்புகள் &amp; கையகப்படுத்துதல்</translation>
 <translation id="4658638640878098064">ஸ்டேப்பில் டாப் லெஃப்ட்</translation>
 <translation id="4660119392514473465">இப்போது தனிப்பட்ட முறையில் உலாவலாம், இந்தச் சாதனத்தைப் பயன்படுத்தும் பிறரால் உங்கள் செயல்பாட்டைப் பார்க்க முடியாது. இருப்பினும் பதிவிறக்கங்கள், புக்மார்க்குகள் மற்றும் வாசிப்புப் பட்டியலில் உள்ளவை சேமிக்கப்படும்.</translation>
@@ -1681,7 +1682,6 @@
 <translation id="52517543715119994">Chrome அம்சங்கள் குறித்து அறியலாம்</translation>
 <translation id="5251803541071282808">கிளவுடு</translation>
 <translation id="5254043433801397071">அச்சிடுவதற்கான உள்ளடக்கத்தை மேம்படுத்து</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">பரவாயில்லை, படமெடு</translation>
 <translation id="5255833070095767006">350 x 460 மிமீ</translation>
 <translation id="5257739419779698609">{0,plural, =1{<ph name="DESTINATION_NAME" />க்கு இந்த ஃபைலை நகலெடுப்பதை நிர்வாகக் கொள்கை பரிந்துரைக்கவில்லை}other{<ph name="DESTINATION_NAME" />க்கு இந்த ஃபைல்களை நகலெடுப்பதை நிர்வாகக் கொள்கை பரிந்துரைக்கவில்லை}}</translation>
@@ -2915,6 +2915,7 @@
 <translation id="8437238597147034694">&amp;நகர்த்தலைச் செயல்தவிர்</translation>
 <translation id="8438476240229491014">இந்த அமைப்பை நினைவில்கொள்</translation>
 <translation id="8438786541497918448">கேமராவையும் மைக்ரோஃபோனையும் பயன்படுத்தவா?</translation>
+<translation id="8438923942245957911">இந்தத் தளத்தை உங்கள் நிறுவனம் கொடியிட்டுள்ளது</translation>
 <translation id="8443613539889492016">ராப் &amp; ஹிப்-ஹாப்</translation>
 <translation id="8444543005280733648">கம்ப்யூட்டர் நெட்வொர்க்குகள்</translation>
 <translation id="8446884382197647889">மேலும் அறிக</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 36a1690..c0a306c 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -1688,7 +1688,6 @@
 <translation id="52517543715119994">Chrome ఫీచర్‌ల గురించి తెలుసుకోండి</translation>
 <translation id="5251803541071282808">క్లౌడ్</translation>
 <translation id="5254043433801397071">ప్రింట్ కంటెంట్‌ను ఆప్టిమైజ్ చేయి</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">ఏదేమైనా క్యాప్చర్ చేయి</translation>
 <translation id="5255833070095767006">350 x 460 మి.మీ.</translation>
 <translation id="5257739419779698609">{0,plural, =1{ఈ ఫైల్‌ను <ph name="DESTINATION_NAME" />‌కు కాపీ చేయవద్దని అడ్మినిస్ట్రేటర్ పాలసీ సిఫార్సు చేస్తోంది}other{ఈ ఫైల్స్‌ను <ph name="DESTINATION_NAME" />‌కు కాపీ చేయవద్దని అడ్మినిస్ట్రేటర్ పాలసీ సిఫార్సు చేస్తోంది}}</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 2832e1e..0232178 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -282,6 +282,7 @@
 <translation id="1620510694547887537">กล้องถ่ายรูป</translation>
 <translation id="1622571349153632031">อาหารมังสวิรัติ</translation>
 <translation id="1623104350909869708">ป้องกันหน้าเว็บนี้จากการสร้างการโต้ตอบเพิ่มเติม</translation>
+<translation id="1633137413609266904">{0,plural, =1{นโยบายของผู้ดูแลระบบบล็อกการเปิดไฟล์นี้}other{นโยบายของผู้ดูแลระบบบล็อกการเปิดไฟล์ # รายการ}}</translation>
 <translation id="1634828734222219955">รวม</translation>
 <translation id="163669211644121865">การจัดเตรียมเอกสารและวางแผนภาษี</translation>
 <translation id="1638780421120290329">บันทึกบัตรไม่ได้</translation>
@@ -896,6 +897,7 @@
 <translation id="3270847123878663523">&amp;เลิกทำการจัดลำดับใหม่</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> ต้องการเชื่อมต่อ</translation>
 <translation id="3272091146646336650">Super B</translation>
+<translation id="3281350579597955952">{0,plural, =1{นโยบายของผู้ดูแลระบบไม่แนะนำให้เปิดไฟล์นี้ใน <ph name="DESTINATION_NAME" />}other{นโยบายของผู้ดูแลระบบไม่แนะนำให้เปิดไฟล์เหล่านี้ใน <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3282085321714087552">องค์กรของคุณ <ph name="ENROLLMENT_DOMAIN" /> ได้ส่งข้อมูลบางอย่าง เช่น การตั้งค่าหรือนโยบายไปยังเว็บไซต์ต่อไปนี้</translation>
 <translation id="3282497668470633863">เพิ่มชื่อบนบัตร</translation>
 <translation id="3286372614333682499">แนวตั้ง</translation>
@@ -1294,6 +1296,7 @@
 <translation id="4275830172053184480">รีสตาร์ทอุปกรณ์ของคุณ</translation>
 <translation id="4277028893293644418">รีเซ็ตรหัสผ่าน</translation>
 <translation id="4278390842282768270">อนุญาตแล้ว</translation>
+<translation id="4281998142035485137">{0,plural, =1{ต้องการเปิดไฟล์ลับใช่ไหม}other{ต้องการเปิดไฟล์ลับใช่ไหม}}</translation>
 <translation id="4282346679996504092">ปิดการแจ้งเตือนสำหรับผลิตภัณฑ์นี้และนำบุ๊กมาร์กออกแล้ว</translation>
 <translation id="4285498937028063278">เลิกปักหมุด</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{บันทึกบัตรนี้ลงในบัญชี Google ของคุณแล้ว}other{บันทึกบัตรเหล่านี้ลงในบัญชี Google ของคุณแล้ว}}</translation>
@@ -1685,7 +1688,6 @@
 <translation id="52517543715119994">ดูข้อมูลเกี่ยวกับฟีเจอร์ของ Chrome</translation>
 <translation id="5251803541071282808">ระบบคลาวด์</translation>
 <translation id="5254043433801397071">เพิ่มประสิทธิภาพเนื้อหาที่พิมพ์</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">จับภาพเลย</translation>
 <translation id="5255833070095767006">350 x 460 มม.</translation>
 <translation id="5257739419779698609">{0,plural, =1{นโยบายของผู้ดูแลระบบไม่แนะนำให้คัดลอกไฟล์นี้ไปยัง <ph name="DESTINATION_NAME" />}other{นโยบายของผู้ดูแลระบบไม่แนะนำให้คัดลอกไฟล์เหล่านี้ไปยัง <ph name="DESTINATION_NAME" />}}</translation>
@@ -1928,6 +1930,7 @@
 <translation id="5903264686717710770">ชื่อ:</translation>
 <translation id="5904360430676679685">ครอบครัวและความสัมพันธ์</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ซิงค์แล้ว)</translation>
+<translation id="5911110632211230665">การเปิดไฟล์ถูกบล็อก</translation>
 <translation id="59174027418879706">เปิดใช้งาน</translation>
 <translation id="5919090499915321845">B10</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ใช้งานอยู่ 1 รายการ}other{ใช้งานอยู่ # รายการ}}</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 7421b8a..77b93b6 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -1432,6 +1432,7 @@
 <translation id="4646534391647090355">İndirilenlere git</translation>
 <translation id="4648262692072505866">Karma, SHA-256 biçiminde olmalıdır.</translation>
 <translation id="4652266463001779298">İzin verilmiyor</translation>
+<translation id="4652440160515225514">Kuruluşunuz, bir politikayı ihlal ettiği için bu siteyi engelledi.</translation>
 <translation id="4653167719759882810">Birleşmeler ve satın almalar</translation>
 <translation id="4658638640878098064">Sol üstte tel zımba</translation>
 <translation id="4660119392514473465">Artık gizli olarak göz atabilirsiniz. Bu cihazı kullanan diğer kişiler etkinliğinizi görmez. Yine de indirdikleriniz, yer işaretleri ve okuma listesi öğeleri kaydedilir.</translation>
@@ -1685,7 +1686,6 @@
 <translation id="52517543715119994">Chrome özellikleri hakkında bilgi edinin</translation>
 <translation id="5251803541071282808">Bulut</translation>
 <translation id="5254043433801397071">Yazdırma içeriğini optimize et</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Yine de görüntü al</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Yönetici politikası bu dosyayı <ph name="DESTINATION_NAME" /> hedefine kopyalamanızı önermiyor}other{Yönetici politikası bu dosyaları <ph name="DESTINATION_NAME" /> hedefine kopyalamanızı önermiyor}}</translation>
@@ -2920,6 +2920,7 @@
 <translation id="8437238597147034694">Taşımayı &amp;geri al</translation>
 <translation id="8438476240229491014">Bu ayarı hatırla</translation>
 <translation id="8438786541497918448">Kamera ve mikrofon kullanılsın mı?</translation>
+<translation id="8438923942245957911">Bu site, kuruluşunuz tarafından işaretlendi</translation>
 <translation id="8443613539889492016">Rap ve hip-hop</translation>
 <translation id="8444543005280733648">Bilgisayar ağları</translation>
 <translation id="8446884382197647889">Daha Fazla Bilgi Edinin</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 4fdc2fa..bff53a55 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Докладніше про функції Chrome</translation>
 <translation id="5251803541071282808">Хмара</translation>
 <translation id="5254043433801397071">Оптимізувати контент для друку</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Усе одно записати</translation>
 <translation id="5255833070095767006">350 x 460 мм</translation>
 <translation id="5257739419779698609">{0,plural, =1{Згідно з правилом адміністратора не рекомендовано копіювати цей файл у розташування "<ph name="DESTINATION_NAME" />"}one{Згідно з правилом адміністратора не рекомендовано копіювати ці файли в розташування "<ph name="DESTINATION_NAME" />"}few{Згідно з правилом адміністратора не рекомендовано копіювати ці файли в розташування "<ph name="DESTINATION_NAME" />"}many{Згідно з правилом адміністратора не рекомендовано копіювати ці файли в розташування "<ph name="DESTINATION_NAME" />"}other{Згідно з правилом адміністратора не рекомендовано копіювати ці файли в розташування "<ph name="DESTINATION_NAME" />"}}</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index 2578b27d..62b3ce3 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -1688,7 +1688,6 @@
 <translation id="52517543715119994">‏Chrome کی خصوصیات کے بارے میں جانیں</translation>
 <translation id="5251803541071282808">کلاؤڈ</translation>
 <translation id="5254043433801397071">پرنٹ کے مواد کو بہتر بنائیں</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">بہر حال کیپچر کریں</translation>
 <translation id="5255833070095767006">‏‎350 x 460 ملی میٹر</translation>
 <translation id="5257739419779698609">{0,plural, =1{منتظم کی پالیسی اس فائل کو <ph name="DESTINATION_NAME" /> میں کاپی کرنے کی تجویز نہیں کرتی ہے}other{منتظم کی پالیسی ان فائلز کو <ph name="DESTINATION_NAME" /> میں کاپی کرنے کی تجویز نہیں کرتی ہے}}</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb
index f4f717a..91338a0 100644
--- a/components/strings/components_strings_uz.xtb
+++ b/components/strings/components_strings_uz.xtb
@@ -1427,6 +1427,7 @@
 <translation id="4646534391647090355">Hoziroq ochish</translation>
 <translation id="4648262692072505866">Hesh SHA-256 formatida boʻlishi kerak.</translation>
 <translation id="4652266463001779298">Ruxsat berilmagan</translation>
+<translation id="4652440160515225514">Tashkilotingiz bu saytni siyosatni buzgani uchun blokladi.</translation>
 <translation id="4653167719759882810">Birlashishlar va sotib olishlar</translation>
 <translation id="4658638640878098064">Yuqori chapdan steplerlash</translation>
 <translation id="4660119392514473465">Inkognito rejimida bajargan amallaringiz ushbu qurilmaning boshqa foydalanuvchilariga koʻrinmaydi. Biroq bukmarklar va yuklab olingan fayllar saqlanib qoladi.</translation>
@@ -1680,7 +1681,6 @@
 <translation id="52517543715119994">Chrome funksiyalari bilan tanishuv</translation>
 <translation id="5251803541071282808">Bulut</translation>
 <translation id="5254043433801397071">Bosma kontentni takomillashtirish</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Baribir yozib olish</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Administrator bu faylni <ph name="DESTINATION_NAME" />ga nusxalashni tavsiya qilmaydi}other{Administrator bu fayllarni <ph name="DESTINATION_NAME" />ga nusxalashni tavsiya qilmaydi}}</translation>
@@ -2914,6 +2914,7 @@
 <translation id="8437238597147034694">&amp;Ko‘chirib o‘tishni bekor qilish</translation>
 <translation id="8438476240229491014">Bu sozlama eslab qolinsin</translation>
 <translation id="8438786541497918448">Kamera va mikrofon ishlatilsinmi?</translation>
+<translation id="8438923942245957911">Bu sayt tashkilotingiz tomonidan belgilangan</translation>
 <translation id="8443613539889492016">Rep va xip-xop</translation>
 <translation id="8444543005280733648">Kompyuter tarmoqlari</translation>
 <translation id="8446884382197647889">Batafsil</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index ece5a002..bdc6c7a3 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -1686,7 +1686,6 @@
 <translation id="52517543715119994">Tìm hiểu các tính năng của Chrome</translation>
 <translation id="5251803541071282808">Đám mây</translation>
 <translation id="5254043433801397071">Tối ưu hóa nội dung in</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Vẫn chụp</translation>
 <translation id="5255833070095767006">350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Theo chính sách của quản trị viên, bạn không nên sao chép tệp này sang <ph name="DESTINATION_NAME" />}other{Theo chính sách của quản trị viên, bạn không nên sao chép các tệp này sang <ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 1f2597d4..59b1802 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -1428,6 +1428,7 @@
 <translation id="4646534391647090355">立即前往</translation>
 <translation id="4648262692072505866">哈希值格式必须为 SHA-256。</translation>
 <translation id="4652266463001779298">不允许</translation>
+<translation id="4652440160515225514">贵组织已屏蔽此网站,因为它违反了相关政策。</translation>
 <translation id="4653167719759882810">并购</translation>
 <translation id="4658638640878098064">钉装(左上角)</translation>
 <translation id="4660119392514473465">现在,您便可进行私密浏览了。与您共用此设备的其他用户将不会看到您的活动,但您的下载内容、书签和阅读清单项将会保存在此设备上。</translation>
@@ -1681,7 +1682,6 @@
 <translation id="52517543715119994">了解各项 Chrome 功能</translation>
 <translation id="5251803541071282808">云端</translation>
 <translation id="5254043433801397071">优化打印内容</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">仍然截取/录制</translation>
 <translation id="5255833070095767006">350 x 460 毫米</translation>
 <translation id="5257739419779698609">{0,plural, =1{管理员政策不建议将这个文件复制到<ph name="DESTINATION_NAME" />}other{管理员政策不建议将这些文件复制到<ph name="DESTINATION_NAME" />}}</translation>
@@ -2915,6 +2915,7 @@
 <translation id="8437238597147034694">撤消移动(&amp;U)</translation>
 <translation id="8438476240229491014">记住此设置</translation>
 <translation id="8438786541497918448">使用摄像头和麦克风?</translation>
+<translation id="8438923942245957911">贵组织已标记此网站</translation>
 <translation id="8443613539889492016">说唱</translation>
 <translation id="8444543005280733648">计算机网络</translation>
 <translation id="8446884382197647889">了解详情</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index bda6eae..f412b47 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -1431,7 +1431,7 @@
 <translation id="4646534391647090355">立即前往下載中心</translation>
 <translation id="4648262692072505866">雜湊必須為 SHA-256 格式。</translation>
 <translation id="4652266463001779298">不允許</translation>
-<translation id="4652440160515225514">這個網站由於違反某項政策規定,因此已遭貴機構封鎖。</translation>
+<translation id="4652440160515225514">由於此網站違反政策,因此已被您的機構封鎖。</translation>
 <translation id="4653167719759882810">合併和收購</translation>
 <translation id="4658638640878098064">釘裝 (左上方)</translation>
 <translation id="4660119392514473465">現在您可私下瀏覽內容,而使用這部電腦的其他使用者將無法看到您的活動。不過,您的下載檔案、書籤和閱讀清單項目仍會保留在裝置上。</translation>
@@ -1685,7 +1685,6 @@
 <translation id="52517543715119994">瞭解 Chrome 的功能</translation>
 <translation id="5251803541071282808">雲端</translation>
 <translation id="5254043433801397071">優化列印內容</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">仍要擷取</translation>
 <translation id="5255833070095767006">350 x 460 毫米</translation>
 <translation id="5257739419779698609">{0,plural, =1{管理員政策不建議複製此檔案到<ph name="DESTINATION_NAME" />}other{管理員政策不建議複製這些檔案到<ph name="DESTINATION_NAME" />}}</translation>
@@ -2920,7 +2919,7 @@
 <translation id="8437238597147034694">復原移動(&amp;U)</translation>
 <translation id="8438476240229491014">記住此設定</translation>
 <translation id="8438786541497918448">要使用攝錄機和麥克風嗎?</translation>
-<translation id="8438923942245957911">貴機構已標記這個網站</translation>
+<translation id="8438923942245957911">您的機構已標示此網站</translation>
 <translation id="8443613539889492016">饒舌音樂和 Hip-Hop</translation>
 <translation id="8444543005280733648">電腦網絡</translation>
 <translation id="8446884382197647889">瞭解詳情</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 3b5e1b7..5b060c69 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -1685,7 +1685,6 @@
 <translation id="52517543715119994">瞭解 Chrome 功能</translation>
 <translation id="5251803541071282808">雲端</translation>
 <translation id="5254043433801397071">最佳化列印內容</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">仍要擷取</translation>
 <translation id="5255833070095767006">350 x 460 公釐</translation>
 <translation id="5257739419779698609">{0,plural, =1{根據管理員政策,建議你不要將這個檔案複製到「<ph name="DESTINATION_NAME" />」}other{根據管理員政策,建議你不要將這些檔案複製到「<ph name="DESTINATION_NAME" />」}}</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb
index 4076e99..d4beb78 100644
--- a/components/strings/components_strings_zu.xtb
+++ b/components/strings/components_strings_zu.xtb
@@ -1683,7 +1683,6 @@
 <translation id="52517543715119994">Funda ngezakhi ze-Chrome</translation>
 <translation id="5251803541071282808">Amafu</translation>
 <translation id="5254043433801397071">Lungiselela ukuphrinta okuqukethwe</translation>
-<translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">Thatha noma kunjalo</translation>
 <translation id="5255833070095767006">U-350 x 460 mm</translation>
 <translation id="5257739419779698609">{0,plural, =1{Inqubomgomo yomlawuli ayincomi ukukopisha leli fayela ku-<ph name="DESTINATION_NAME" />}one{Inqubomgomo yomlawuli ayincomi ukulayisha lamafayela ku-<ph name="DESTINATION_NAME" />}other{Inqubomgomo yomlawuli ayincomi ukulayisha lamafayela ku-<ph name="DESTINATION_NAME" />}}</translation>
diff --git a/components/sync_device_info/local_device_info_util.cc b/components/sync_device_info/local_device_info_util.cc
index ecd971d..d3fe8c656 100644
--- a/components/sync_device_info/local_device_info_util.cc
+++ b/components/sync_device_info/local_device_info_util.cc
@@ -66,8 +66,12 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   // |full_hardware_class| is set on Chrome OS devices if the user has UMA
   // enabled. Otherwise |full_hardware_class| is set to an empty string.
-  chromeos::system::StatisticsProvider::GetInstance()->GetMachineStatistic(
-      chromeos::system::kHardwareClassKey, &name_info_ptr->full_hardware_class);
+  if (const absl::optional<base::StringPiece> full_hardware_class =
+          chromeos::system::StatisticsProvider::GetInstance()
+              ->GetMachineStatistic(chromeos::system::kHardwareClassKey)) {
+    name_info_ptr->full_hardware_class =
+        std::string(full_hardware_class.value());
+  }
 #else
   name_info_ptr->full_hardware_class = "";
 #endif
diff --git a/components/web_package/test_support/signed_web_bundles/web_bundle_signer.cc b/components/web_package/test_support/signed_web_bundles/web_bundle_signer.cc
index d74034ab..4a12355 100644
--- a/components/web_package/test_support/signed_web_bundles/web_bundle_signer.cc
+++ b/components/web_package/test_support/signed_web_bundles/web_bundle_signer.cc
@@ -6,6 +6,7 @@
 
 #include "components/cbor/values.h"
 #include "components/cbor/writer.h"
+#include "components/web_package/signed_web_bundles/ed25519_public_key.h"
 #include "components/web_package/signed_web_bundles/signed_web_bundle_utils.h"
 #include "crypto/secure_hash.h"
 #include "third_party/boringssl/src/include/openssl/curve25519.h"
@@ -28,7 +29,7 @@
 }
 
 cbor::Value WebBundleSigner::CreateSignatureStackEntry(
-    base::span<const uint8_t> public_key,
+    const Ed25519PublicKey& public_key,
     std::vector<uint8_t> signature,
     ErrorForTesting error_for_testing) {
   if (error_for_testing == ErrorForTesting::kInvalidSignatureLength) {
@@ -37,7 +38,8 @@
 
   cbor::Value::ArrayValue entry;
   entry.push_back(cbor::Value(CreateSignatureStackEntryAttributes(
-      std::vector(public_key.begin(), public_key.end()), error_for_testing)));
+      std::vector(public_key.bytes().begin(), public_key.bytes().end()),
+      error_for_testing)));
   entry.push_back(cbor::Value(signature));
 
   if (error_for_testing ==
@@ -93,8 +95,10 @@
         cbor::Writer::Write(CreateIntegrityBlock(signature_stack));
 
     // Create the attributes map for the current signature stack entry.
-    absl::optional<std::vector<uint8_t>> attributes = cbor::Writer::Write(
-        CreateSignatureStackEntryAttributes(key_pair.public_key));
+    absl::optional<std::vector<uint8_t>> attributes =
+        cbor::Writer::Write(CreateSignatureStackEntryAttributes(
+            std::vector(key_pair.public_key.bytes().begin(),
+                        key_pair.public_key.bytes().end())));
 
     // Build the payload to sign and then sign it.
     std::vector<uint8_t> payload_to_sign = CreateSignaturePayload(
@@ -139,18 +143,23 @@
 // static
 WebBundleSigner::KeyPair WebBundleSigner::KeyPair::CreateRandom(
     bool produce_invalid_signature) {
-  std::vector<uint8_t> public_key(ED25519_PUBLIC_KEY_LEN);
-  std::vector<uint8_t> private_key(ED25519_PRIVATE_KEY_LEN);
+  std::array<uint8_t, ED25519_PUBLIC_KEY_LEN> public_key;
+  std::array<uint8_t, ED25519_PRIVATE_KEY_LEN> private_key;
   ED25519_keypair(public_key.data(), private_key.data());
-  return KeyPair(public_key, private_key, produce_invalid_signature);
+  return KeyPair(std::move(public_key), std::move(private_key),
+                 produce_invalid_signature);
 }
 
-WebBundleSigner::KeyPair::KeyPair(base::span<const uint8_t> public_key,
-                                  base::span<const uint8_t> private_key,
-                                  bool produce_invalid_signature)
-    : public_key(public_key.begin(), public_key.end()),
-      private_key(private_key.begin(), private_key.end()),
-      produce_invalid_signature(produce_invalid_signature) {}
+WebBundleSigner::KeyPair::KeyPair(
+    base::span<const uint8_t, ED25519_PUBLIC_KEY_LEN> public_key_bytes,
+    base::span<const uint8_t, ED25519_PRIVATE_KEY_LEN> private_key_bytes,
+    bool produce_invalid_signature)
+    : public_key(Ed25519PublicKey::Create(public_key_bytes)),
+      produce_invalid_signature(produce_invalid_signature) {
+  std::array<uint8_t, ED25519_PRIVATE_KEY_LEN> private_key_array;
+  base::ranges::copy(private_key_bytes, private_key_array.begin());
+  private_key = std::move(private_key_array);
+}
 
 WebBundleSigner::KeyPair::KeyPair(const WebBundleSigner::KeyPair& other) =
     default;
diff --git a/components/web_package/test_support/signed_web_bundles/web_bundle_signer.h b/components/web_package/test_support/signed_web_bundles/web_bundle_signer.h
index b7651fc..3641eda 100644
--- a/components/web_package/test_support/signed_web_bundles/web_bundle_signer.h
+++ b/components/web_package/test_support/signed_web_bundles/web_bundle_signer.h
@@ -9,6 +9,7 @@
 
 #include "base/containers/span.h"
 #include "components/cbor/values.h"
+#include "components/web_package/signed_web_bundles/ed25519_public_key.h"
 
 namespace web_package {
 
@@ -32,14 +33,17 @@
   struct KeyPair {
     static KeyPair CreateRandom(bool produce_invalid_signature = false);
 
-    KeyPair(base::span<const uint8_t> public_key,
-            base::span<const uint8_t> private_key,
-            bool produce_invalid_signature = false);
+    KeyPair(
+        base::span<const uint8_t, Ed25519PublicKey::kLength> public_key_bytes,
+        base::span<const uint8_t, 64> private_key_bytes,
+        bool produce_invalid_signature = false);
     KeyPair(const KeyPair& other);
     ~KeyPair();
 
-    std::vector<uint8_t> public_key;
-    std::vector<uint8_t> private_key;
+    Ed25519PublicKey public_key;
+    // We don't have a wrapper for private keys since they are only used in
+    // tests.
+    std::array<uint8_t, 64> private_key;
     bool produce_invalid_signature;
   };
 
@@ -63,7 +67,7 @@
  private:
   // Creates a signature stack entry for the given public key and signature.
   static cbor::Value CreateSignatureStackEntry(
-      base::span<const uint8_t> public_key,
+      const Ed25519PublicKey& public_key,
       std::vector<uint8_t> signature,
       ErrorForTesting error_for_testing = ErrorForTesting::kNoError);
 
diff --git a/components/web_package/web_bundle_parser_unittest.cc b/components/web_package/web_bundle_parser_unittest.cc
index bae87b8..99685e0 100644
--- a/components/web_package/web_bundle_parser_unittest.cc
+++ b/components/web_package/web_bundle_parser_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "components/web_package/web_bundle_parser.h"
 
+#include "base/containers/span.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
@@ -13,9 +14,11 @@
 #include "components/cbor/writer.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom-forward.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom.h"
+#include "components/web_package/signed_web_bundles/ed25519_public_key.h"
 #include "components/web_package/test_support/signed_web_bundles/web_bundle_signer.h"
 #include "components/web_package/web_bundle_builder.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -23,6 +26,8 @@
 
 namespace {
 
+using testing::ElementsAreArray;
+
 constexpr char kPrimaryUrl[] = "https://test.example.com/";
 constexpr char kValidityUrl[] =
     "https://test.example.org/resource.validity.msg";
@@ -219,8 +224,8 @@
 
 void CheckIfSignatureStackEntryIsValid(
     mojom::BundleIntegrityBlockSignatureStackEntryPtr& entry,
-    const std::vector<uint8_t>& public_key) {
-  EXPECT_EQ(entry->public_key, public_key);
+    const Ed25519PublicKey& public_key) {
+  EXPECT_THAT(entry->public_key, ElementsAreArray(public_key.bytes()));
 
   EXPECT_EQ(entry->signature.size(), 64ul);
   // The signature should also be present at the very end of
@@ -234,7 +239,7 @@
       base::ranges::search(entry->complete_entry_cbor, entry->attributes_cbor),
       entry->complete_entry_cbor.end());
   // The attributes should contain the public key.
-  EXPECT_NE(base::ranges::search(entry->attributes_cbor, public_key),
+  EXPECT_NE(base::ranges::search(entry->attributes_cbor, public_key.bytes()),
             entry->attributes_cbor.end());
 }
 
diff --git a/components/webcrypto/algorithms/ed25519.cc b/components/webcrypto/algorithms/ed25519.cc
index a7c27da..adf8808 100644
--- a/components/webcrypto/algorithms/ed25519.cc
+++ b/components/webcrypto/algorithms/ed25519.cc
@@ -2,15 +2,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <string.h>
+
 #include "components/webcrypto/algorithms/ed25519.h"
 
 #include "components/webcrypto/algorithms/asymmetric_key_util.h"
 #include "components/webcrypto/algorithms/util.h"
 #include "components/webcrypto/blink_key_handle.h"
 #include "components/webcrypto/generate_key_result.h"
+#include "components/webcrypto/jwk.h"
 #include "components/webcrypto/status.h"
 #include "crypto/openssl_util.h"
 #include "third_party/blink/public/platform/web_crypto_key_algorithm.h"
+#include "third_party/boringssl/src/include/openssl/bytestring.h"
 #include "third_party/boringssl/src/include/openssl/curve25519.h"
 #include "third_party/boringssl/src/include/openssl/evp.h"
 
@@ -24,6 +28,59 @@
   return blink::WebCryptoAlgorithm::AdoptParamsAndCreate(algorithm.Id(),
                                                          nullptr);
 }
+
+Status CreateWebCryptoEd25519PrivateKey(
+    base::span<const uint8_t> raw_key,
+    const blink::WebCryptoKeyAlgorithm& algorithm,
+    bool extractable,
+    blink::WebCryptoKeyUsageMask usages,
+    blink::WebCryptoKey* key) {
+  // This function accepts only the RFC 8032 format.
+  DCHECK_EQ(raw_key.size(), 32u);
+  bssl::UniquePtr<EVP_PKEY> pkey(EVP_PKEY_new_raw_private_key(
+      EVP_PKEY_ED25519, /*engine*/ nullptr, raw_key.data(), raw_key.size()));
+  if (!pkey)
+    return Status::OperationError();
+
+  return webcrypto::CreateWebCryptoPrivateKey(std::move(pkey), algorithm,
+                                              extractable, usages, key);
+}
+
+Status CreateWebCryptoEd25519PublicKey(
+    base::span<const uint8_t> raw_key,
+    const blink::WebCryptoKeyAlgorithm& algorithm,
+    bool extractable,
+    blink::WebCryptoKeyUsageMask usages,
+    blink::WebCryptoKey* key) {
+  DCHECK_EQ(raw_key.size(), 32u);
+  bssl::UniquePtr<EVP_PKEY> pkey(EVP_PKEY_new_raw_public_key(
+      EVP_PKEY_ED25519, /*engine*/ nullptr, raw_key.data(), raw_key.size()));
+  if (!pkey)
+    return Status::OperationError();
+
+  return webcrypto::CreateWebCryptoPublicKey(std::move(pkey), algorithm,
+                                             extractable, usages, key);
+}
+
+// Reads a fixed length base64url-decoded bytes from a JWK.
+Status ReadBytes(const JwkReader& jwk,
+                 base::StringPiece member_name,
+                 size_t expected_length,
+                 std::vector<uint8_t>* out) {
+  std::vector<uint8_t> bytes;
+  Status status = jwk.GetBytes(member_name, &bytes);
+  if (status.IsError())
+    return status;
+
+  if (bytes.size() != expected_length) {
+    return Status::JwkOctetStringWrongLength(member_name, expected_length,
+                                             bytes.size());
+  }
+
+  *out = std::move(bytes);
+  return Status::Success();
+}
+
 }  // namespace
 
 Status Ed25519Implementation::GenerateKey(
@@ -46,22 +103,6 @@
   uint8_t pubkey[32], privkey[64];
   ED25519_keypair(pubkey, privkey);
 
-  // Since the RFC 8032 private key format is the 32-byte prefix of
-  // |ED25519_sign|'s 64-byte private key, we can be sure we'll use the same
-  // seed when regenerating the public key.
-  // TODO(https://crbug.com/boringssl/521): This does a redundant base point
-  // multiplication, but there aren't EVP APIs to avoid it without a lot of
-  // boilerplate.
-  bssl::UniquePtr<EVP_PKEY> private_pkey(EVP_PKEY_new_raw_private_key(
-      EVP_PKEY_ED25519, /*engine*/ nullptr, privkey, 32));
-  if (!private_pkey)
-    return Status::OperationError();
-
-  bssl::UniquePtr<EVP_PKEY> public_pkey(EVP_PKEY_new_raw_public_key(
-      EVP_PKEY_ED25519, /*engine*/ nullptr, pubkey, 32));
-  if (!public_pkey)
-    return Status::OperationError();
-
   // Ed25519 algorithm doesn't need params.
   // https://wicg.github.io/webcrypto-secure-curves/#ed25519-registration
   blink::WebCryptoKeyAlgorithm key_algorithm =
@@ -70,15 +111,22 @@
   // Note that extractable is unconditionally set to true. This is because per
   // the WebCrypto spec generated public keys are always extractable.
   blink::WebCryptoKey public_key;
-  status = CreateWebCryptoPublicKey(std::move(public_pkey), key_algorithm,
-                                    /*extractable*/ true, public_usages,
-                                    &public_key);
+  status = CreateWebCryptoEd25519PublicKey(pubkey, key_algorithm,
+                                           /*extractable=*/true, public_usages,
+                                           &public_key);
   if (status.IsError())
     return status;
 
+  // Since the RFC 8032 private key format is the 32-byte prefix of
+  // |ED25519_sign|'s 64-byte private key, we can be sure we'll use the same
+  // seed when regenerating the public key.
+  // TODO(https://crbug.com/boringssl/521): This does a redundant base point
+  // multiplication, but there aren't EVP APIs to avoid it without a lot of
+  // boilerplate.
   blink::WebCryptoKey private_key;
-  status = CreateWebCryptoPrivateKey(std::move(private_pkey), key_algorithm,
-                                     extractable, private_usages, &private_key);
+  status = CreateWebCryptoEd25519PrivateKey(base::make_span(privkey).first(32),
+                                            key_algorithm, extractable,
+                                            private_usages, &private_key);
   if (status.IsError())
     return status;
 
@@ -94,10 +142,14 @@
     blink::WebCryptoKeyUsageMask usages,
     blink::WebCryptoKey* key) const {
   switch (format) {
+    case blink::kWebCryptoKeyFormatRaw:
+      return ImportKeyRaw(key_data, algorithm, extractable, usages, key);
     case blink::kWebCryptoKeyFormatPkcs8:
       return ImportKeyPkcs8(key_data, algorithm, extractable, usages, key);
     case blink::kWebCryptoKeyFormatSpki:
       return ImportKeySpki(key_data, algorithm, extractable, usages, key);
+    case blink::kWebCryptoKeyFormatJwk:
+      return ImportKeyJwk(key_data, algorithm, extractable, usages, key);
     default:
       return Status::ErrorUnsupportedImportKeyFormat();
   }
@@ -107,10 +159,14 @@
                                         const blink::WebCryptoKey& key,
                                         std::vector<uint8_t>* buffer) const {
   switch (format) {
+    case blink::kWebCryptoKeyFormatRaw:
+      return ExportKeyRaw(key, buffer);
     case blink::kWebCryptoKeyFormatPkcs8:
       return ExportKeyPkcs8(key, buffer);
     case blink::kWebCryptoKeyFormatSpki:
       return ExportKeySpki(key, buffer);
+    case blink::kWebCryptoKeyFormatJwk:
+      return ExportKeyJwk(key, buffer);
     default:
       return Status::ErrorUnsupportedExportKeyFormat();
   }
@@ -162,6 +218,27 @@
   return Status::Success();
 }
 
+Status Ed25519Implementation::ImportKeyRaw(
+    base::span<const uint8_t> key_data,
+    const blink::WebCryptoAlgorithm& algorithm,
+    bool extractable,
+    blink::WebCryptoKeyUsageMask usages,
+    blink::WebCryptoKey* key) const {
+  DCHECK_EQ(algorithm.Id(), blink::kWebCryptoAlgorithmIdEd25519);
+  crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
+
+  Status status = CheckKeyCreationUsages(all_public_key_usages_, usages);
+  if (status.IsError())
+    return status;
+
+  if (key_data.size() != 32)
+    return Status::ErrorImportEd25519KeyLength();
+
+  return CreateWebCryptoEd25519PublicKey(
+      key_data, blink::WebCryptoKeyAlgorithm::CreateEd25519(algorithm.Id()),
+      extractable, usages, key);
+}
+
 Status Ed25519Implementation::ImportKeyPkcs8(
     base::span<const uint8_t> key_data,
     const blink::WebCryptoAlgorithm& algorithm,
@@ -206,11 +283,114 @@
       usages, key);
 }
 
+// The format for JWK Ed25519 keys is given by:
+// https://www.rfc-editor.org/rfc/rfc8037#section-2
+Status Ed25519Implementation::ImportKeyJwk(
+    base::span<const uint8_t> key_data,
+    const blink::WebCryptoAlgorithm& algorithm,
+    bool extractable,
+    blink::WebCryptoKeyUsageMask usages,
+    blink::WebCryptoKey* key) const {
+  crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
+  JwkReader jwk;
+
+  // 3. If the kty field of jwk is not "OKP", then throw a DataError.
+  // 5. If the alg field of jwk is present and is not "EdDSA", then throw a
+  // DataError.
+  // 7. If the key_ops field of jwk is present, and is invalid according to the
+  // requirements of JSON Web Key [JWK], or it does not contain all of the
+  // specified usages values, then throw a DataError.
+  // 8. If the ext field of jwk is present and has the value false and
+  // extractable is true, then throw a DataError.
+  Status status = jwk.Init(key_data, extractable, usages, "OKP", "EdDSA");
+  if (status.IsError())
+    return status;
+
+  // 4. If the crv field of jwk is not "Ed25519", then throw a DataError.
+  std::string jwk_crv;
+  status = jwk.GetString("crv", &jwk_crv);
+  if (status.IsError())
+    return status;
+  if (jwk_crv != "Ed25519")
+    return Status::ErrorJwkIncorrectCrv();
+
+  // Only private keys have a "d" parameter. The key may still be invalid, but
+  // tentatively decide if it is a public or private key.
+  bool is_private_key = jwk.HasMember("d");
+
+  // 2. If the d field is present and usages contains a value which is not
+  // "sign", or, if the d field is not present and usages contains a value which
+  // is not "verify" then throw a SyntaxError.
+  status = is_private_key
+               ? CheckKeyCreationUsages(all_private_key_usages_, usages)
+               : CheckKeyCreationUsages(all_public_key_usages_, usages);
+  if (status.IsError())
+    return status;
+
+  // 9.1 If jwk does not meet the requirements of Section 2 of [RFC8037], then
+  // throw a DataError.
+  //  + The parameter "x" MUST be present and contain the public key.
+  //  + The parameter "d" MUST be present for private keys.
+  std::vector<uint8_t> raw_public_key;
+  status = ReadBytes(jwk, "x", 32, &raw_public_key);
+  if (status.IsError())
+    return status;
+
+  // 9.2 Let key be a new CryptoKey object that represents the Ed25519
+  // private/public key. 9.3. Set the [[type]] internal slot of Key to "private"
+  // or "public".
+  blink::WebCryptoKeyAlgorithm key_algorithm =
+      blink::WebCryptoKeyAlgorithm::CreateEd25519(algorithm.Id());
+  if (!is_private_key) {
+    return CreateWebCryptoEd25519PublicKey(raw_public_key, key_algorithm,
+                                           extractable, usages, key);
+  }
+
+  std::vector<uint8_t> raw_private_key;
+  status = ReadBytes(jwk, "d", 32, &raw_private_key);
+  if (status.IsError())
+    return status;
+  blink::WebCryptoKey private_key;
+  status = CreateWebCryptoEd25519PrivateKey(raw_private_key, key_algorithm,
+                                            extractable, usages, &private_key);
+  if (status.IsError())
+    return status;
+
+  // Check the public key matches the private key.
+  size_t len = 32;
+  uint8_t raw_key[32];
+  if (!EVP_PKEY_get_raw_public_key(GetEVP_PKEY(private_key), raw_key, &len))
+    return Status::OperationError();
+  DCHECK_EQ(len, 32u);
+  if (memcmp(raw_public_key.data(), raw_key, 32) != 0)
+    return Status::DataError();
+
+  *key = private_key;
+  return Status::Success();
+}
+
+Status Ed25519Implementation::ExportKeyRaw(const blink::WebCryptoKey& key,
+                                           std::vector<uint8_t>* buffer) const {
+  crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
+
+  if (key.GetType() != blink::kWebCryptoKeyTypePublic)
+    return Status::ErrorUnexpectedKeyType();
+
+  size_t len = 32;
+  buffer->resize(32);
+  if (!EVP_PKEY_get_raw_public_key(GetEVP_PKEY(key), buffer->data(), &len))
+    return Status::OperationError();
+  DCHECK_EQ(len, buffer->size());
+
+  return Status::Success();
+}
+
 Status Ed25519Implementation::ExportKeyPkcs8(
     const blink::WebCryptoKey& key,
     std::vector<uint8_t>* buffer) const {
   if (key.GetType() != blink::kWebCryptoKeyTypePrivate)
     return Status::ErrorUnexpectedKeyType();
+
   return ExportPKeyPkcs8(GetEVP_PKEY(key), buffer);
 }
 
@@ -219,9 +399,41 @@
     std::vector<uint8_t>* buffer) const {
   if (key.GetType() != blink::kWebCryptoKeyTypePublic)
     return Status::ErrorUnexpectedKeyType();
+
   return ExportPKeySpki(GetEVP_PKEY(key), buffer);
 }
 
+Status Ed25519Implementation::ExportKeyJwk(const blink::WebCryptoKey& key,
+                                           std::vector<uint8_t>* buffer) const {
+  crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE);
+
+  EVP_PKEY* pkey = GetEVP_PKEY(key);
+
+  size_t keylen = 32;
+  uint8_t raw_public_key[32];
+  if (!EVP_PKEY_get_raw_public_key(pkey, raw_public_key, &keylen))
+    return Status::OperationError();
+  DCHECK_EQ(keylen, sizeof(raw_public_key));
+
+  // No "alg" is set for OKP keys.
+  JwkWriter jwk(std::string(), key.Extractable(), key.Usages(), "OKP");
+  jwk.SetString("crv", "Ed25519");
+
+  // Set "x", and "d" if it is a private key.
+  jwk.SetBytes("x", raw_public_key);
+  if (key.GetType() == blink::kWebCryptoKeyTypePrivate) {
+    uint8_t raw_private_key[32];
+    if (!EVP_PKEY_get_raw_private_key(pkey, raw_private_key, &keylen))
+      return Status::OperationError();
+    DCHECK_EQ(keylen, sizeof(raw_private_key));
+
+    jwk.SetBytes("d", raw_private_key);
+  }
+
+  jwk.ToJson(buffer);
+  return Status::Success();
+}
+
 Status Ed25519Implementation::DeserializeKeyForClone(
     const blink::WebCryptoKeyAlgorithm& algorithm,
     blink::WebCryptoKeyType type,
diff --git a/components/webcrypto/algorithms/ed25519.h b/components/webcrypto/algorithms/ed25519.h
index 4da21f3..3786cb1 100644
--- a/components/webcrypto/algorithms/ed25519.h
+++ b/components/webcrypto/algorithms/ed25519.h
@@ -48,6 +48,12 @@
                                 blink::WebCryptoKey* key) const override;
 
  private:
+  Status ImportKeyRaw(base::span<const uint8_t> key_data,
+                      const blink::WebCryptoAlgorithm& algorithm,
+                      bool extractable,
+                      blink::WebCryptoKeyUsageMask usages,
+                      blink::WebCryptoKey* key) const;
+
   Status ImportKeyPkcs8(base::span<const uint8_t> key_data,
                         const blink::WebCryptoAlgorithm& algorithm,
                         bool extractable,
@@ -60,12 +66,24 @@
                        blink::WebCryptoKeyUsageMask usages,
                        blink::WebCryptoKey* key) const;
 
+  Status ImportKeyJwk(base::span<const uint8_t> key_data,
+                      const blink::WebCryptoAlgorithm& algorithm,
+                      bool extractable,
+                      blink::WebCryptoKeyUsageMask usages,
+                      blink::WebCryptoKey* key) const;
+
+  Status ExportKeyRaw(const blink::WebCryptoKey& key,
+                      std::vector<uint8_t>* buffer) const;
+
   Status ExportKeyPkcs8(const blink::WebCryptoKey& key,
                         std::vector<uint8_t>* buffer) const;
 
   Status ExportKeySpki(const blink::WebCryptoKey& key,
                        std::vector<uint8_t>* buffer) const;
 
+  Status ExportKeyJwk(const blink::WebCryptoKey& key,
+                      std::vector<uint8_t>* buffer) const;
+
   const blink::WebCryptoKeyUsageMask all_public_key_usages_{
       blink::kWebCryptoKeyUsageVerify};
   const blink::WebCryptoKeyUsageMask all_private_key_usages_{
diff --git a/components/webcrypto/status.cc b/components/webcrypto/status.cc
index 17483548..a84d1d5 100644
--- a/components/webcrypto/status.cc
+++ b/components/webcrypto/status.cc
@@ -184,6 +184,11 @@
                 "The input is too large for the counter length.");
 }
 
+Status Status::ErrorImportEd25519KeyLength() {
+  return Status(blink::kWebCryptoErrorTypeData,
+                "Ed25519 key data must be 256 bits");
+}
+
 Status Status::ErrorDataTooLarge() {
   return Status(blink::kWebCryptoErrorTypeOperation,
                 "The provided data is too large");
diff --git a/components/webcrypto/status.h b/components/webcrypto/status.h
index 4966451..10085020 100644
--- a/components/webcrypto/status.h
+++ b/components/webcrypto/status.h
@@ -281,6 +281,10 @@
   // algorithms.
   static Status ErrorImportExtractableKdfKey();
 
+  // The key data buffer provided for importKey() is an incorrect length for
+  // Ed25519.
+  static Status ErrorImportEd25519KeyLength();
+
  private:
   enum Type { TYPE_ERROR, TYPE_SUCCESS };
 
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager.h b/content/browser/attribution_reporting/attribution_data_host_manager.h
index ac84c92..5440c33 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager.h
+++ b/content/browser/attribution_reporting/attribution_data_host_manager.h
@@ -10,23 +10,20 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 
+namespace attribution_reporting {
+class SuitableOrigin;
+}  // namespace attribution_reporting
+
 namespace blink::mojom {
 class AttributionDataHost;
 }  // namespace blink::mojom
 
-namespace url {
-class Origin;
-}  // namespace url
-
 namespace content {
 
 struct AttributionInputEvent;
 
 // Interface responsible for coordinating `AttributionDataHost`s received from
 // the renderer.
-//
-// TODO(crbug.com/1383580): Replace `url::Origin` with
-// `attribution_reporting::SuitableOrigin`.
 class AttributionDataHostManager {
  public:
   virtual ~AttributionDataHostManager() = default;
@@ -36,7 +33,7 @@
   // navigation.
   virtual void RegisterDataHost(
       mojo::PendingReceiver<blink::mojom::AttributionDataHost> data_host,
-      url::Origin context_origin,
+      attribution_reporting::SuitableOrigin context_origin,
       bool is_within_fenced_frame) = 0;
 
   // Registers a new data host which is associated with a navigation. The
@@ -55,8 +52,8 @@
   virtual void NotifyNavigationRedirectRegistration(
       const blink::AttributionSrcToken& attribution_src_token,
       std::string header_value,
-      url::Origin reporting_origin,
-      const url::Origin& source_origin,
+      attribution_reporting::SuitableOrigin reporting_origin,
+      const attribution_reporting::SuitableOrigin& source_origin,
       AttributionInputEvent input_event) = 0;
 
   // Notifies the manager that we have received a navigation for a given data
@@ -64,8 +61,7 @@
   // available for a given data host.
   virtual void NotifyNavigationForDataHost(
       const blink::AttributionSrcToken& attribution_src_token,
-      const url::Origin& source_origin,
-      const url::Origin& destination_origin) = 0;
+      const attribution_reporting::SuitableOrigin& source_origin) = 0;
 
   // Notifies the manager that a navigation associated with a data host failed
   // and should no longer be tracked.
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
index 76de22f..a8d52c4 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
@@ -235,15 +235,11 @@
 
 void AttributionDataHostManagerImpl::RegisterDataHost(
     mojo::PendingReceiver<blink::mojom::AttributionDataHost> data_host,
-    url::Origin context_origin,
+    SuitableOrigin context_origin,
     bool is_within_fenced_frame) {
-  auto suitable_context_origin =
-      SuitableOrigin::Create(std::move(context_origin));
-  DCHECK(suitable_context_origin);
-
   receivers_.Add(
       this, std::move(data_host),
-      FrozenContext{.context_origin = std::move(*suitable_context_origin),
+      FrozenContext{.context_origin = std::move(context_origin),
                     .source_type = AttributionSourceType::kEvent,
                     .register_time = base::TimeTicks::Now(),
                     .is_within_fenced_frame = is_within_fenced_frame});
@@ -272,31 +268,22 @@
 void AttributionDataHostManagerImpl::NotifyNavigationRedirectRegistration(
     const blink::AttributionSrcToken& attribution_src_token,
     std::string header_value,
-    url::Origin reporting_origin,
-    const url::Origin& source_origin,
+    SuitableOrigin reporting_origin,
+    const SuitableOrigin& source_origin,
     AttributionInputEvent input_event) {
-  auto suitable_source_origin = SuitableOrigin::Create(source_origin);
-  auto suitable_reporting_origin =
-      SuitableOrigin::Create(std::move(reporting_origin));
-
-  if (!suitable_source_origin || !suitable_reporting_origin)
-    return;
-
   // Avoid costly isolated JSON parsing below if the header is obviously
   // invalid.
   if (header_value.empty()) {
     attribution_manager_->NotifyFailedSourceRegistration(
-        header_value, *suitable_reporting_origin,
-        SourceRegistrationError::kInvalidJson);
+        header_value, reporting_origin, SourceRegistrationError::kInvalidJson);
     return;
   }
 
   auto [it, inserted] = redirect_registrations_.try_emplace(
-      attribution_src_token,
-      NavigationRedirectSourceRegistrations{
-          .source_origin = std::move(*suitable_source_origin),
-          .register_time = base::TimeTicks::Now(),
-          .input_event = input_event});
+      attribution_src_token, NavigationRedirectSourceRegistrations{
+                                 .source_origin = source_origin,
+                                 .register_time = base::TimeTicks::Now(),
+                                 .input_event = input_event});
   DCHECK(!it->second.navigation_complete);
 
   // Treat ongoing redirect registrations within a chain as a data host for the
@@ -312,28 +299,19 @@
       header_value,
       base::BindOnce(&AttributionDataHostManagerImpl::OnRedirectSourceParsed,
                      weak_factory_.GetWeakPtr(), attribution_src_token,
-                     std::move(*suitable_reporting_origin), header_value));
+                     std::move(reporting_origin), header_value));
 }
 
 void AttributionDataHostManagerImpl::NotifyNavigationForDataHost(
     const blink::AttributionSrcToken& attribution_src_token,
-    const url::Origin& source_origin,
-    const url::Origin& destination_origin) {
-  auto suitable_source_origin = SuitableOrigin::Create(source_origin);
-
-  if (!suitable_source_origin ||
-      !SuitableOrigin::IsSuitable(destination_origin)) {
-    NotifyNavigationFailure(attribution_src_token);
-    return;
-  }
-
+    const SuitableOrigin& source_origin) {
   auto it = navigation_data_host_map_.find(attribution_src_token);
 
   if (it != navigation_data_host_map_.end()) {
     // Source navigations need to navigate the primary main frame to be valid.
     receivers_.Add(
         this, std::move(it->second.data_host),
-        FrozenContext{.context_origin = std::move(*suitable_source_origin),
+        FrozenContext{.context_origin = source_origin,
                       .source_type = AttributionSourceType::kNavigation,
                       .register_time = it->second.register_time,
                       .is_within_fenced_frame = false,
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl.h b/content/browser/attribution_reporting/attribution_data_host_manager_impl.h
index cc261d9..2ec7af2b 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl.h
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl.h
@@ -54,7 +54,7 @@
   // AttributionDataHostManager:
   void RegisterDataHost(
       mojo::PendingReceiver<blink::mojom::AttributionDataHost> data_host,
-      url::Origin context_origin,
+      attribution_reporting::SuitableOrigin context_origin,
       bool is_within_fenced_frame) override;
   bool RegisterNavigationDataHost(
       mojo::PendingReceiver<blink::mojom::AttributionDataHost> data_host,
@@ -63,13 +63,12 @@
   void NotifyNavigationRedirectRegistration(
       const blink::AttributionSrcToken& attribution_src_token,
       std::string header_value,
-      url::Origin reporting_origin,
-      const url::Origin& source_origin,
+      attribution_reporting::SuitableOrigin reporting_origin,
+      const attribution_reporting::SuitableOrigin& source_origin,
       AttributionInputEvent input_event) override;
   void NotifyNavigationForDataHost(
       const blink::AttributionSrcToken& attribution_src_token,
-      const url::Origin& source_origin,
-      const url::Origin& destination_origin) override;
+      const attribution_reporting::SuitableOrigin& source_origin) override;
   void NotifyNavigationFailure(
       const blink::AttributionSrcToken& attribution_src_token) override;
 
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
index 3d46f13..ad60019 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
@@ -238,33 +238,27 @@
   const char kLocalHost[] = "http://localhost";
 
   struct {
-    const char* source_origin;
     const char* destination_origin;
     const char* reporting_origin;
     bool source_expected;
     const char* bad_message = nullptr;
   } kTestCases[] = {
-      {.source_origin = kLocalHost,
-       .destination_origin = kLocalHost,
+      {.destination_origin = kLocalHost,
        .reporting_origin = kLocalHost,
        .source_expected = true},
-      {.source_origin = "http://127.0.0.1",
-       .destination_origin = "http://127.0.0.1",
+      {.destination_origin = "http://127.0.0.1",
        .reporting_origin = "http://127.0.0.1",
        .source_expected = true},
-      {.source_origin = kLocalHost,
-       .destination_origin = kLocalHost,
+      {.destination_origin = kLocalHost,
        .reporting_origin = "http://insecure.com",
        .source_expected = false,
        .bad_message = "AttributionDataHost: Reporting origin must be secure."},
-      {.source_origin = kLocalHost,
-       .destination_origin = "http://insecure.com",
+      {.destination_origin = "http://insecure.com",
        .reporting_origin = kLocalHost,
        .source_expected = false,
        .bad_message =
            "AttributionDataHost: Destination origin must be secure."},
-      {.source_origin = "https://secure.com",
-       .destination_origin = "https://secure.com",
+      {.destination_origin = "https://secure.com",
        .reporting_origin = "https://secure.com",
        .source_expected = true},
   };
@@ -278,7 +272,7 @@
                                         raw_ref(task_environment_)};
     data_host_manager_.RegisterDataHost(
         data_host_remote.data_host.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL(test_case.source_origin)),
+        *SuitableOrigin::Deserialize("https://secure.com"),
         /*is_within_fenced_frame=*/false);
 
     auto source_data = blink::mojom::AttributionSourceData::New();
@@ -321,7 +315,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://page.example")),
+        *SuitableOrigin::Deserialize("https://page.example"),
         /*is_within_fenced_frame=*/false);
 
     mojo::test::BadMessageObserver bad_message_observer;
@@ -381,7 +375,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://page.example")),
+        *SuitableOrigin::Deserialize("https://page.example"),
         /*is_within_fenced_frame=*/false);
 
     mojo::test::BadMessageObserver bad_message_observer;
@@ -430,7 +424,7 @@
     EXPECT_CALL(mock_manager_, HandleSource);
   }
 
-  auto page_origin = url::Origin::Create(GURL("https://page.example"));
+  auto page_origin = *SuitableOrigin::Deserialize("https://page.example");
   auto destination_origin =
       url::Origin::Create(GURL("https://trigger.example"));
   auto reporting_origin = url::Origin::Create(GURL("https://reporter.example"));
@@ -516,7 +510,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://page.example")),
+        *SuitableOrigin::Deserialize("https://page.example"),
         /*is_within_fenced_frame=*/false);
 
     auto source_data = blink::mojom::AttributionSourceData::New();
@@ -631,24 +625,16 @@
   const char kLocalHost[] = "http://localhost";
 
   struct {
-    const char* destination_origin;
     const char* reporting_origin;
     bool trigger_expected;
     const char* bad_message = nullptr;
   } kTestCases[] = {
-      {.destination_origin = kLocalHost,
-       .reporting_origin = kLocalHost,
-       .trigger_expected = true},
-      {.destination_origin = "http://127.0.0.1",
-       .reporting_origin = "http://127.0.0.1",
-       .trigger_expected = true},
-      {.destination_origin = kLocalHost,
-       .reporting_origin = "http://insecure.com",
+      {.reporting_origin = kLocalHost, .trigger_expected = true},
+      {.reporting_origin = "http://127.0.0.1", .trigger_expected = true},
+      {.reporting_origin = "http://insecure.com",
        .trigger_expected = false,
        .bad_message = "AttributionDataHost: Reporting origin must be secure."},
-      {.destination_origin = "https://secure.com",
-       .reporting_origin = "https://secure.com",
-       .trigger_expected = true},
+      {.reporting_origin = "https://secure.com", .trigger_expected = true},
   };
 
   for (const auto& test_case : kTestCases) {
@@ -660,7 +646,7 @@
                                         raw_ref(task_environment_)};
     data_host_manager_.RegisterDataHost(
         data_host_remote.data_host.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL(test_case.destination_origin)),
+        *SuitableOrigin::Deserialize("https://secure.com"),
         /*is_within_fenced_frame=*/false);
 
     auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -704,7 +690,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://trigger.example")),
+        *SuitableOrigin::Deserialize("https://trigger.example"),
         /*is_within_fenced_frame=*/false);
 
     auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -746,7 +732,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://trigger.example")),
+        *SuitableOrigin::Deserialize("https://trigger.example"),
         /*is_within_fenced_frame=*/false);
 
     auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -794,7 +780,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://trigger.example")),
+        *SuitableOrigin::Deserialize("https://trigger.example"),
         /*is_within_fenced_frame=*/false);
 
     auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -850,7 +836,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://trigger.example")),
+        *SuitableOrigin::Deserialize("https://trigger.example"),
         /*is_within_fenced_frame=*/false);
 
     auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -906,7 +892,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://trigger.example")),
+        *SuitableOrigin::Deserialize("https://trigger.example"),
         /*is_within_fenced_frame=*/false);
 
     mojo::test::BadMessageObserver bad_message_observer;
@@ -962,7 +948,7 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://trigger.example")),
+        *SuitableOrigin::Deserialize("https://trigger.example"),
         /*is_within_fenced_frame=*/false);
 
     mojo::test::BadMessageObserver bad_message_observer;
@@ -1014,8 +1000,9 @@
   }
 
   auto destination_origin =
-      url::Origin::Create(GURL("https://trigger.example"));
-  auto reporting_origin = url::Origin::Create(GURL("https://reporter.example"));
+      *SuitableOrigin::Deserialize("https://trigger.example");
+  auto reporting_origin =
+      *SuitableOrigin::Deserialize("https://reporter.example");
 
   {
     RemoteDataHost data_host_remote{.task_environment =
@@ -1089,10 +1076,11 @@
     EXPECT_CALL(mock_manager_, HandleSource);
   }
 
-  auto page_origin = url::Origin::Create(GURL("https://page.example"));
+  auto page_origin = *SuitableOrigin::Deserialize("https://page.example");
   auto destination_origin =
-      url::Origin::Create(GURL("https://trigger.example"));
-  auto reporting_origin = url::Origin::Create(GURL("https://reporter.example"));
+      *SuitableOrigin::Deserialize("https://trigger.example");
+  auto reporting_origin =
+      *SuitableOrigin::Deserialize("https://reporter.example");
 
   {
     RemoteDataHost data_host_remote{.task_environment =
@@ -1189,8 +1177,8 @@
 
     task_environment_.FastForwardBy(base::Milliseconds(1));
 
-    data_host_manager_.NotifyNavigationForDataHost(
-        attribution_src_token, page_origin, destination_origin);
+    data_host_manager_.NotifyNavigationForDataHost(attribution_src_token,
+                                                   page_origin);
 
     auto source_data = blink::mojom::AttributionSourceData::New();
     source_data->source_event_id = 10;
@@ -1236,7 +1224,7 @@
 TEST_F(AttributionDataHostManagerImplTest, NoSourceOrTrigger) {
   base::HistogramTester histograms;
 
-  auto page_origin = url::Origin::Create(GURL("https://page.example"));
+  auto page_origin = *SuitableOrigin::Deserialize("https://page.example");
 
   {
     RemoteDataHost data_host_remote{.task_environment =
@@ -1268,13 +1256,13 @@
                                                raw_ref(task_environment_)};
     data_host_manager_.RegisterDataHost(
         source_data_host_remote.data_host.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://page1.example")),
+        *SuitableOrigin::Deserialize("https://page1.example"),
         /*is_within_fenced_frame=*/false);
 
     mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
     data_host_manager_.RegisterDataHost(
         trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://page2.example")),
+        *SuitableOrigin::Deserialize("https://page2.example"),
         /*is_within_fenced_frame=*/false);
 
     task_environment_.FastForwardBy(base::Milliseconds(1));
@@ -1333,7 +1321,7 @@
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   // Because there is a connected data host in source mode, this trigger should
@@ -1361,49 +1349,11 @@
 }
 
 TEST_F(AttributionDataHostManagerImplTest,
-       NavigationRedirectSource_SourceSiteTrustworthyChecksPerformed) {
-  EXPECT_CALL(mock_manager_, HandleSource).Times(0);
-
-  auto reporter = url::Origin::Create(GURL("https://report.test"));
-  auto source_site = url::Origin::Create(GURL("http://source.test"));
-
-  const blink::AttributionSrcToken attribution_src_token;
-  data_host_manager_.NotifyNavigationRedirectRegistration(
-      attribution_src_token, kRegisterSourceJson, reporter, source_site,
-      AttributionInputEvent());
-  // Wait for parsing to finish.
-  task_environment_.FastForwardBy(base::TimeDelta());
-
-  data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, source_site,
-      url::Origin::Create(GURL("https://destination.example")));
-}
-
-TEST_F(AttributionDataHostManagerImplTest,
-       NavigationRedirectSource_ReportingTrustworthyChecksPerformed) {
-  EXPECT_CALL(mock_manager_, HandleSource).Times(0);
-
-  auto reporter = url::Origin::Create(GURL("http://report.test"));
-  auto source_site = url::Origin::Create(GURL("https://source.test"));
-
-  const blink::AttributionSrcToken attribution_src_token;
-  data_host_manager_.NotifyNavigationRedirectRegistration(
-      attribution_src_token, kRegisterSourceJson, reporter, source_site,
-      AttributionInputEvent());
-  // Wait for parsing to finish.
-  task_environment_.FastForwardBy(base::TimeDelta());
-
-  data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, source_site,
-      url::Origin::Create(GURL("https://destination.example")));
-}
-
-TEST_F(AttributionDataHostManagerImplTest,
        NavigationRedirectSource_NavigationFailed) {
   EXPECT_CALL(mock_manager_, HandleSource);
 
-  auto reporter = url::Origin::Create(GURL("https://report.test"));
-  auto source_site = url::Origin::Create(GURL("https://source.test"));
+  auto reporter = *SuitableOrigin::Deserialize("https://report.test");
+  auto source_site = *SuitableOrigin::Deserialize("https://source.test");
 
   const blink::AttributionSrcToken attribution_src_token;
   data_host_manager_.NotifyNavigationRedirectRegistration(
@@ -1414,17 +1364,16 @@
 
   data_host_manager_.NotifyNavigationFailure(attribution_src_token);
 
-  data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, source_site,
-      url::Origin::Create(GURL("https://destination.example")));
+  data_host_manager_.NotifyNavigationForDataHost(attribution_src_token,
+                                                 source_site);
 }
 
 TEST_F(AttributionDataHostManagerImplTest,
        NavigationRedirectSource_NavigationFailedBeforeParsing) {
   EXPECT_CALL(mock_manager_, HandleSource);
 
-  auto reporter = url::Origin::Create(GURL("https://report.test"));
-  auto source_site = url::Origin::Create(GURL("https://source.test"));
+  auto reporter = *SuitableOrigin::Deserialize("https://report.test");
+  auto source_site = *SuitableOrigin::Deserialize("https://source.test");
 
   const blink::AttributionSrcToken attribution_src_token;
   data_host_manager_.NotifyNavigationRedirectRegistration(
@@ -1441,8 +1390,8 @@
   EXPECT_CALL(mock_manager_, HandleSource(SourceIsWithinFencedFrameIs(false)))
       .Times(2);
 
-  auto reporter = url::Origin::Create(GURL("https://report.test"));
-  auto source_site = url::Origin::Create(GURL("https://source.test"));
+  auto reporter = *SuitableOrigin::Deserialize("https://report.test");
+  auto source_site = *SuitableOrigin::Deserialize("https://source.test");
 
   const blink::AttributionSrcToken attribution_src_token;
   data_host_manager_.NotifyNavigationRedirectRegistration(
@@ -1455,9 +1404,9 @@
       attribution_src_token, kRegisterSourceJson, reporter, source_site,
       AttributionInputEvent());
 
-  data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, source_site,
-      url::Origin::Create(GURL("https://destination.example")));
+  data_host_manager_.NotifyNavigationForDataHost(attribution_src_token,
+                                                 source_site);
+
   // Wait for parsing to finish.
   task_environment_.FastForwardBy(base::TimeDelta());
 }
@@ -1467,7 +1416,7 @@
   EXPECT_CALL(mock_manager_, HandleSource).Times(1);
 
   auto reporter = *SuitableOrigin::Deserialize("https://report.test");
-  auto source_site = url::Origin::Create(GURL("https://source.test"));
+  auto source_site = *SuitableOrigin::Deserialize("https://source.test");
 
   EXPECT_CALL(mock_manager_, NotifyFailedSourceRegistration(
                                  "!!!invalid json", reporter,
@@ -1484,9 +1433,9 @@
       attribution_src_token, kRegisterSourceJson, reporter, source_site,
       AttributionInputEvent());
 
-  data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, source_site,
-      url::Origin::Create(GURL("https://destination.example")));
+  data_host_manager_.NotifyNavigationForDataHost(attribution_src_token,
+                                                 source_site);
+
   // Wait for parsing to finish.
   task_environment_.FastForwardBy(base::TimeDelta());
 }
@@ -1504,8 +1453,8 @@
     EXPECT_CALL(mock_manager_, HandleTrigger);
   }
 
-  auto reporter = url::Origin::Create(GURL("https://report.test"));
-  auto source_site = url::Origin::Create(GURL("https://source.test"));
+  auto reporter = *SuitableOrigin::Deserialize("https://report.test");
+  auto source_site = *SuitableOrigin::Deserialize("https://source.test");
 
   const blink::AttributionSrcToken attribution_src_token;
   data_host_manager_.NotifyNavigationRedirectRegistration(
@@ -1515,7 +1464,7 @@
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   // Because there is a connected data host in source mode, this trigger should
@@ -1555,8 +1504,8 @@
     EXPECT_CALL(mock_manager_, HandleTrigger);
   }
 
-  auto reporter = url::Origin::Create(GURL("https://report.test"));
-  auto source_site = url::Origin::Create(GURL("https://source.test"));
+  auto reporter = *SuitableOrigin::Deserialize("https://report.test");
+  auto source_site = *SuitableOrigin::Deserialize("https://source.test");
 
   const blink::AttributionSrcToken attribution_src_token;
   data_host_manager_.NotifyNavigationRedirectRegistration(
@@ -1568,16 +1517,15 @@
 
   // Wait for parsing.
   task_environment_.FastForwardBy(base::TimeDelta());
-  data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, source_site,
-      url::Origin::Create(GURL("https://destination.example")));
+  data_host_manager_.NotifyNavigationForDataHost(attribution_src_token,
+                                                 source_site);
 
   checkpoint.Call(1);
 
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -1605,8 +1553,8 @@
     EXPECT_CALL(mock_manager_, HandleTrigger);
   }
 
-  auto reporter = url::Origin::Create(GURL("https://report.test"));
-  auto source_site = url::Origin::Create(GURL("https://source.test"));
+  auto reporter = *SuitableOrigin::Deserialize("https://report.test");
+  auto source_site = *SuitableOrigin::Deserialize("https://source.test");
 
   const blink::AttributionSrcToken attribution_src_token;
   data_host_manager_.NotifyNavigationRedirectRegistration(
@@ -1617,16 +1565,16 @@
       AttributionInputEvent());
 
   // Wait for parsing.
-  data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, source_site,
-      url::Origin::Create(GURL("https://destination.example")));
+  data_host_manager_.NotifyNavigationForDataHost(attribution_src_token,
+                                                 source_site);
+
   task_environment_.FastForwardBy(base::TimeDelta());
   checkpoint.Call(1);
 
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -1649,13 +1597,13 @@
   mojo::Remote<blink::mojom::AttributionDataHost> source_data_host_remote;
   data_host_manager_.RegisterDataHost(
       source_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page1.example")),
+      *SuitableOrigin::Deserialize("https://page1.example"),
       /*is_within_fenced_frame=*/false);
 
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   source_data_host_remote.reset();
@@ -1679,13 +1627,13 @@
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote1;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote1.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page1.example")),
+      *SuitableOrigin::Deserialize("https://page1.example"),
       /*is_within_fenced_frame=*/false);
 
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote2;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote2.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -1731,7 +1679,7 @@
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   task_environment_.FastForwardBy(base::Milliseconds(1));
@@ -1788,13 +1736,13 @@
   mojo::Remote<blink::mojom::AttributionDataHost> source_data_host_remote;
   data_host_manager_.RegisterDataHost(
       source_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page1.example")),
+      *SuitableOrigin::Deserialize("https://page1.example"),
       /*is_within_fenced_frame=*/false);
 
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   auto send_trigger = [&](const SuitableOrigin& reporting_origin) {
@@ -1836,13 +1784,13 @@
   mojo::Remote<blink::mojom::AttributionDataHost> source_data_host_remote;
   data_host_manager_.RegisterDataHost(
       source_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page1.example")),
+      *SuitableOrigin::Deserialize("https://page1.example"),
       /*is_within_fenced_frame=*/false);
 
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   auto trigger_data = blink::mojom::AttributionTriggerData::New();
@@ -1879,13 +1827,13 @@
   mojo::Remote<blink::mojom::AttributionDataHost> source_data_host_remote;
   data_host_manager_.RegisterDataHost(
       source_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page1.example")),
+      *SuitableOrigin::Deserialize("https://page1.example"),
       /*is_within_fenced_frame=*/false);
 
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   auto send_trigger = [&](const SuitableOrigin& reporting_origin) {
@@ -1944,13 +1892,13 @@
   mojo::Remote<blink::mojom::AttributionDataHost> source_data_host_remote;
   data_host_manager_.RegisterDataHost(
       source_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page1.example")),
+      *SuitableOrigin::Deserialize("https://page1.example"),
       /*is_within_fenced_frame=*/false);
 
   mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
   data_host_manager_.RegisterDataHost(
       trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-      url::Origin::Create(GURL("https://page2.example")),
+      *SuitableOrigin::Deserialize("https://page2.example"),
       /*is_within_fenced_frame=*/false);
 
   auto source_data = blink::mojom::AttributionSourceData::New();
@@ -1987,90 +1935,13 @@
                                           });
 }
 
-// Tests that an insecure context origin or destination origin in
-// `AttributionDataHostManagerImpl::NotifyNavigationForDataHost()` disconnects
-// the data host and flushes triggers.
-TEST_F(AttributionDataHostManagerImplTest, InsecureNavigationOrigin_Dropped) {
-  const struct {
-    url::Origin page_origin;
-    url::Origin destination_origin;
-  } kTestCases[] = {
-      {
-          url::Origin::Create(GURL("http://page.example")),
-          url::Origin::Create(GURL("https://trigger.example")),
-      },
-      {
-          url::Origin::Create(GURL("https://page.example")),
-          url::Origin::Create(GURL("http://trigger.example")),
-      },
-      {
-          url::Origin::Create(GURL("http://page.example")),
-          url::Origin::Create(GURL("http://trigger.example")),
-      },
-  };
-
-  for (const auto& test_case : kTestCases) {
-    base::HistogramTester histograms;
-
-    EXPECT_CALL(mock_manager_, HandleSource).Times(0);
-    EXPECT_CALL(mock_manager_, HandleTrigger);
-
-    const blink::AttributionSrcToken attribution_src_token;
-
-    mojo::Remote<blink::mojom::AttributionDataHost> source_data_host_remote;
-    data_host_manager_.RegisterNavigationDataHost(
-        source_data_host_remote.BindNewPipeAndPassReceiver(),
-        attribution_src_token, AttributionInputEvent());
-
-    mojo::Remote<blink::mojom::AttributionDataHost> trigger_data_host_remote;
-    data_host_manager_.RegisterDataHost(
-        trigger_data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://page2.example")),
-        /*is_within_fenced_frame=*/false);
-
-    auto trigger_data = blink::mojom::AttributionTriggerData::New();
-    trigger_data->reporting_origin =
-        url::Origin::Create(GURL("https://report2.test"));
-    trigger_data->filters = blink::mojom::AttributionFilters::New();
-    trigger_data->not_filters = blink::mojom::AttributionFilters::New();
-    trigger_data_host_remote->TriggerDataAvailable(std::move(trigger_data));
-    trigger_data_host_remote.FlushForTesting();
-
-    data_host_manager_.NotifyNavigationForDataHost(
-        attribution_src_token, test_case.page_origin,
-        test_case.destination_origin);
-
-    auto source_data = blink::mojom::AttributionSourceData::New();
-    source_data->source_event_id = 10;
-    source_data->destination = test_case.destination_origin;
-    source_data->reporting_origin =
-        url::Origin::Create(GURL("https://reporter.example"));
-    source_data->filter_data = blink::mojom::AttributionFilterData::New();
-    source_data->aggregation_keys =
-        blink::mojom::AttributionAggregationKeys::New();
-    source_data_host_remote->SourceDataAvailable(std::move(source_data));
-    source_data_host_remote.FlushForTesting();
-
-    Mock::VerifyAndClear(&mock_manager_);
-
-    CheckTriggerQueueHistograms(histograms, {
-                                                .enqueued = 1,
-                                                .flushed = 1,
-                                                .delays =
-                                                    {
-                                                        {base::Seconds(0), 1},
-                                                    },
-                                            });
-  }
-}
-
 TEST_F(AttributionDataHostManagerImplTest, NavigationDataHostNotRegistered) {
   base::HistogramTester histograms;
 
   const blink::AttributionSrcToken attribution_src_token;
   data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, url::Origin::Create(GURL("https://page.example")),
-      url::Origin::Create(GURL("https://trigger.example")));
+      attribution_src_token,
+      *SuitableOrigin::Deserialize("https://page.example"));
 
   // kNotFound = 1.
   histograms.ExpectUniqueSample("Conversions.NavigationDataHostStatus", 1, 1);
@@ -2096,12 +1967,12 @@
     mojo::Remote<blink::mojom::AttributionDataHost> data_host_remote;
     data_host_manager_.RegisterDataHost(
         data_host_remote.BindNewPipeAndPassReceiver(),
-        url::Origin::Create(GURL("https://trigger.example")),
+        *SuitableOrigin::Deserialize("https://trigger.example"),
         /*is_within_fenced_frame=*/false);
 
     auto trigger_data = blink::mojom::AttributionTriggerData::New();
     trigger_data->reporting_origin =
-        url::Origin::Create(GURL("https://reporter.example"));
+        *SuitableOrigin::Deserialize("https://reporter.example");
 
     trigger_data->filters = blink::mojom::AttributionFilters::New();
     trigger_data->not_filters = blink::mojom::AttributionFilters::New();
@@ -2128,8 +1999,7 @@
       AttributionInputEvent());
 
   data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, url::Origin::Create(GURL("https://s.test")),
-      url::Origin::Create(GURL("https://d.test")));
+      attribution_src_token, *SuitableOrigin::Deserialize("https://s.test"));
 
   mojo::test::BadMessageObserver bad_message_observer;
 
@@ -2179,8 +2049,8 @@
       url::Origin::Create(GURL("https://trigger.example"));
 
   data_host_manager_.NotifyNavigationForDataHost(
-      attribution_src_token, url::Origin::Create(GURL("https://page.example")),
-      destination_origin);
+      attribution_src_token,
+      *SuitableOrigin::Deserialize("https://page.example"));
 
   auto source_data = blink::mojom::AttributionSourceData::New();
   source_data->source_event_id = 1;
diff --git a/content/browser/attribution_reporting/attribution_host.cc b/content/browser/attribution_reporting/attribution_host.cc
index c0dbc75..aaac71a7 100644
--- a/content/browser/attribution_reporting/attribution_host.cc
+++ b/content/browser/attribution_reporting/attribution_host.cc
@@ -43,6 +43,8 @@
 
 namespace {
 
+using ::attribution_reporting::SuitableOrigin;
+
 // Abstraction that wraps an iterator to a map. When this goes out of the scope,
 // the underlying iterator is erased from the map. This is useful for control
 // flows where map cleanup needs to occur regardless of additional early exit
@@ -69,7 +71,7 @@
 }  // namespace
 
 struct AttributionHost::NavigationInfo {
-  url::Origin source_origin;
+  SuitableOrigin source_origin;
   AttributionInputEvent input_event;
 };
 
@@ -134,14 +136,18 @@
   // implicit ordering: a navigation with an impression attached won't be
   // processed after a navigation commit in the initiator RFH, so reading the
   // origin off is safe at the start of the navigation.
-  const url::Origin& initiator_root_frame_origin =
-      initiator_frame_host->frame_tree_node()
-          ->frame_tree()
-          ->root()
-          ->current_origin();
+  absl::optional<SuitableOrigin> initiator_root_frame_origin =
+      SuitableOrigin::Create(initiator_frame_host->frame_tree_node()
+                                 ->frame_tree()
+                                 ->root()
+                                 ->current_origin());
+
+  if (!initiator_root_frame_origin)
+    return;
+
   navigation_info_map_.emplace(
       navigation_handle->GetNavigationId(),
-      NavigationInfo{.source_origin = initiator_root_frame_origin,
+      NavigationInfo{.source_origin = std::move(*initiator_root_frame_origin),
                      .input_event = AttributionHost::FromWebContents(
                                         WebContents::FromRenderFrameHost(
                                             initiator_frame_host))
@@ -171,8 +177,6 @@
   if (!data_host_manager)
     return;
 
-  const url::Origin& source_origin = it->second.source_origin;
-
   const std::vector<GURL>& redirect_chain =
       navigation_handle->GetRedirectChain();
 
@@ -183,13 +187,16 @@
   // initiating this redirect. At this point, the navigation handle reflects the
   // URL being navigated to, so instead use the second to last URL in the
   // redirect chain.
-  url::Origin reporting_origin =
-      url::Origin::Create(redirect_chain[redirect_chain.size() - 2]);
+  absl::optional<SuitableOrigin> reporting_origin =
+      SuitableOrigin::Create(redirect_chain[redirect_chain.size() - 2]);
+
+  if (!reporting_origin)
+    return;
 
   data_host_manager->NotifyNavigationRedirectRegistration(
       navigation_handle->GetImpression()->attribution_src_token,
-      std::move(source_header), std::move(reporting_origin), source_origin,
-      it->second.input_event);
+      std::move(source_header), std::move(*reporting_origin),
+      it->second.source_origin, it->second.input_event);
 }
 
 void AttributionHost::DidFinishNavigation(NavigationHandle* navigation_handle) {
@@ -233,7 +240,7 @@
     MaybeNotifyFailedSourceNavigation(navigation_handle);
     return;
   }
-  const url::Origin& source_origin =
+  const SuitableOrigin& source_origin =
       (*navigation_source_origin_it.get())->second.source_origin;
 
   DCHECK(navigation_handle->GetImpression());
@@ -246,8 +253,13 @@
   const url::Origin& destination_origin =
       navigation_handle->GetRenderFrameHost()->GetLastCommittedOrigin();
 
-  data_host_manager->NotifyNavigationForDataHost(
-      impression.attribution_src_token, source_origin, destination_origin);
+  if (SuitableOrigin::IsSuitable(destination_origin)) {
+    data_host_manager->NotifyNavigationForDataHost(
+        impression.attribution_src_token, source_origin);
+  } else {
+    data_host_manager->NotifyNavigationFailure(
+        impression.attribution_src_token);
+  }
 }
 
 void AttributionHost::MaybeNotifyFailedSourceNavigation(
@@ -269,7 +281,8 @@
   data_host_manager->NotifyNavigationFailure(impression->attribution_src_token);
 }
 
-const url::Origin* AttributionHost::TopFrameOriginForSecureContext() {
+absl::optional<SuitableOrigin>
+AttributionHost::TopFrameOriginForSecureContext() {
   RenderFrameHostImpl* render_frame_host =
       static_cast<RenderFrameHostImpl*>(receivers_.GetCurrentTargetFrame());
 
@@ -291,11 +304,14 @@
     base::debug::DumpWithoutCrashing();
   };
 
+  absl::optional<SuitableOrigin> suitable_top_frame_origin =
+      SuitableOrigin::Create(top_frame_origin);
+
   // TODO(crbug.com/1378749): Invoke mojo::ReportBadMessage here when we can be
   // sure honest renderers won't hit this path.
-  if (!attribution_reporting::SuitableOrigin::IsSuitable(top_frame_origin)) {
+  if (!suitable_top_frame_origin) {
     dump_without_crashing();
-    return nullptr;
+    return absl::nullopt;
   }
 
   // TODO(crbug.com/1378492): Invoke mojo::ReportBadMessage here when we can be
@@ -305,10 +321,10 @@
            ->policies()
            .is_web_secure_context) {
     dump_without_crashing();
-    return nullptr;
+    return absl::nullopt;
   }
 
-  return &top_frame_origin;
+  return suitable_top_frame_origin;
 }
 
 void AttributionHost::RegisterDataHost(
@@ -324,12 +340,13 @@
   if (!data_host_manager)
     return;
 
-  const url::Origin* top_frame_origin = TopFrameOriginForSecureContext();
+  absl::optional<SuitableOrigin> top_frame_origin =
+      TopFrameOriginForSecureContext();
   if (!top_frame_origin)
     return;
 
   data_host_manager->RegisterDataHost(
-      std::move(data_host), *top_frame_origin,
+      std::move(data_host), std::move(*top_frame_origin),
       receivers_.GetCurrentTargetFrame()->IsNestedWithinFencedFrame());
 }
 
diff --git a/content/browser/attribution_reporting/attribution_host.h b/content/browser/attribution_reporting/attribution_host.h
index 113dcc7..c0b3aa5 100644
--- a/content/browser/attribution_reporting/attribution_host.h
+++ b/content/browser/attribution_reporting/attribution_host.h
@@ -16,11 +16,12 @@
 #include "content/public/browser/render_frame_host_receiver_set.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/mojom/conversions/conversions.mojom.h"
 
-namespace url {
-class Origin;
-}  // namespace url
+namespace attribution_reporting {
+class SuitableOrigin;
+}  // namespace attribution_reporting
 
 namespace content {
 
@@ -73,10 +74,11 @@
   void DidFinishNavigation(NavigationHandle* navigation_handle) override;
 
   // Returns the top frame origin corresponding to the current target frame.
-  // Returns nullptr and reports a bad message if the top frame origin is not
-  // potentially trustworthy or the current target frame is not a secure
+  // Returns `absl::nullopt` and reports a bad message if the top frame origin
+  // is not potentially trustworthy or the current target frame is not a secure
   // context.
-  [[nodiscard]] const url::Origin* TopFrameOriginForSecureContext();
+  absl::optional<attribution_reporting::SuitableOrigin>
+  TopFrameOriginForSecureContext();
 
   // Notifies the `AttributionDataHostManager` that a navigation with an
   // associated `AttributionDataHost` failed, if necessary.
diff --git a/content/browser/attribution_reporting/attribution_host_unittest.cc b/content/browser/attribution_reporting/attribution_host_unittest.cc
index 353e229..04847be4e 100644
--- a/content/browser/attribution_reporting/attribution_host_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_host_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
+#include "components/attribution_reporting/suitable_origin.h"
 #include "content/browser/attribution_reporting/attribution_data_host_manager.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
@@ -46,6 +47,8 @@
 
 namespace {
 
+using ::attribution_reporting::SuitableOrigin;
+
 using testing::_;
 using testing::Return;
 
@@ -120,11 +123,11 @@
 TEST_F(AttributionHostTest, ValidAttributionSrc_ForwardedToManager) {
   blink::Impression impression;
 
-  EXPECT_CALL(*mock_data_host_manager(),
-              NotifyNavigationForDataHost(
-                  impression.attribution_src_token,
-                  url::Origin::Create(GURL("https://secure_impression.com")),
-                  url::Origin::Create(GURL(kConversionUrl))));
+  EXPECT_CALL(
+      *mock_data_host_manager(),
+      NotifyNavigationForDataHost(
+          impression.attribution_src_token,
+          *SuitableOrigin::Deserialize("https://secure_impression.com")));
 
   contents()->NavigateAndCommit(GURL("https://secure_impression.com"));
   auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
@@ -258,25 +261,25 @@
 struct OriginTrustworthyChecksTestCase {
   const char* source_origin;
   const char* destination_origin;
-  bool impression_expected;
+  bool expected_valid;
 };
 
 const OriginTrustworthyChecksTestCase kOriginTrustworthyChecksTestCases[] = {
     {.source_origin = kLocalHost,
      .destination_origin = kLocalHost,
-     .impression_expected = true},
+     .expected_valid = true},
     {.source_origin = "http://127.0.0.1",
      .destination_origin = "http://127.0.0.1",
-     .impression_expected = true},
+     .expected_valid = true},
     {.source_origin = kLocalHost,
      .destination_origin = "http://insecure.com",
-     .impression_expected = true},
+     .expected_valid = false},
     {.source_origin = "http://insecure.com",
      .destination_origin = kLocalHost,
-     .impression_expected = true},
+     .expected_valid = false},
     {.source_origin = "https://secure.com",
      .destination_origin = "https://secure.com",
-     .impression_expected = true},
+     .expected_valid = true},
 };
 
 class AttributionHostOriginTrustworthyChecksTest
@@ -289,8 +292,11 @@
        ImpressionNavigation_OriginTrustworthyChecksPerformed) {
   const OriginTrustworthyChecksTestCase& test_case = GetParam();
 
-  EXPECT_CALL(*mock_data_host_manager(), NotifyNavigationForDataHost)
-      .Times(test_case.impression_expected);
+  if (test_case.expected_valid) {
+    EXPECT_CALL(*mock_data_host_manager(), NotifyNavigationForDataHost);
+  } else {
+    EXPECT_CALL(*mock_data_host_manager(), NotifyNavigationFailure);
+  }
 
   contents()->NavigateAndCommit(GURL(test_case.source_origin));
   auto navigation = NavigationSimulatorImpl::CreateRendererInitiated(
@@ -309,7 +315,7 @@
 TEST_F(AttributionHostTest, DataHost_RegisteredWithContext) {
   EXPECT_CALL(
       *mock_data_host_manager(),
-      RegisterDataHost(_, url::Origin::Create(GURL("https://top.example")),
+      RegisterDataHost(_, *SuitableOrigin::Deserialize("https://top.example"),
                        /*is_within_fenced_frame=*/false));
 
   contents()->NavigateAndCommit(GURL("https://top.example"));
@@ -394,7 +400,7 @@
 TEST_F(AttributionHostTest, DataHostInSubframe_ContextIsOutermostFrame) {
   EXPECT_CALL(
       *mock_data_host_manager(),
-      RegisterDataHost(_, url::Origin::Create(GURL("https://top.example")),
+      RegisterDataHost(_, *SuitableOrigin::Deserialize("https://top.example"),
                        /*is_within_fenced_frame=*/false));
 
   contents()->NavigateAndCommit(GURL("https://top.example"));
@@ -449,7 +455,7 @@
 TEST_F(AttributionHostTest, DataHost_RegisteredWithFencedFrame) {
   EXPECT_CALL(
       *mock_data_host_manager(),
-      RegisterDataHost(_, url::Origin::Create(GURL("https://top.example")),
+      RegisterDataHost(_, *SuitableOrigin::Deserialize("https://top.example"),
                        /*is_within_fenced_frame=*/true));
 
   contents()->NavigateAndCommit(GURL("https://top.example"));
diff --git a/content/browser/attribution_reporting/attribution_test_utils.h b/content/browser/attribution_reporting/attribution_test_utils.h
index 522e2303..bf59c1c 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.h
+++ b/content/browser/attribution_reporting/attribution_test_utils.h
@@ -172,7 +172,7 @@
       void,
       RegisterDataHost,
       (mojo::PendingReceiver<blink::mojom::AttributionDataHost> data_host,
-       url::Origin context_origin,
+       attribution_reporting::SuitableOrigin context_origin,
        bool is_within_fenced_frame),
       (override));
 
@@ -188,16 +188,15 @@
               NotifyNavigationRedirectRegistration,
               (const blink::AttributionSrcToken& attribution_src_token,
                std::string header_value,
-               url::Origin reporting_origin,
-               const url::Origin& source_origin,
+               attribution_reporting::SuitableOrigin reporting_origin,
+               const attribution_reporting::SuitableOrigin& source_origin,
                AttributionInputEvent input_event),
               (override));
 
   MOCK_METHOD(void,
               NotifyNavigationForDataHost,
               (const blink::AttributionSrcToken& attribution_src_token,
-               const url::Origin& source_origin,
-               const url::Origin& destination_origin),
+               const attribution_reporting::SuitableOrigin& source_origin),
               (override));
 
   MOCK_METHOD(void,
diff --git a/content/browser/file_system_access/file_system_access_directory_handle_impl.cc b/content/browser/file_system_access/file_system_access_directory_handle_impl.cc
index c81eed19..83b334e 100644
--- a/content/browser/file_system_access/file_system_access_directory_handle_impl.cc
+++ b/content/browser/file_system_access/file_system_access_directory_handle_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/guid.h"
 #include "base/i18n/file_util_icu.h"
+#include "base/memory/ref_counted_delete_on_sequence.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/sequenced_task_runner.h"
@@ -25,6 +26,14 @@
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_file_handle.mojom.h"
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_transfer_token.mojom.h"
 
+#if BUILDFLAG(IS_POSIX)
+#include "base/barrier_callback.h"
+#include "base/files/file_util.h"
+#include "base/functional/bind.h"
+#include "base/task/thread_pool.h"
+#include "content/public/browser/file_system_access_permission_context.h"
+#endif
+
 using blink::mojom::FileSystemAccessEntry;
 using blink::mojom::FileSystemAccessEntryPtr;
 using blink::mojom::FileSystemAccessHandle;
@@ -36,6 +45,86 @@
 
 using HandleType = FileSystemAccessPermissionContext::HandleType;
 using WriteLockType = FileSystemAccessWriteLockManager::WriteLockType;
+#if BUILDFLAG(IS_POSIX)
+using PathType = FileSystemAccessPermissionContext::PathType;
+using SensitiveEntryResult =
+    FileSystemAccessPermissionContext::SensitiveEntryResult;
+using UserAction = FileSystemAccessPermissionContext::UserAction;
+#endif
+
+namespace {
+// Returns whether the specified extension receives special handling by the
+// Windows shell.
+bool IsShellIntegratedExtension(const base::FilePath::StringType& extension) {
+  base::FilePath::StringType extension_lower = base::ToLowerASCII(extension);
+
+  // .lnk and .scf files may be used to execute arbitrary code (see
+  // https://nvd.nist.gov/vuln/detail/CVE-2010-2568 and
+  // https://crbug.com/1227995, respectively). '.url' files can be used to read
+  // arbitrary files (see https://crbug.com/1307930 and
+  // https://crbug.com/1354518).
+  if (extension_lower == FILE_PATH_LITERAL("lnk") ||
+      extension_lower == FILE_PATH_LITERAL("scf") ||
+      extension_lower == FILE_PATH_LITERAL("url")) {
+    return true;
+  }
+
+  // Setting a file's extension to a CLSID may conceal its actual file type on
+  // some Windows versions (see https://nvd.nist.gov/vuln/detail/CVE-2004-0420).
+  if (!extension_lower.empty() &&
+      (extension_lower.front() == FILE_PATH_LITERAL('{')) &&
+      (extension_lower.back() == FILE_PATH_LITERAL('}')))
+    return true;
+  return false;
+}
+
+#if BUILDFLAG(IS_POSIX)
+base::FilePath ReadSymbolicLink(const base::FilePath& path) {
+  DCHECK(!path.empty());
+  base::FilePath resolved_file_path;
+  if (base::IsLink(path) && base::ReadSymbolicLink(path, &resolved_file_path)) {
+    return resolved_file_path;
+  }
+  // Returns an empty path if it is not a symbolic link, or fails to read the
+  // link.
+  return base::FilePath();
+}
+#endif
+
+}  // namespace
+
+struct FileSystemAccessDirectoryHandleImpl::
+    FileSystemAccessDirectoryEntriesListenerHolder
+    : base::RefCountedDeleteOnSequence<
+          FileSystemAccessDirectoryEntriesListenerHolder> {
+  FileSystemAccessDirectoryEntriesListenerHolder(
+      mojo::PendingRemote<
+          blink::mojom::FileSystemAccessDirectoryEntriesListener>
+          pending_listener,
+      scoped_refptr<base::SequencedTaskRunner> task_runner)
+      : base::RefCountedDeleteOnSequence<
+            FileSystemAccessDirectoryEntriesListenerHolder>(
+            std::move(task_runner)),
+        listener(mojo::Remote<
+                 blink::mojom::FileSystemAccessDirectoryEntriesListener>(
+            std::move(pending_listener))) {
+    listener.reset_on_disconnect();
+  }
+
+  FileSystemAccessDirectoryEntriesListenerHolder(
+      const FileSystemAccessDirectoryEntriesListenerHolder&) = delete;
+  FileSystemAccessDirectoryEntriesListenerHolder& operator=(
+      const FileSystemAccessDirectoryEntriesListenerHolder&) = delete;
+
+  mojo::Remote<blink::mojom::FileSystemAccessDirectoryEntriesListener> listener;
+
+ private:
+  ~FileSystemAccessDirectoryEntriesListenerHolder() = default;
+  friend class base::RefCountedDeleteOnSequence<
+      FileSystemAccessDirectoryEntriesListenerHolder>;
+  friend class base::DeleteHelper<
+      FileSystemAccessDirectoryEntriesListenerHolder>;
+};
 
 FileSystemAccessDirectoryHandleImpl::FileSystemAccessDirectoryHandleImpl(
     FileSystemAccessManagerImpl* manager,
@@ -82,6 +171,75 @@
     return;
   }
 
+#if BUILDFLAG(IS_POSIX)
+  // While this directory handle already has obtained the permission and checked
+  // for the blocklist, a child symlink file may be created, pointing to a
+  // blocklisted file or directory. Before returning a child file handle, check
+  // for the validity of the file path pointed by a symlink, if any.
+  // Currently, symlink checks are not available on Windows.
+  auto callback_after_access_check = base::BindOnce(
+      &FileSystemAccessDirectoryHandleImpl::DoGetFile,
+      weak_factory_.GetWeakPtr(), create, child_url, std::move(callback));
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()},
+      base::BindOnce(&ReadSymbolicLink, child_url.path()),
+      base::BindOnce(
+          &FileSystemAccessDirectoryHandleImpl::CheckSymbolicLinkAccess,
+          weak_factory_.GetWeakPtr(), child_url,
+          std::move(callback_after_access_check)));
+#else
+  DoGetFile(create, child_url, std::move(callback), /*allowed=*/true);
+#endif
+}
+
+#if BUILDFLAG(IS_POSIX)
+void FileSystemAccessDirectoryHandleImpl::CheckSymbolicLinkAccess(
+    storage::FileSystemURL url,
+    base::OnceCallback<void(bool)> callback,
+    const base::FilePath& symbolic_link) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (symbolic_link.empty() || !manager()->permission_context()) {
+    // Not a symlink, or missing a permission context to check the path;
+    // no need to do an additional check for blocklist.
+    std::move(callback).Run(/*allowed=*/true);
+    return;
+  }
+
+  manager()->permission_context()->ConfirmSensitiveEntryAccess(
+      context().storage_key.origin(),
+      url.type() == storage::FileSystemType::kFileSystemTypeLocal
+          ? PathType::kLocal
+          : PathType::kExternal,
+      symbolic_link, HandleType::kFile, UserAction::kNone, context().frame_id,
+      base::BindOnce(
+          &FileSystemAccessDirectoryHandleImpl::DidCheckSymbolicLinkAccess,
+          weak_factory_.GetWeakPtr(), std::move(callback)));
+}
+
+void FileSystemAccessDirectoryHandleImpl::DidCheckSymbolicLinkAccess(
+    base::OnceCallback<void(bool)> callback,
+    SensitiveEntryResult sensitive_entry_result) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  std::move(callback).Run(sensitive_entry_result ==
+                          SensitiveEntryResult::kAllowed);
+}
+#endif
+
+void FileSystemAccessDirectoryHandleImpl::DoGetFile(bool create,
+                                                    storage::FileSystemURL url,
+                                                    GetFileCallback callback,
+                                                    bool allowed) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (!allowed) {
+    std::move(callback).Run(file_system_access_error::FromStatus(
+                                FileSystemAccessStatus::kSecurityError),
+                            mojo::NullRemote());
+    return;
+  }
+
   if (create) {
     // If `create` is true, write permission is required unconditionally, i.e.
     // even if the file already exists. This is intentional, and matches the
@@ -89,7 +247,7 @@
     RunWithWritePermission(
         base::BindOnce(
             &FileSystemAccessDirectoryHandleImpl::GetFileWithWritePermission,
-            weak_factory_.GetWeakPtr(), child_url),
+            weak_factory_.GetWeakPtr(), url),
         base::BindOnce([](blink::mojom::FileSystemAccessErrorPtr result,
                           GetFileCallback callback) {
           std::move(callback).Run(std::move(result), mojo::NullRemote());
@@ -99,9 +257,8 @@
     manager()->DoFileSystemOperation(
         FROM_HERE, &FileSystemOperationRunner::FileExists,
         base::BindOnce(&FileSystemAccessDirectoryHandleImpl::DidGetFile,
-                       weak_factory_.GetWeakPtr(), child_url,
-                       std::move(callback)),
-        child_url);
+                       weak_factory_.GetWeakPtr(), url, std::move(callback)),
+        url);
   }
 }
 
@@ -155,18 +312,13 @@
         pending_listener) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  std::unique_ptr<
-      mojo::Remote<blink::mojom::FileSystemAccessDirectoryEntriesListener>,
-      base::OnTaskRunnerDeleter>
-      listener(new mojo::Remote<
-                   blink::mojom::FileSystemAccessDirectoryEntriesListener>(
-                   std::move(pending_listener)),
-               base::OnTaskRunnerDeleter(
-                   base::SequencedTaskRunner::GetCurrentDefault()));
-  listener->reset_on_disconnect();
+  auto listener_holder =
+      base::MakeRefCounted<FileSystemAccessDirectoryEntriesListenerHolder>(
+          std::move(pending_listener),
+          base::SequencedTaskRunner::GetCurrentDefault());
 
   if (GetReadPermissionStatus() != PermissionStatus::GRANTED) {
-    (*listener)->DidReadDirectory(
+    listener_holder->listener->DidReadDirectory(
         file_system_access_error::FromStatus(
             FileSystemAccessStatus::kPermissionDenied),
         {}, false);
@@ -177,7 +329,7 @@
       FROM_HERE, &FileSystemOperationRunner::ReadDirectory,
       base::BindRepeating(
           &FileSystemAccessDirectoryHandleImpl::DidReadDirectory,
-          weak_factory_.GetWeakPtr(), base::Owned(std::move(listener))),
+          weak_factory_.GetWeakPtr(), std::move(listener_holder)),
       url());
 }
 
@@ -409,23 +561,75 @@
 }
 
 void FileSystemAccessDirectoryHandleImpl::DidReadDirectory(
-    mojo::Remote<blink::mojom::FileSystemAccessDirectoryEntriesListener>*
-        listener,
+    scoped_refptr<FileSystemAccessDirectoryEntriesListenerHolder>
+        listener_holder,
     base::File::Error result,
     std::vector<filesystem::mojom::DirectoryEntry> file_list,
     bool has_more_entries) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (!*listener)
+  if (!listener_holder->listener)
     return;
 
   if (result != base::File::FILE_OK) {
     DCHECK(!has_more_entries);
-    (*listener)->DidReadDirectory(
+    listener_holder->listener->DidReadDirectory(
         file_system_access_error::FromFileError(result), {}, false);
     return;
   }
 
+#if BUILDFLAG(IS_POSIX)
+  // While this directory handle already has obtained the permission and checked
+  // for the blocklist, a child symlink file may be created, pointing to a
+  // blocklisted file or directory. Before merging a child into a result vector,
+  // check for the validity of the file path pointed by a symlink, if any.
+  // Currently, symlink checks are not available on Windows.
+  auto final_callback = base::BindOnce(
+      &FileSystemAccessDirectoryHandleImpl::AllEntriesReady,
+      weak_factory_.GetWeakPtr(), has_more_entries, std::move(listener_holder));
+
+  // Barrier callback is used to wait for checking each path in the `file_list`
+  // and creating a FileSystemAccessEntryPtr if the path is valid; otherwise,
+  // nullopt is returned for the callback. Since the barrier callback expects
+  // a fixed number of callbacks to be invoked before the final callback is
+  // invoked, each item in `file_list` must trigger the barrier callback with
+  // a valid FileSystemAccessEntryPtr or nullopt.
+  auto barrier_callback = base::BarrierCallback<FileSystemAccessEntryPtr>(
+      file_list.size(),
+      base::BindOnce(&FileSystemAccessDirectoryHandleImpl::MergeAllEntries,
+                     weak_factory_.GetWeakPtr(), std::move(final_callback)));
+
+  for (const auto& entry : file_list) {
+    std::string basename = storage::FilePathToString(entry.name);
+
+    storage::FileSystemURL child_url;
+    blink::mojom::FileSystemAccessErrorPtr get_child_url_result =
+        GetChildURL(basename, &child_url);
+
+    // Skip any entries with names that aren't allowed to be accessed by
+    // this API, such as files with disallowed characters in their names.
+    if (get_child_url_result->status != FileSystemAccessStatus::kOk) {
+      barrier_callback.Run(nullptr);
+      continue;
+    }
+
+    auto callback_after_access_check = base::BindOnce(
+        &FileSystemAccessDirectoryHandleImpl::AfterSymbolicLinkAccessCheck,
+        weak_factory_.GetWeakPtr(), std::move(basename), child_url,
+        entry.type == filesystem::mojom::FsFileType::DIRECTORY
+            ? HandleType::kDirectory
+            : HandleType::kFile,
+        barrier_callback);
+
+    base::ThreadPool::PostTaskAndReplyWithResult(
+        FROM_HERE, {base::MayBlock()},
+        base::BindOnce(&ReadSymbolicLink, child_url.path()),
+        base::BindOnce(
+            &FileSystemAccessDirectoryHandleImpl::CheckSymbolicLinkAccess,
+            weak_factory_.GetWeakPtr(), child_url,
+            std::move(callback_after_access_check)));
+  }
+#else
   std::vector<FileSystemAccessEntryPtr> entries;
   for (const auto& entry : file_list) {
     std::string basename = storage::FilePathToString(entry.name);
@@ -445,38 +649,59 @@
                         ? HandleType::kDirectory
                         : HandleType::kFile));
   }
-  (*listener)->DidReadDirectory(file_system_access_error::Ok(),
-                                std::move(entries), has_more_entries);
+  AllEntriesReady(has_more_entries, std::move(listener_holder),
+                  std::move(entries));
+#endif
 }
 
-namespace {
+#if BUILDFLAG(IS_POSIX)
+void FileSystemAccessDirectoryHandleImpl::AfterSymbolicLinkAccessCheck(
+    std::string basename,
+    storage::FileSystemURL child_url,
+    HandleType handle_type,
+    base::OnceCallback<void(FileSystemAccessEntryPtr)> barrier_callback,
+    bool allowed) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-// Returns whether the specified extension receives special handling by the
-// Windows shell.
-bool IsShellIntegratedExtension(const base::FilePath::StringType& extension) {
-  base::FilePath::StringType extension_lower = base::ToLowerASCII(extension);
-
-  // .lnk and .scf files may be used to execute arbitrary code (see
-  // https://nvd.nist.gov/vuln/detail/CVE-2010-2568 and
-  // https://crbug.com/1227995, respectively). '.url' files can be used to read
-  // arbitrary files (see https://crbug.com/1307930 and
-  // https://crbug.com/1354518).
-  if (extension_lower == FILE_PATH_LITERAL("lnk") ||
-      extension_lower == FILE_PATH_LITERAL("scf") ||
-      extension_lower == FILE_PATH_LITERAL("url")) {
-    return true;
+  if (!allowed) {
+    std::move(barrier_callback).Run(nullptr);
+    return;
   }
 
-  // Setting a file's extension to a CLSID may conceal its actual file type on
-  // some Windows versions (see https://nvd.nist.gov/vuln/detail/CVE-2004-0420).
-  if (!extension_lower.empty() &&
-      (extension_lower.front() == FILE_PATH_LITERAL('{')) &&
-      (extension_lower.back() == FILE_PATH_LITERAL('}')))
-    return true;
-  return false;
+  auto entry = CreateEntry(basename, child_url, handle_type);
+  std::move(barrier_callback).Run(std::move(entry));
 }
 
-}  // namespace
+void FileSystemAccessDirectoryHandleImpl::MergeAllEntries(
+    base::OnceCallback<void(std::vector<FileSystemAccessEntryPtr>)>
+        final_callback,
+    std::vector<FileSystemAccessEntryPtr> entries) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  std::vector<FileSystemAccessEntryPtr> filtered_entries;
+  for (auto& entry : entries) {
+    // Filter any entry that did not pass the access check.
+    if (entry) {
+      filtered_entries.push_back(std::move(entry));
+    }
+  }
+  std::move(final_callback).Run(std::move(filtered_entries));
+}
+#endif
+
+void FileSystemAccessDirectoryHandleImpl::AllEntriesReady(
+    bool has_more_entries,
+    scoped_refptr<FileSystemAccessDirectoryEntriesListenerHolder>
+        listener_holder,
+    std::vector<FileSystemAccessEntryPtr> entries) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  if (!listener_holder->listener)
+    return;
+
+  listener_holder->listener->DidReadDirectory(
+      file_system_access_error::Ok(), std::move(entries), has_more_entries);
+}
 
 // static
 bool FileSystemAccessDirectoryHandleImpl::IsSafePathComponent(
diff --git a/content/browser/file_system_access/file_system_access_directory_handle_impl.h b/content/browser/file_system_access/file_system_access_directory_handle_impl.h
index e4e1251..fbbd15e8 100644
--- a/content/browser/file_system_access/file_system_access_directory_handle_impl.h
+++ b/content/browser/file_system_access/file_system_access_directory_handle_impl.h
@@ -16,6 +16,7 @@
 #include "third_party/blink/public/mojom/file_system_access/file_system_access_directory_handle.mojom.h"
 
 namespace content {
+
 // This is the browser side implementation of the
 // FileSystemAccessDirectoryHandle mojom interface. Instances of this class are
 // owned by the FileSystemAccessManagerImpl instance passed in to the
@@ -26,6 +27,12 @@
 class CONTENT_EXPORT FileSystemAccessDirectoryHandleImpl
     : public FileSystemAccessHandleBase,
       public blink::mojom::FileSystemAccessDirectoryHandle {
+  // A struct holding FileSystemAccessDirectoryEntriesListener mojo remote.
+  // This mojo remote needs to be ref-counted and deleted on the right sequence
+  // via `base::RefCountedDeleteOnSequence`. Since mojo::Remote is move-only,
+  // a struct holding the mojo remote is used instead.
+  struct FileSystemAccessDirectoryEntriesListenerHolder;
+
  public:
   FileSystemAccessDirectoryHandleImpl(FileSystemAccessManagerImpl* manager,
                                       const BindingContext& context,
@@ -89,6 +96,10 @@
   // the implementation for passing create=true to GetFile.
   void GetFileWithWritePermission(const storage::FileSystemURL& child_url,
                                   GetFileCallback callback);
+  void DoGetFile(bool create,
+                 storage::FileSystemURL url,
+                 GetFileCallback callback,
+                 bool allowed);
   void DidGetFile(const storage::FileSystemURL& url,
                   GetFileCallback callback,
                   base::File::Error result);
@@ -100,15 +111,42 @@
                        GetDirectoryCallback callback,
                        base::File::Error result);
   void DidReadDirectory(
-      mojo::Remote<blink::mojom::FileSystemAccessDirectoryEntriesListener>*
-          listener,
+      scoped_refptr<FileSystemAccessDirectoryEntriesListenerHolder>
+          listener_holder,
       base::File::Error result,
       std::vector<filesystem::mojom::DirectoryEntry> file_list,
       bool has_more_entries);
+  void AllEntriesReady(
+      bool has_more_entries,
+      scoped_refptr<FileSystemAccessDirectoryEntriesListenerHolder>
+          listener_holder,
+      std::vector<blink::mojom::FileSystemAccessEntryPtr> entries);
 
   void ResolveImpl(ResolveCallback callback,
                    FileSystemAccessTransferTokenImpl* possible_child);
 
+#if BUILDFLAG(IS_POSIX)
+  // Optionally checks for the blocklist for symbolic link.
+  void CheckSymbolicLinkAccess(storage::FileSystemURL url,
+                               base::OnceCallback<void(bool)> callback,
+                               const base::FilePath& symbolic_link);
+  void DidCheckSymbolicLinkAccess(
+      base::OnceCallback<void(bool)> callback,
+      FileSystemAccessPermissionContext::SensitiveEntryResult
+          sensitive_entry_result);
+  void AfterSymbolicLinkAccessCheck(
+      std::string basename,
+      storage::FileSystemURL child_url,
+      FileSystemAccessPermissionContext::HandleType handle_type,
+      base::OnceCallback<void(blink::mojom::FileSystemAccessEntryPtr)>
+          barrier_callback,
+      bool allowed);
+  void MergeAllEntries(
+      base::OnceCallback<void(
+          std::vector<blink::mojom::FileSystemAccessEntryPtr>)> final_callback,
+      std::vector<blink::mojom::FileSystemAccessEntryPtr> entries);
+#endif
+
   // Helper to create a blink::mojom::FileSystemAccessEntry struct.
   blink::mojom::FileSystemAccessEntryPtr CreateEntry(
       const std::string& basename,
diff --git a/content/browser/file_system_access/file_system_access_directory_handle_impl_unittest.cc b/content/browser/file_system_access/file_system_access_directory_handle_impl_unittest.cc
index 8c8932e..4d45ae18 100644
--- a/content/browser/file_system_access/file_system_access_directory_handle_impl_unittest.cc
+++ b/content/browser/file_system_access/file_system_access_directory_handle_impl_unittest.cc
@@ -14,12 +14,14 @@
 #include "base/memory/raw_ptr.h"
 #include "base/run_loop.h"
 #include "base/test/bind.h"
+#include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
 #include "build/build_config.h"
 #include "components/services/storage/public/cpp/buckets/bucket_locator.h"
 #include "content/browser/file_system_access/file_system_access_write_lock_manager.h"
 #include "content/browser/file_system_access/fixed_file_system_access_permission_grant.h"
+#include "content/browser/file_system_access/mock_file_system_access_permission_context.h"
 #include "content/public/test/browser_task_environment.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "storage/browser/quota/quota_manager_proxy.h"
@@ -34,6 +36,11 @@
 namespace content {
 
 using storage::FileSystemURL;
+using testing::_;
+using HandleType = FileSystemAccessPermissionContext::HandleType;
+using SensitiveEntryResult =
+    FileSystemAccessPermissionContext::SensitiveEntryResult;
+using UserAction = FileSystemAccessPermissionContext::UserAction;
 using WriteLockType = FileSystemAccessWriteLockManager::WriteLockType;
 
 class FileSystemAccessDirectoryHandleImplTest : public testing::Test {
@@ -52,8 +59,7 @@
                                                base::FilePath(), nullptr);
 
     manager_ = base::MakeRefCounted<FileSystemAccessManagerImpl>(
-        file_system_context_, chrome_blob_context_,
-        /*permission_context=*/nullptr,
+        file_system_context_, chrome_blob_context_, &permission_context_,
         /*off_the_record=*/false);
 
     auto url = manager_->CreateFileSystemURLFromPath(
@@ -74,7 +80,10 @@
                                                        deny_grant_));
   }
 
-  void TearDown() override { task_environment_.RunUntilIdle(); }
+  void TearDown() override {
+    manager_.reset();
+    task_environment_.RunUntilIdle();
+  }
 
   std::unique_ptr<FileSystemAccessDirectoryHandleImpl> GetHandleWithPermissions(
       const base::FilePath& path,
@@ -109,6 +118,8 @@
   scoped_refptr<storage::FileSystemContext> file_system_context_;
   scoped_refptr<ChromeBlobStorageContext> chrome_blob_context_;
   scoped_refptr<FileSystemAccessManagerImpl> manager_;
+  testing::StrictMock<MockFileSystemAccessPermissionContext>
+      permission_context_;
 
   scoped_refptr<FixedFileSystemAccessPermissionGrant> allow_grant_ =
       base::MakeRefCounted<FixedFileSystemAccessPermissionGrant>(
@@ -246,6 +257,27 @@
   EXPECT_THAT(names, testing::UnorderedElementsAreArray(kSafeNames));
 }
 
+#if BUILDFLAG(IS_POSIX)
+TEST_F(FileSystemAccessDirectoryHandleImplTest, GetFile_Symlink) {
+  base::FilePath symlink_path(dir_.GetPath().AppendASCII("symlink"));
+  base::FilePath target_path(dir_.GetPath().AppendASCII("target"));
+  ASSERT_TRUE(base::CreateSymbolicLink(target_path, symlink_path));
+
+  EXPECT_CALL(permission_context_,
+              ConfirmSensitiveEntryAccess_(_, _, target_path, HandleType::kFile,
+                                           UserAction::kNone, _, _))
+      .WillOnce(base::test::RunOnceCallback<6>(SensitiveEntryResult::kAbort));
+
+  base::test::TestFuture<
+      blink::mojom::FileSystemAccessErrorPtr,
+      mojo::PendingRemote<blink::mojom::FileSystemAccessFileHandle>>
+      future;
+  handle_->GetFile("symlink", /*create=*/false, future.GetCallback());
+  EXPECT_EQ(future.Get<0>()->status,
+            blink::mojom::FileSystemAccessStatus::kSecurityError);
+}
+#endif
+
 TEST_F(FileSystemAccessDirectoryHandleImplTest, GetFile_NoReadAccess) {
   ASSERT_TRUE(base::WriteFile(dir_.GetPath().AppendASCII("filename"), "data"));
 
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index e931add0..8d58dc1 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -5060,12 +5060,26 @@
 
   PersistOriginTrialsFromHeaders(origin, response(), browser_context);
 
-  // If the final response do not have a valid ReduceAcceptLanguage origin trial
-  // token, stop persisting the accepted language. This happens when the token
-  // expires, is invalid, or is missing when the server stop using it.
+  // Update the reduced accept-language to commit if it's empty, and stop
+  // persisting the accepted language if the final response do not have a valid
+  // ReduceAcceptLanguage origin trial token. This happens when a site initially
+  // opts-in to the origin trial, the token expires, is invalid, or is missing
+  // when the server stops using it.
   if (auto reduce_accept_lang_utils =
           ReduceAcceptLanguageUtils::Create(browser_context);
       reduce_accept_lang_utils && !devtools_accept_language_override_) {
+    // When the server initially opt into the origin trial, via an OT token in
+    // the navigation response, the reduced accept-language to commit has not
+    // been set. It is set here to make sure the initial page load uses an
+    // appropriate value. E.g. this helps subresource requests send reduced
+    // accept-language when server initially opt into the origin trial.
+    if (commit_params_->reduced_accept_language.empty()) {
+      commit_params_->reduced_accept_language =
+          reduce_accept_lang_utils.value()
+              .LookupReducedAcceptLanguage(GetOriginToCommit().value(),
+                                           frame_tree_node_)
+              .value_or("");
+    }
     reduce_accept_lang_utils.value().RemoveOriginTrialReducedAcceptLanguage(
         commit_params_->reduced_accept_language, GetOriginToCommit().value(),
         response(), frame_tree_node_);
diff --git a/content/browser/snapshot_browsertest.cc b/content/browser/snapshot_browsertest.cc
index 43b9ff6..a9f0aa8 100644
--- a/content/browser/snapshot_browsertest.cc
+++ b/content/browser/snapshot_browsertest.cc
@@ -255,11 +255,12 @@
 // Timing out either all the time, or infrequently, apparently because
 // they're too slow, on the following configurations:
 //   Windows Debug
+//   Windows Release (https://crbug.com/1376441)
 //   Linux Chromium OS ASAN LSAN Tests (1)
 //   Linux TSAN Tests
 // See crbug.com/771119
 // TODO(https://crbug.com/1317446): Fix and enable on Fuchsia.
-#if (BUILDFLAG(IS_WIN) && !defined(NDEBUG)) || BUILDFLAG(IS_CHROMEOS_ASH) || \
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH) ||                       \
     ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) &&                      \
      defined(THREAD_SANITIZER)) ||                                           \
     BUILDFLAG(IS_FUCHSIA)
diff --git a/content/browser/storage_partition_impl.h b/content/browser/storage_partition_impl.h
index db87975..0c42cea9 100644
--- a/content/browser/storage_partition_impl.h
+++ b/content/browser/storage_partition_impl.h
@@ -265,9 +265,7 @@
   MediaLicenseManager* GetMediaLicenseManager();
 #endif  // BUILDFLAG(ENABLE_LIBRARY_CDMS)
 
-  // Gets the SharedStorageManager for the StoragePartition, or nullptr if it
-  // doesn't exist because the feature is disabled.
-  storage::SharedStorageManager* GetSharedStorageManager();
+  storage::SharedStorageManager* GetSharedStorageManager() override;
   PrivateAggregationManager* GetPrivateAggregationManager();
 
   // blink::mojom::DomStorage interface.
diff --git a/content/browser/xr/metrics/webxr_session_tracker.cc b/content/browser/xr/metrics/webxr_session_tracker.cc
index 58c1f43e..17fe3e7 100644
--- a/content/browser/xr/metrics/webxr_session_tracker.cc
+++ b/content/browser/xr/metrics/webxr_session_tracker.cc
@@ -82,6 +82,7 @@
     case XRSessionFeature::IMAGE_TRACKING:
     case XRSessionFeature::HAND_INPUT:
     case XRSessionFeature::SECONDARY_VIEWS:
+    case XRSessionFeature::LAYERS:
       // Not recording metrics for these features currently.
       // TODO(https://crbug.com/965729): Add metrics for the AR-related features
       // that are enabled by default.
@@ -125,6 +126,7 @@
     case XRSessionFeature::IMAGE_TRACKING:
     case XRSessionFeature::HAND_INPUT:
     case XRSessionFeature::SECONDARY_VIEWS:
+    case XRSessionFeature::LAYERS:
       // Not recording metrics for these features currently.
       // TODO(https://crbug.com/965729): Add metrics for the AR-related features
       // that are enabled by default.
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 0c5a419..4544ceea 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -291,6 +291,7 @@
     {wf::EnableWebXRHandInput, device::features::kWebXrHandInput},
     {wf::EnableWebXRHitTest, device::features::kWebXrHitTest},
     {wf::EnableWebXRImageTracking, device::features::kWebXrIncubations},
+    {wf::EnableWebXRLayers, device::features::kWebXrLayers},
     {wf::EnableWebXRPlaneDetection, device::features::kWebXrIncubations},
     {wf::EnableRemoveMobileViewportDoubleTap,
      features::kRemoveMobileViewportDoubleTap},
diff --git a/content/common/fetch/OWNERS b/content/common/fetch/OWNERS
index e26959d3..a166098 100644
--- a/content/common/fetch/OWNERS
+++ b/content/common/fetch/OWNERS
@@ -1,4 +1,2 @@
-file://third_party/blink/renderer/core/fetch/OWNERS
-
 per-file *_type_converter*.*=set noparent
 per-file *_type_converter*.*=file://ipc/SECURITY_OWNERS
diff --git a/content/public/browser/file_system_access_permission_context.h b/content/public/browser/file_system_access_permission_context.h
index 0ea741d..55b8e2bd 100644
--- a/content/public/browser/file_system_access_permission_context.h
+++ b/content/public/browser/file_system_access_permission_context.h
@@ -44,6 +44,10 @@
     // drag&drop operation. Read access should start out granted, but write
     // access will require a prompt.
     kDragAndDrop,
+    // The path for which a permission grant is requested was not the result of
+    // a user action. This is used for checking additional blocklist check of
+    // a path when obtaining a handle, therefore no prompt needs to be shown.
+    kNone,
   };
 
   // This enum helps distinguish between file or directory File System Access
diff --git a/content/public/browser/storage_partition.h b/content/public/browser/storage_partition.h
index bc5977c..0a145ee 100644
--- a/content/public/browser/storage_partition.h
+++ b/content/public/browser/storage_partition.h
@@ -50,10 +50,11 @@
 }  // namespace network
 
 namespace storage {
-class QuotaManager;
-class SpecialStoragePolicy;
-struct QuotaSettings;
 class DatabaseTracker;
+class QuotaManager;
+struct QuotaSettings;
+class SharedStorageManager;
+class SpecialStoragePolicy;
 }  // namespace storage
 
 namespace url {
@@ -97,6 +98,10 @@
   // caller should not hold onto this pointer beyond the same message loop task.
   virtual network::mojom::NetworkContext* GetNetworkContext() = 0;
 
+  // Returns the SharedStorageManager for the StoragePartition, or nullptr if it
+  // doesn't exist because the feature is disabled.
+  virtual storage::SharedStorageManager* GetSharedStorageManager() = 0;
+
   // Returns a pointer/info to a URLLoaderFactory/CookieManager owned by
   // the storage partition. Prefer to use this instead of creating a new
   // URLLoaderFactory when issuing requests from the Browser process, to
diff --git a/content/public/test/test_storage_partition.cc b/content/public/test/test_storage_partition.cc
index 6b6bdc48..78906234 100644
--- a/content/public/test/test_storage_partition.cc
+++ b/content/public/test/test_storage_partition.cc
@@ -23,6 +23,10 @@
   return network_context_;
 }
 
+storage::SharedStorageManager* TestStoragePartition::GetSharedStorageManager() {
+  return nullptr;
+}
+
 scoped_refptr<network::SharedURLLoaderFactory>
 TestStoragePartition::GetURLLoaderFactoryForBrowserProcess() {
   return nullptr;
diff --git a/content/public/test/test_storage_partition.h b/content/public/test/test_storage_partition.h
index 837fc61..506f1a2 100644
--- a/content/public/test/test_storage_partition.h
+++ b/content/public/test/test_storage_partition.h
@@ -59,6 +59,8 @@
   }
   network::mojom::NetworkContext* GetNetworkContext() override;
 
+  storage::SharedStorageManager* GetSharedStorageManager() override;
+
   scoped_refptr<network::SharedURLLoaderFactory>
   GetURLLoaderFactoryForBrowserProcess() override;
 
diff --git a/content/test/data/attribution_reporting/interop/rate_limit_max_attributions.json b/content/test/data/attribution_reporting/interop/rate_limit_max_attributions.json
index 187cc03b..73bb2f7 100644
--- a/content/test/data/attribution_reporting/interop/rate_limit_max_attributions.json
+++ b/content/test/data/attribution_reporting/interop/rate_limit_max_attributions.json
@@ -95,7 +95,7 @@
       }
     ],
     "triggers": [
-      // Should result in an event-level report becasue the attribution limit
+      // Should result in an event-level report because the attribution limit
       // is not reached.
       {
         "timestamp": "1643235574000",
diff --git a/device/base/features.cc b/device/base/features.cc
index 0383f670..8e7ec17 100644
--- a/device/base/features.cc
+++ b/device/base/features.cc
@@ -74,6 +74,9 @@
              "WebXRIncubations",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+// Enables access to WebXR composition layers.
+BASE_FEATURE(kWebXrLayers, "WebXRLayers", base::FEATURE_DISABLED_BY_DEFAULT);
+
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX)
 // Controls whether Web Bluetooth should support confirm-only and confirm-PIN
 // pairing mode on Win/Linux
diff --git a/device/base/features.h b/device/base/features.h
index f14bf72..0801ad55 100644
--- a/device/base/features.h
+++ b/device/base/features.h
@@ -37,6 +37,7 @@
 DEVICE_BASE_EXPORT BASE_DECLARE_FEATURE(kWebXrHandInput);
 DEVICE_BASE_EXPORT BASE_DECLARE_FEATURE(kWebXrHitTest);
 DEVICE_BASE_EXPORT BASE_DECLARE_FEATURE(kWebXrIncubations);
+DEVICE_BASE_EXPORT BASE_DECLARE_FEATURE(kWebXrLayers);
 
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX)
 DEVICE_BASE_EXPORT BASE_DECLARE_FEATURE(kWebBluetoothConfirmPairingSupport);
diff --git a/device/vr/openxr/openxr_device.cc b/device/vr/openxr/openxr_device.cc
index 7bc59d7e..cbb84f51 100644
--- a/device/vr/openxr/openxr_device.cc
+++ b/device/vr/openxr/openxr_device.cc
@@ -22,14 +22,12 @@
 
 const std::vector<mojom::XRSessionFeature>& GetSupportedFeatures() {
   static base::NoDestructor<std::vector<mojom::XRSessionFeature>>
-      kSupportedFeatures{{
-    mojom::XRSessionFeature::REF_SPACE_VIEWER,
-    mojom::XRSessionFeature::REF_SPACE_LOCAL,
-    mojom::XRSessionFeature::REF_SPACE_LOCAL_FLOOR,
-    mojom::XRSessionFeature::REF_SPACE_BOUNDED_FLOOR,
-    mojom::XRSessionFeature::REF_SPACE_UNBOUNDED,
-    mojom::XRSessionFeature::ANCHORS,
-  }};
+      kSupportedFeatures{{mojom::XRSessionFeature::REF_SPACE_VIEWER,
+                          mojom::XRSessionFeature::REF_SPACE_LOCAL,
+                          mojom::XRSessionFeature::REF_SPACE_LOCAL_FLOOR,
+                          mojom::XRSessionFeature::REF_SPACE_BOUNDED_FLOOR,
+                          mojom::XRSessionFeature::REF_SPACE_UNBOUNDED,
+                          mojom::XRSessionFeature::ANCHORS}};
 
   return *kSupportedFeatures;
 }
@@ -60,6 +58,10 @@
   if (base::FeatureList::IsEnabled(features::kWebXrHandInput))
     device_features.emplace_back(mojom::XRSessionFeature::HAND_INPUT);
 
+  // Only support layers if the feature flag is enabled.
+  if (base::FeatureList::IsEnabled(features::kWebXrLayers))
+    device_features.emplace_back(mojom::XRSessionFeature::LAYERS);
+
   // Only support hit test if the feature flag is enabled.
   if (base::FeatureList::IsEnabled(features::kWebXrHitTest) &&
       base::FeatureList::IsEnabled(
diff --git a/device/vr/public/mojom/vr_service.mojom b/device/vr/public/mojom/vr_service.mojom
index 81cf71c..702b581f 100644
--- a/device/vr/public/mojom/vr_service.mojom
+++ b/device/vr/public/mojom/vr_service.mojom
@@ -68,6 +68,7 @@
   IMAGE_TRACKING = 13,
   HAND_INPUT = 14,
   SECONDARY_VIEWS = 15,
+  LAYERS = 16
 };
 
 // These values are persisted to logs. Entries should not be renumbered and
diff --git a/extensions/browser/api/power/power_api_unittest.cc b/extensions/browser/api/power/power_api_unittest.cc
index ac3af23..5a003e7 100644
--- a/extensions/browser/api/power/power_api_unittest.cc
+++ b/extensions/browser/api/power/power_api_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/memory/scoped_refptr.h"
 #include "base/task/single_thread_task_runner.h"
 #include "extensions/browser/api_test_utils.h"
 #include "extensions/browser/api_unittest.h"
@@ -173,11 +174,12 @@
   bool CallFunction(FunctionType type,
                     const std::string& args,
                     const extensions::Extension* extension) {
-    scoped_refptr<ExtensionFunction> function(
-        type == REQUEST
-            ? static_cast<ExtensionFunction*>(new PowerRequestKeepAwakeFunction)
-            : static_cast<ExtensionFunction*>(
-                  new PowerReleaseKeepAwakeFunction));
+    scoped_refptr<ExtensionFunction> function;
+    if (type == REQUEST) {
+      function = base::MakeRefCounted<PowerRequestKeepAwakeFunction>();
+    } else {
+      function = base::MakeRefCounted<PowerReleaseKeepAwakeFunction>();
+    }
     function->set_extension(extension);
     return api_test_utils::RunFunction(function.get(), args, browser_context());
   }
diff --git a/extensions/browser/api/runtime/restart_after_delay_api_unittest.cc b/extensions/browser/api/runtime/restart_after_delay_api_unittest.cc
index 3da0077..1596c63 100644
--- a/extensions/browser/api/runtime/restart_after_delay_api_unittest.cc
+++ b/extensions/browser/api/runtime/restart_after_delay_api_unittest.cc
@@ -7,6 +7,8 @@
 #include "base/callback_helpers.h"
 #include "base/memory/ptr_util.h"
 #include "base/memory/raw_ptr.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
@@ -167,24 +169,25 @@
       const Extension* extension,
       const std::string& expected_error) {
     std::string error = RunFunctionGetError(
-        new RuntimeRestartAfterDelayFunction(), extension, args);
+        base::MakeRefCounted<RuntimeRestartAfterDelayFunction>(), extension,
+        args);
     ASSERT_EQ(error, expected_error);
   }
 
   void RunRestartFunctionAssertNoError() {
-    std::string error =
-        RunFunctionGetError(new RuntimeRestartFunction(), extension(), "[]");
+    std::string error = RunFunctionGetError(
+        base::MakeRefCounted<RuntimeRestartFunction>(), extension(), "[]");
     ASSERT_TRUE(error.empty()) << error;
   }
 
  private:
-  std::string RunFunctionGetError(ExtensionFunction* function,
+  std::string RunFunctionGetError(scoped_refptr<ExtensionFunction> function,
                                   const Extension* extension,
                                   const std::string& args) {
     scoped_refptr<ExtensionFunction> function_owner(function);
     function->set_extension(extension);
     function->set_has_callback(true);
-    api_test_utils::RunFunction(function, args, browser_context());
+    api_test_utils::RunFunction(function.get(), args, browser_context());
     return function->GetError();
   }
 };
diff --git a/extensions/browser/api/test/test_api.cc b/extensions/browser/api/test/test_api.cc
index aed07f5..9a43a2d7 100644
--- a/extensions/browser/api/test/test_api.cc
+++ b/extensions/browser/api/test/test_api.cc
@@ -125,8 +125,7 @@
 }
 
 // static
-void TestGetConfigFunction::set_test_config_state(
-    base::DictionaryValue* value) {
+void TestGetConfigFunction::set_test_config_state(base::Value::Dict* value) {
   TestConfigState* test_config_state = TestConfigState::GetInstance();
   test_config_state->set_config_state(value);
 }
@@ -146,9 +145,8 @@
   TestConfigState* test_config_state = TestConfigState::GetInstance();
   if (!test_config_state->config_state())
     return RespondNow(Error(kNoTestConfigDataError));
-  return RespondNow(OneArgument(base::Value::FromUniquePtrValue(
-      base::DictionaryValue::From(base::Value::ToUniquePtrValue(
-          test_config_state->config_state()->Clone())))));
+  return RespondNow(
+      OneArgument(base::Value(test_config_state->config_state()->Clone())));
 }
 
 TestWaitForRoundTripFunction::~TestWaitForRoundTripFunction() {}
diff --git a/extensions/browser/api/test/test_api.h b/extensions/browser/api/test/test_api.h
index 802d008..2f15143 100644
--- a/extensions/browser/api/test/test_api.h
+++ b/extensions/browser/api/test/test_api.h
@@ -103,7 +103,7 @@
 
   // Set the dictionary returned by chrome.test.getConfig().
   // Does not take ownership of |value|.
-  static void set_test_config_state(base::DictionaryValue* value);
+  static void set_test_config_state(base::Value::Dict* value);
 
  protected:
   // Tests that set configuration state do so by calling
@@ -117,17 +117,17 @@
 
     static TestConfigState* GetInstance();
 
-    void set_config_state(base::DictionaryValue* config_state) {
+    void set_config_state(base::Value::Dict* config_state) {
       config_state_ = config_state;
     }
 
-    const base::DictionaryValue* config_state() { return config_state_; }
+    const base::Value::Dict* config_state() { return config_state_; }
 
    private:
     friend struct base::DefaultSingletonTraits<TestConfigState>;
     TestConfigState();
 
-    raw_ptr<base::DictionaryValue, DanglingUntriaged> config_state_;
+    raw_ptr<base::Value::Dict, DanglingUntriaged> config_state_;
   };
 
   ~TestGetConfigFunction() override;
diff --git a/extensions/browser/guest_view/web_view/web_view_apitest.cc b/extensions/browser/guest_view/web_view/web_view_apitest.cc
index 0f81c0b..6e64207 100644
--- a/extensions/browser/guest_view/web_view/web_view_apitest.cc
+++ b/extensions/browser/guest_view/web_view/web_view_apitest.cc
@@ -294,7 +294,7 @@
     return;
   }
 
-  test_config_.SetIntPath(kTestServerPort, embedded_test_server()->port());
+  test_config_.SetByDottedPath(kTestServerPort, embedded_test_server()->port());
 
   base::ScopedAllowBlockingForTesting allow_blocking;
   base::FilePath test_data_dir;
@@ -960,7 +960,7 @@
       net::test_server::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
   ASSERT_TRUE(https_server.Start());
   base::HistogramTester histogram;
-  test_config_.SetIntPath(kTestServerPort, https_server.port());
+  test_config_.SetByDottedPath(kTestServerPort, https_server.port());
   RunTest("testSetUserAgentOverride", "web_view/apitest");
   content::FetchHistogramsFromChildProcesses();
   histogram.ExpectBucketCount(
diff --git a/extensions/browser/guest_view/web_view/web_view_apitest.h b/extensions/browser/guest_view/web_view/web_view_apitest.h
index a27975c3..a95b70c 100644
--- a/extensions/browser/guest_view/web_view/web_view_apitest.h
+++ b/extensions/browser/guest_view/web_view/web_view_apitest.h
@@ -52,7 +52,7 @@
 
   raw_ptr<content::WebContents, DanglingUntriaged> embedder_web_contents_;
   guest_view::TestGuestViewManagerFactory factory_;
-  base::DictionaryValue test_config_;
+  base::Value::Dict test_config_;
 
  private:
   content::WebContents* GetFirstAppWindowWebContents();
diff --git a/fuchsia_web/runners/cast/fidl/application_config.fidl b/fuchsia_web/runners/cast/fidl/application_config.fidl
index 5b91cb5..94e6fc93 100644
--- a/fuchsia_web/runners/cast/fidl/application_config.fidl
+++ b/fuchsia_web/runners/cast/fidl/application_config.fidl
@@ -8,6 +8,7 @@
 using fuchsia.media;
 using fuchsia.ui.gfx;
 using fuchsia.web;
+using zx;
 
 /// Describes the configuration under which a Cast application should run.
 type ApplicationConfig = resource table {
@@ -50,6 +51,11 @@
     /// specified, then audio will be played through
     /// [`fuchsia.media/AudioConsumer`].
     11: audio_renderer_usage fuchsia.media.AudioRenderUsage;
+
+    /// If set, the application's forceful termination is delayed by
+    /// the duration given. This delay will take precedence over any
+    /// delay implemented by the application.
+    12: shutdown_delay zx.duration;
 };
 
 /// Service interface for working with application configurations.
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc b/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc
index 9883eb7..d1b518e40 100644
--- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc
+++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc
@@ -42,7 +42,6 @@
 #include "ui/gl/gl_fence.h"
 #include "ui/gl/gl_gl_api_implementation.h"
 #include "ui/gl/gl_image_native_pixmap.h"
-#include "ui/gl/gl_image_shared_memory.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_version_info.h"
 #include "ui/gl/scoped_binders.h"
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index 30c01f4..9354b76 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -62111,7 +62111,7 @@
       name: "android_compile_dbg"
       swarming_host: "chromium-swarm.appspot.com"
       dimensions: "builder:android_compile_dbg"
-      dimensions: "cores:8"
+      dimensions: "cores:8|16"
       dimensions: "cpu:x86-64"
       dimensions: "os:Ubuntu-18.04"
       dimensions: "pool:luci.chromium.try"
@@ -79927,7 +79927,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -80480,7 +80480,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -81728,7 +81728,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -81960,7 +81960,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -82620,7 +82620,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -83059,7 +83059,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -83291,7 +83291,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -84061,7 +84061,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -84614,7 +84614,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -84846,7 +84846,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
index 181e616..6a1205ea 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -591,6 +591,9 @@
 try_.builder(
     name = "android_compile_dbg",
     branch_selector = branches.STANDARD_MILESTONE,
+    cores = "8|16",
+    # TODO(crbug.com/1343843): Set to True once ssd bots are landed
+    ssd = None,
     mirrors = [
         "ci/Android arm Builder (dbg)",
     ],
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
index 34d5c695..e568697 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
@@ -180,9 +180,6 @@
     executable = "recipe:chromium_libfuzzer_trybot",
     main_list_view = "try",
     tryjob = try_.job(),
-
-    # TODO(crbug.com/1366987): remove this.
-    omit_python2 = False,
 )
 
 try_.builder(
@@ -228,9 +225,6 @@
     # TODO(crbug.com/1372179): Use orchestrator pool once overloaded test pools
     # are addressed
     # use_orchestrator_pool = True,
-
-    # TODO(crbug.com/1366987): remove this.
-    omit_python2 = False,
 )
 
 try_.compilator_builder(
@@ -257,9 +251,6 @@
         "chromium_rts.inverted_rts_bail_early": 100,
     },
     use_orchestrator_pool = True,
-
-    # TODO(crbug.com/1366987): remove this.
-    omit_python2 = False,
 )
 
 try_.orchestrator_builder(
@@ -277,9 +268,6 @@
     ),
     main_list_view = "try",
     tryjob = try_.job(),
-
-    # TODO(crbug.com/1366987): remove this.
-    omit_python2 = False,
 )
 
 try_.compilator_builder(
@@ -337,9 +325,6 @@
     builderless = not settings.is_main,
     main_list_view = "try",
     tryjob = try_.job(),
-
-    # TODO(crbug.com/1366987): remove this.
-    omit_python2 = False,
 )
 
 try_.builder(
@@ -390,9 +375,6 @@
     # TODO (crbug.com/1372179): Use orchestrator pool once overloaded test pools
     # are addressed
     # use_orchestrator_pool = True,
-
-    # TODO(crbug.com/1366987): remove this.
-    omit_python2 = False,
 )
 
 try_.orchestrator_builder(
@@ -411,7 +393,6 @@
         "chromium_rts.inverted_rts": 100,
         "chromium_rts.inverted_rts_bail_early": 100,
     },
-    omit_python2 = False,
     use_orchestrator_pool = True,
 )
 
@@ -502,9 +483,6 @@
     reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CQ,
     main_list_view = "try",
     tryjob = try_.job(),
-
-    # TODO(crbug.com/1366987): remove this.
-    omit_python2 = False,
 )
 
 try_.builder(
@@ -583,9 +561,6 @@
     # TODO (crbug.com/1372179): Use orchestrator pool once overloaded test pools
     # are addressed
     # use_orchestrator_pool = True,
-
-    # TODO(crbug.com/1366987): remove this.
-    omit_python2 = False,
 )
 
 try_.orchestrator_builder(
@@ -605,7 +580,6 @@
         "chromium_rts.inverted_rts_bail_early": 100,
     },
     use_orchestrator_pool = True,
-    omit_python2 = False,
 )
 
 try_.compilator_builder(
diff --git a/ios/build/tools/setup-gn.py b/ios/build/tools/setup-gn.py
index 140a2f92..905e5a5a 100755
--- a/ios/build/tools/setup-gn.py
+++ b/ios/build/tools/setup-gn.py
@@ -217,7 +217,7 @@
       gn_command.append('--ninja-executable=autoninja')
       gn_command.append('--xcode-build-system=new')
       gn_command.append('--xcode-project=%s' % xcode_project_name)
-      gn_command.append('--xcode-additional-files-patterns=*.md')
+      gn_command.append('--xcode-additional-files-patterns=*.md;OWNERS')
       gn_command.append(
           '--xcode-additional-files-roots=' + ';'.join(ADDITIONAL_FILE_ROOTS))
       gn_command.append('--xcode-configs=' + ';'.join(SUPPORTED_CONFIGS))
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index ab598d8..a5f11e4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. ነባሪ የአሳሽ መተግበሪያን መታ ያድርጉ</translation>
 <translation id="2820289420301699633">የእርስዎ አስተዳዳሪ በChrome ላይ ቁጥጥር አለው እንዲሁም ውሂቡን መድረስ ይችላል</translation>
 <translation id="2830972654601096923">አድራሻዎችን ያቀናብሩ...</translation>
+<translation id="2834399722155632105">3. የይለፍ ቃል አማራጮችን መታ ያድርጉ</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />፣ <ph name="STATE" />፣ <ph name="URL" /></translation>
 <translation id="2843803966603263712">የትርጉም ቅንብሮችን ዳግም አስጀምር</translation>
 <translation id="2848086008667475748">በቅንብሮች ውስጥ ነባሪ ያድርጉ…</translation>
@@ -630,6 +631,7 @@
 <translation id="5899314093904173337">በአቅራቢያ ካሉ ሰዎች ጋር ለማጋራት ይህን የQR ኮድ በእነሱ ካሜራ ወይም የQR ቃኚ መተግበሪያ እንዲቃኙ ይፍቀዱላቸው</translation>
 <translation id="5911030830365207728">Google ትርጉም</translation>
 <translation id="5913600720976431809">ገጹን ለመተርጎም አማራጮች</translation>
+<translation id="5933515656458364246">በሁሉም መሣሪያዎች ላይ ውሂብዎን ያስምሩ።</translation>
 <translation id="5938160824633642847">ይህ መሣሪያ ሊሞላ ትንሽ ነው የቀረው። ቦታ ያስለቅቁና እንደገና ይሞክሩ።</translation>
 <translation id="5948291296578561264">ይህ ፎቶዎችን ወደ የፎቶ ቤተ-መጽሔፍትዎ እንዲያስቀምጡ ያስችልዎታል።</translation>
 <translation id="5951816930277761335">አገናኙን ያጋሩ</translation>
@@ -711,6 +713,7 @@
 
 የእርስዎ ውሂብ <ph name="TIME" /> ላይ በእርስዎ የስምረት የይለፍ ቃል ተመስጥሯል። ስምረትን ለመጀመር ያስገቡት።</translation>
 <translation id="6418346271604475326">ፒዲኤፍ በመዘጋጀት ላይ</translation>
+<translation id="6429213933892582367">የይለፍ ቃል አማራጮችን ይክፈቱ</translation>
 <translation id="6434591244308415567">አንድ ስህተት አጋጥሟል። ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="6435236283694032571">ወደ የንባብ ዝርዝር አክል</translation>
 <translation id="6439338047467462846">ሁሉንም ይፍቀዱ</translation>
@@ -826,6 +829,7 @@
 <translation id="7203585745079012652">መልሶችን ተመልሰህ ተናገር</translation>
 <translation id="7207023858769244910">በእርስዎ ዝንባሌዎች ላይ የተመሠረተ ይዘትን ለማግኘት ያስምሩ።</translation>
 <translation id="721597782417389033">ልክ ያልሆነ ቅጽል ስም</translation>
+<translation id="7221173315674413369">ምን አዲስ ነገር አለ ውስጥ አዳዲስ ባህሪያት እና ጠቃሚ ምክሮችን ያስሱ</translation>
 <translation id="722454870747268814">አዲስ ማንነት የማያሳውቅ ትር</translation>
 <translation id="7265758999917665941">ለዚህ ጣቢያ በጭራሽ</translation>
 <translation id="7272437679830969316">የእርስዎን ማንነት ማረጋገጥ አልተቻለም። የይለፍ ቃል አልተቀዳም።</translation>
@@ -859,6 +863,7 @@
 <translation id="7514365320538308">አውርድ</translation>
 <translation id="7531345132340165516">የአሁኑ ጣቢያ</translation>
 <translation id="7537586195939242955">ይቅርታ፣ በአሁኑ ጊዜ የእርስዎ ማለፊያ ወደ Passbook ሊጫን አይችልም።</translation>
+<translation id="7553234618121028547">ለማጥፋት <ph name="BEGIN_LINK" />ቅንብሮች<ph name="END_LINK" />ን ይክፈቱ እና ወደ የይለፍ ቃል አማራጮች ይሂዱ።</translation>
 <translation id="7554791636758816595">አዲስ ትር</translation>
 <translation id="7561196759112975576">ሁልጊዜ</translation>
 <translation id="7583004045319035904">የእርስዎን ማንነት የማያሳውቁ ትሮችን ለመከፈት <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> ይጠቀሙ።</translation>
@@ -939,6 +944,7 @@
 <translation id="8101409298456377967">በቀላሉ ወደ ጣቢያዎች እና መተግበሪያዎች መግባት እንዲችሉ የይለፍ ቃላትዎን ይፍጠሩ፣ ያስቀምጡ እና ያቀናብሩ <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">አጥፋ</translation>
 <translation id="8114753159095730575">ፋይል ለመውረድ ይገኛል። አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ።</translation>
+<translation id="81313319706244542">2. የይለፍ ቃሎችን መታ ያድርጉ</translation>
 <translation id="8132598642024322408">አሁን <ph name="PRICE" /> <ph name="PREVIOUS_PRICE" /> ነበር።</translation>
 <translation id="8156478151976189188">የይለፍ ቃል ስምረት እየሠራ አይደለም</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> መለያዎች</translation>
@@ -960,6 +966,7 @@
 <translation id="8319076807703933069">አዲስ ፍለጋ</translation>
 <translation id="8323906514956095947">ተጨማሪ የትር አማራጮችን ለማግኘት ነክተው ይያዙ</translation>
 <translation id="8328777765163860529">ሁሉንም ዝጋ</translation>
+<translation id="8343993175958086504">የእርስዎን ነገሮች ምትኬ ያስቀምጡ እና በማንኛውም መሣሪያ ላይ ይጠቀሙበት።</translation>
 <translation id="8378714024927312812">በእርስዎ ድርጅት የሚተዳደር</translation>
 <translation id="8386068868580335421">ዳግም አስጀምር</translation>
 <translation id="8407669440184693619">ለዚህ ጣቢያ ምንም የይለፍ ቃላት አልተገኙም</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
index 2de21a15..723d0fdc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -234,6 +234,7 @@
 <translation id="2815198996063984598">2- انقر على تطبيق المتصفِّح التلقائي.</translation>
 <translation id="2820289420301699633">‏يمكن لمشرفك التحكّم في Chrome والوصول إلى بياناته.</translation>
 <translation id="2830972654601096923">إدارة العناوين...</translation>
+<translation id="2834399722155632105">‏3‏. انقر على Password Options (خيارات كلمات المرور).</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />، <ph name="STATE" />، <ph name="URL" /></translation>
 <translation id="2843803966603263712">إعادة ضبط إعدادات الترجمة</translation>
 <translation id="2848086008667475748">الضبط كمتصفِّح تلقائي في "الإعدادات"…</translation>
@@ -372,6 +373,7 @@
 <translation id="3861486700625780712">إلغاء المتابعة</translation>
 <translation id="3863769054730344136">إرسال إلى أجهزتك</translation>
 <translation id="387280738075653372">‏يمكنك تنزيل Chrome هنا.</translation>
+<translation id="3888863481921783344">سيتم استخدام هذه البيانات لعرض المدعوين المحتملين إلى الحدث الخاص بك.</translation>
 <translation id="3892144330757387737">سيظهر لك السجلّ هنا</translation>
 <translation id="3897092660631435901">قائمة</translation>
 <translation id="3904829425754749514">أوقفت مؤسستك ميزة المزامنة. سيظل بإمكانك الاطّلاع على الإشارات المرجعية والسجلّ وكلمات المرور والإعدادات الأخرى على هذا الجهاز. وفي حال إجراء أي تغييرات، لن تتم مزامنتها مع حسابك.</translation>
@@ -634,6 +636,7 @@
 <translation id="5899314093904173337">يمكنك مشاركته مع المستخدمين القريبين من خلال السماح لهم بمسح رمز الاستجابة السريعة ضوئيًا باستخدام الكاميرا أو تطبيق ماسح رمز الاستجابة السريعة.</translation>
 <translation id="5911030830365207728">‏الترجمة من Google</translation>
 <translation id="5913600720976431809">خيارات ترجمة الصفحة</translation>
+<translation id="5933515656458364246">يمكنك مزامنة بياناتك على جميع الأجهزة.</translation>
 <translation id="5938160824633642847">جهازك ممتلئ تقريبًا. يمكنك إخلاء بعض المساحة وإعادة المحاولة.</translation>
 <translation id="5948291296578561264">يسمح لك ذلك بحفظ الصور في مكتبة صورك.</translation>
 <translation id="5951816930277761335">شارِك الرابط.</translation>
@@ -715,6 +718,7 @@
 
 تم ترميز بياناتك باستخدام عبارة مرور المزامنة في <ph name="TIME" />. أدخلها لبدء المزامنة.</translation>
 <translation id="6418346271604475326">‏جارٍ إعداد PDF</translation>
+<translation id="6429213933892582367">‏افتح Password Options (خيارات كلمات المرور).</translation>
 <translation id="6434591244308415567">حدث خطأ. يُرجى إعادة المحاولة لاحقًا.</translation>
 <translation id="6435236283694032571">الإضافة إلى "قائمة القراءة"</translation>
 <translation id="6439338047467462846">السماح بالكل</translation>
@@ -830,6 +834,7 @@
 <translation id="7203585745079012652">النطق بالإجابات</translation>
 <translation id="7207023858769244910">يمكنك تفعيل المزامنة للحصول على محتوى استنادًا إلى اهتماماتك.</translation>
 <translation id="721597782417389033">لقب البطاقة غير صالح</translation>
+<translation id="7221173315674413369">تعرَّف على ميزات ومعلومات جديدة في صفحة "الميزات الجديدة".</translation>
 <translation id="722454870747268814">علامة تبويب جديدة للتصفح المتخفي</translation>
 <translation id="7265758999917665941">عدم حفظ كلمة المرور لهذا الموقع الإلكتروني</translation>
 <translation id="7272437679830969316">تعذَّر التحقق من هويتك. لم يتم نسخ كلمة المرور.</translation>
@@ -863,6 +868,7 @@
 <translation id="7514365320538308">تنزيل</translation>
 <translation id="7531345132340165516">الموقع الإلكتروني الحالي</translation>
 <translation id="7537586195939242955">‏عذرًا، لا يمكن أن تكون بطاقتك مثبتة على Passbook في الوقت الحالي.</translation>
+<translation id="7553234618121028547">‏لإيقاف ميزة "الملء التلقائي"، افتح <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" /> (الإعدادات) ثم انتقِل إلى Password Options (خيارات كلمة المرور).</translation>
 <translation id="7554791636758816595">علامة تبويب جديدة</translation>
 <translation id="7561196759112975576">دومًا</translation>
 <translation id="7583004045319035904">يمكنك استخدام <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> لفتح علامات التبويب في وضع التصفّح المتخفي.</translation>
@@ -944,7 +950,9 @@
 <translation id="8101409298456377967">يمكنك إنشاء كلمات المرور الخاصة بحسابك وحفظها وإدارتها لتسجيل الدخول إلى المواقع الإلكترونية والتطبيقات بسهولة. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">إيقاف</translation>
 <translation id="8114753159095730575">أصبح بالإمكان تنزيل الملف. يمكنك مراجعة الخيارات في أسفل الشاشة.</translation>
+<translation id="81313319706244542">‏2‏. انقر على Passwords (كلمات المرور).</translation>
 <translation id="8132598642024322408">السعر الآن <ph name="PRICE" /> بعدما كان <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">‏سيتم استخدام هذه البيانات لإنشاء الأحداث في Apple Calendar (تطبيق "التقويم" من Apple) من Chrome و"عدسة Google".</translation>
 <translation id="8156478151976189188">ميزة "مزامنة كلمات المرور" لا تعمل حاليًا</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> من الحسابات</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />أجهزتك<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -965,6 +973,7 @@
 <translation id="8319076807703933069">بحث جديد</translation>
 <translation id="8323906514956095947">النقر مع الاستمرار لعرض المزيد من خيارات علامات التبويب</translation>
 <translation id="8328777765163860529">إغلاق الكل</translation>
+<translation id="8343993175958086504">يمكنك الاحتفاظ بنسخة احتياطية من بياناتك واستخدامها على أي جهاز.</translation>
 <translation id="8378714024927312812">بإدارة مؤسستك</translation>
 <translation id="8386068868580335421">إعادة ضبط</translation>
 <translation id="8407669440184693619">لم يتم العثور على كلمات مرور لهذا الموقع الإلكتروني</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb
index 0c5369f..cae0c7783 100644
--- a/ios/chrome/app/strings/resources/ios_strings_az.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Defolt Brauzer Tətbiqi seçiminə toxunun</translation>
 <translation id="2820289420301699633">Administrator Chrome'a nəzarət edir və oradakı dataya girişi var</translation>
 <translation id="2830972654601096923">Ünvanları İdarə Edin...</translation>
+<translation id="2834399722155632105">3. Parol Seçimlərinə toxunun</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Tərcümə Ayarlarını Sıfırlayın</translation>
 <translation id="2848086008667475748">Ayarlarda Defolt edin…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Yaxınlıqdakı insanlarla paylaşmaq üçün onlara bu QR kodu öz kameraları və ya QR skaner tətbiqi ilə skanlamaq icazəsi verin</translation>
 <translation id="5911030830365207728">Google Tərcümə</translation>
 <translation id="5913600720976431809">Səhifəni tərcümə etmək seçimləri</translation>
+<translation id="5933515656458364246">Datanızı bütün cihazlarda sinxronlaşdırın.</translation>
 <translation id="5938160824633642847">Cihaz doludur. Yer boşaldın və yenidən cəhd edin.</translation>
 <translation id="5948291296578561264">Bu fotoları foto kitabxanada saxlamağa icazə verir.</translation>
 <translation id="5951816930277761335">Keçidi paylaşın</translation>
@@ -713,6 +715,7 @@
 
 Datanız <ph name="TIME" /> tarixində sinxronizasiya parol sözü ilə şifrələndi. Sinxronizasiyanı başlamaq üçün onu daxil edin.</translation>
 <translation id="6418346271604475326">PDF hazırlanır</translation>
+<translation id="6429213933892582367">Parol Seçimlərini açın</translation>
 <translation id="6434591244308415567">Xəta baş verdi. Yenidən cəhd edin.</translation>
 <translation id="6435236283694032571">Oxu Siyahısına əlavə edin</translation>
 <translation id="6439338047467462846">Hamısına İcazə Verin</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Geri Cavab</translation>
 <translation id="7207023858769244910">Maraqlarınıza əsaslanan məzmun əldə etmək üçün sinxronizasiya edin.</translation>
 <translation id="721597782417389033">Yanlış Kart Ləqəbi</translation>
+<translation id="7221173315674413369">Yeniliklər bölməsində yeni funksiyaları və məsləhətləri araşdırın</translation>
 <translation id="722454870747268814">Yeni Gizli Panel</translation>
 <translation id="7265758999917665941">Bu sayt üçün heç vaxt yadda saxlamayın</translation>
 <translation id="7272437679830969316">Kimliyinizi doğrulamaq mümkün deyil. Parol kopyalanmayıb.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Endirmə</translation>
 <translation id="7531345132340165516">Cari sayt</translation>
 <translation id="7537586195939242955">Üzr istəyirik, Parolunuz indi Passbook'a yüklənilə bilmir.</translation>
+<translation id="7553234618121028547">Deaktiv etmək üçün <ph name="BEGIN_LINK" />Ayarları<ph name="END_LINK" /> açın və Parol Seçmlərinə keçin.</translation>
 <translation id="7554791636758816595">Yeni Panel</translation>
 <translation id="7561196759112975576">Həmişə</translation>
 <translation id="7583004045319035904">Anonim tabları kiliddən çıxarmaq üçün <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> istifadə edin.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Saytlara və tətbiqlərə asanlıqla daxil olmaq üçün parollarınızı yaradın, saxlayın və idarə edin/ <ph name="BEGIN_LINK" />Ətraflı məlumat<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Deaktiv Edin</translation>
 <translation id="8114753159095730575">Fayl endirilməsi əlçatandır. Seçimlər ekranın aşağısında əlçatandır.</translation>
+<translation id="81313319706244542">2. Parollara toxunun</translation>
 <translation id="8132598642024322408"><ph name="PREVIOUS_PRICE" /> olan məhsul indi <ph name="PRICE" /> qiymətinədir.</translation>
 <translation id="8136856065410661948">Bu, Chrome və Google Linzadan Apple Təqvimdə tədbirlər yaratmaq üçün istifadə olunacaq.</translation>
 <translation id="8156478151976189188">Parol Sinxronizasiyası İşləmir</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Yeni Axtarış</translation>
 <translation id="8323906514956095947">Əlavə tab seçimləri üçün basıb saxlayın</translation>
 <translation id="8328777765163860529">Hamısını Bağlayın</translation>
+<translation id="8343993175958086504">Elementləri yedəkləyin və istənilən cihazda istifadə edin.</translation>
 <translation id="8378714024927312812">Təşkilatınız tərəfindən idarə olunur</translation>
 <translation id="8386068868580335421">Sıfırlayın</translation>
 <translation id="8407669440184693619">Bu sayt üçün parol tapılmadı</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb
index f54e643..69e5ee7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Адпісацца</translation>
 <translation id="3863769054730344136">Адправіць на вашы прылады</translation>
 <translation id="387280738075653372">Спампуйце Chrome тут.</translation>
+<translation id="3888863481921783344">Гэта інфармацыя будзе выкарыстоўвацца, каб паказваць вам людзей, якіх можна запрасіць прыняць удзел у падзеі.</translation>
 <translation id="3892144330757387737">Ваша гісторыя знаходзіцца тут</translation>
 <translation id="3897092660631435901">Меню</translation>
 <translation id="3904829425754749514">Ваша арганізацыя выключыла сінхранізацыю. Як і раней, вы можаце праглядаць свае закладкі, гісторыю, паролі і іншыя налады на гэтай прыладзе. Зробленыя вамі змяненні не будуць сінхранізавацца з вашым уліковым запісам.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Выключыць</translation>
 <translation id="8114753159095730575">Файл даступны для спампоўвання. Параметры знаходзяцца ў ніжняй частцы экрана.</translation>
 <translation id="8132598642024322408">Цяпер: <ph name="PRICE" />, раней: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Гэта інфармацыя будзе выкарыстоўвацца для стварэння падзей у Apple Calendar непасрэдна з Chrome і Google Аб'ектыва.</translation>
 <translation id="8156478151976189188">Сінхранізацыя пароляў не працуе</translation>
 <translation id="8157532349231307196">Уліковых запісаў: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Вашы прылады<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
index 04a8dc3..6f4d3315 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Прекратяване на следенето</translation>
 <translation id="3863769054730344136">Изпращане до устройствата ви</translation>
 <translation id="387280738075653372">Изтеглете Chrome оттук.</translation>
+<translation id="3888863481921783344">Това ще даде възможност да се покаже кого бихте могли да поканите на събитието си.</translation>
 <translation id="3892144330757387737">Тук ще се показва историята ви</translation>
 <translation id="3897092660631435901">Меню</translation>
 <translation id="3904829425754749514">Организацията ви изключи синхронизирането. Пак можете да преглеждате отметките, историята, паролите и другите си настройки на това устройство. В случай че направите промени, те няма да се синхронизират с профила ви.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Изключване</translation>
 <translation id="8114753159095730575">Наличен е файл за изтегляне. Съответните опции са достъпни в долната част на екрана.</translation>
 <translation id="8132598642024322408">Сега цената е <ph name="PRICE" />, беше <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Това ще даде възможност за създаване на събития в Apple Calendar чрез съдържание от Chrome и Google Обектив.</translation>
 <translation id="8156478151976189188">Синхронизирането на паролите не работи</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> профила</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Вашите устройства<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index 3019be1..3c27c53e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Deixa de seguir</translation>
 <translation id="3863769054730344136">Envia als teus dispositius</translation>
 <translation id="387280738075653372">Baixa Chrome aquí.</translation>
+<translation id="3888863481921783344">S'utilitzarà per mostrar-te els possibles convidats al teu esdeveniment.</translation>
 <translation id="3892144330757387737">Trobaràs l'historial aquí</translation>
 <translation id="3897092660631435901">Menú</translation>
 <translation id="3904829425754749514">La teva organització ha desactivat la sincronització. Encara pots veure les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració en aquest dispositiu. Si fas canvis, no se sincronitzaran amb el teu compte.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Desactiva</translation>
 <translation id="8114753159095730575">La baixada de fitxers està disponible. Opcions disponibles a la part inferior de la pantalla.</translation>
 <translation id="8132598642024322408">Ara val <ph name="PRICE" />, abans valia <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">S'utilitzarà per crear esdeveniments al teu Calendari d'Apple des de Chrome i Google Lens.</translation>
 <translation id="8156478151976189188">La sincronització de contrasenyes no funciona</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> comptes</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Els teus dispositius<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index 6d0310bc..ed2b122 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Ukončit sledování</translation>
 <translation id="3863769054730344136">Odeslat na vaše zařízení</translation>
 <translation id="387280738075653372">Stáhněte si Chrome zde.</translation>
+<translation id="3888863481921783344">Tento údaj slouží k zobrazení možných hostů k pozvání na událost.</translation>
 <translation id="3892144330757387737">Zde najdete svou historii</translation>
 <translation id="3897092660631435901">Nabídka</translation>
 <translation id="3904829425754749514">Vaše organizace vypnula synchronizaci. Záložky, historii, hesla a další nastavení na tomto zařízení nadále uvidíte. Pokud provedete nějaké změny, nesynchronizují se do účtu.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Vypnout</translation>
 <translation id="8114753159095730575">Je k dispozici soubor ke stažení. Možnosti jsou k dispozici ve spodní části obrazovky.</translation>
 <translation id="8132598642024322408">Nyní <ph name="PRICE" />, dříve <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Tyto údaje poslouží k vytváření událostí v Kalendáři Apple z Chromu a Google Lens.</translation>
 <translation id="8156478151976189188">Synchronizace hesel nefunguje</translation>
 <translation id="8157532349231307196">Účty: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Vaše zařízení<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
index 02225a2f..63286ff2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Peidio â dilyn</translation>
 <translation id="3863769054730344136">Anfon at Eich Dyfeisiau</translation>
 <translation id="387280738075653372">Lawrlwythwch Chrome yma.</translation>
+<translation id="3888863481921783344">Bydd hwn yn cael ei ddefnyddio i ddangos i chi wahoddedigion posib i'ch digwyddiad.</translation>
 <translation id="3892144330757387737">Byddwch yn gweld eich hanes yma</translation>
 <translation id="3897092660631435901">Dewislen</translation>
 <translation id="3904829425754749514">Mae eich sefydliad wedi diffodd cysoni. Gallwch weld eich nodau tudalen, eich hanes, eich cyfrineiriau a'ch gosodiadau eraill ar y ddyfais hon o hyd. Os byddwch yn gwneud newidiadau, ni fyddant yn cysoni i'ch cyfrif.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Diffodd</translation>
 <translation id="8114753159095730575">Mae lawrlwytho ffeiliau ar gael. Mae dewisiadau ar gael ger gwaelod y sgrîn.</translation>
 <translation id="8132598642024322408">Bellach yn <ph name="PRICE" />. Roedd yn <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Bydd hwn yn cael ei ddefnyddio i greu digwyddiadau yn eich Apple Calendar o Chrome a Google Lens.</translation>
 <translation id="8156478151976189188">Nid yw Cysoni Cyfrineiriau yn Gweithio</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> o gyfrifon</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Eich dyfeisiau<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index a507323..5345833 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Tryk på Standardbrowserapp</translation>
 <translation id="2820289420301699633">Din administrator har kontrol over Chrome og har adgang til browserens data</translation>
 <translation id="2830972654601096923">Administrer adresser...</translation>
+<translation id="2834399722155632105">3. Tryk på Valgmuligheder for adgangskoder</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Nulstil oversættelsesindstillinger</translation>
 <translation id="2848086008667475748">Angiv som standard i Indstillinger…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Du kan dele med folk i nærheden ved at få dem til at scanne denne QR-kode med deres kamera eller app til scanning af QR-koder</translation>
 <translation id="5911030830365207728">Google Oversæt</translation>
 <translation id="5913600720976431809">Valgmuligheder for oversættelse af side</translation>
+<translation id="5933515656458364246">Synkroniser dine data på alle enheder.</translation>
 <translation id="5938160824633642847">Din enhed er ved at løbe tør for plads. Frigør plads, og prøv igen.</translation>
 <translation id="5948291296578561264">Dermed kan du gemme fotos i din fotosamling.</translation>
 <translation id="5951816930277761335">Del linket</translation>
@@ -713,6 +715,7 @@
 
 Dine data blev krypteret med din adgangssætning til synkronisering d. <ph name="TIME" />. Angiv adgangssætningen for at starte synkroniseringen.</translation>
 <translation id="6418346271604475326">Forbereder PDF</translation>
+<translation id="6429213933892582367">Åbn Valgmuligheder for adgangskoder</translation>
 <translation id="6434591244308415567">Der opstod en fejl. Prøv igen senere.</translation>
 <translation id="6435236283694032571">Føj til læselisten</translation>
 <translation id="6439338047467462846">Tillad alle</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Giv talte svar</translation>
 <translation id="7207023858769244910">Synkroniser for at få indhold baseret på dine interesser.</translation>
 <translation id="721597782417389033">Kortets kaldenavn er ugyldigt</translation>
+<translation id="7221173315674413369">Se nye funktioner og tips i Nyheder</translation>
 <translation id="722454870747268814">Ny inkognitofane</translation>
 <translation id="7265758999917665941">Aldrig for dette website</translation>
 <translation id="7272437679830969316">Din identitet kunne ikke bekræftes. Adgangskoden blev ikke kopieret.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Download</translation>
 <translation id="7531345132340165516">Aktuelt website</translation>
 <translation id="7537586195939242955">Din adgangssætning kan ikke installeres på Passbook lige nu.</translation>
+<translation id="7553234618121028547">Du kan deaktivere funktionen ved at åbne <ph name="BEGIN_LINK" />Indstillinger<ph name="END_LINK" /> og gå til Valgmuligheder for adgangskoder.</translation>
 <translation id="7554791636758816595">Ny fane</translation>
 <translation id="7561196759112975576">Altid</translation>
 <translation id="7583004045319035904">Brug <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> til at låse dine inkognitofaner op.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Opret, gem og administrer dine adgangskoder, så du nemt kan logge ind på websites og i apps. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Deaktiver</translation>
 <translation id="8114753159095730575">Filer kan downloades. Se valgmulighederne nederst på skærmen.</translation>
+<translation id="81313319706244542">2. Tryk på Adgangskoder</translation>
 <translation id="8132598642024322408">Koster nu <ph name="PRICE" />. Førprisen var <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Dette bruges til at oprette begivenheder i din Apple Kalender via Chrome og Google Lens.</translation>
 <translation id="8156478151976189188">Password Sync fungerer ikke</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Ny søgning</translation>
 <translation id="8323906514956095947">Tryk og hold nede for at se flere faneindstillinger</translation>
 <translation id="8328777765163860529">Luk alt</translation>
+<translation id="8343993175958086504">Sikkerhedskopiér dit indhold, og få adgang til det på enhver enhed.</translation>
 <translation id="8378714024927312812">Administreret af din organisation</translation>
 <translation id="8386068868580335421">Nulstil</translation>
 <translation id="8407669440184693619">Der blev ikke fundet nogen adgangskoder til dette website</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index 27219b79..8005509 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Nicht mehr folgen</translation>
 <translation id="3863769054730344136">An meine Geräte senden</translation>
 <translation id="387280738075653372">Hier kannst du Chrome herunterladen.</translation>
+<translation id="3888863481921783344">Dadurch werden dir Personen angezeigt, die du zu deinem Termin einladen kannst.</translation>
 <translation id="3892144330757387737">Hier wird dein Verlauf angezeigt</translation>
 <translation id="3897092660631435901">Menü</translation>
 <translation id="3904829425754749514">Deine Organisation hat die Synchronisierung deaktiviert. Du siehst weiterhin deine Lesezeichen, den Verlauf, deine Passwörter und andere Einstellungen auf diesem Gerät. Änderungen werden aber nicht mehr mit deinem Konto synchronisiert.</translation>
@@ -940,6 +941,7 @@
 <translation id="8105368624971345109">Deaktivieren</translation>
 <translation id="8114753159095730575">Dateidownload verfügbar. Optionen stehen unten auf dem Bildschirm zur Verfügung.</translation>
 <translation id="8132598642024322408">Jetzt: <ph name="PRICE" /> – zuvor: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Dadurch kannst du in deinem Apple-Kalender Termine anhand von Inhalten aus Chrome und Google Lens erstellen.</translation>
 <translation id="8156478151976189188">Die Passwortsynchronisierung funktioniert nicht</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> Konten</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Meine Geräte<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index e68d8ed2..75c1c5e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -371,6 +371,7 @@
 <translation id="3861486700625780712">Κατάργηση παρακολούθησης</translation>
 <translation id="3863769054730344136">Αποστολή στις συσκευές σας</translation>
 <translation id="387280738075653372">Κατεβάστε το Chrome εδώ.</translation>
+<translation id="3888863481921783344">Αυτό θα χρησιμοποιηθεί για την εμφάνιση πιθανών προσκεκλημένων στο συμβάν σας.</translation>
 <translation id="3892144330757387737">Εδώ θα βρείτε το ιστορικό σας</translation>
 <translation id="3897092660631435901">Μενού</translation>
 <translation id="3904829425754749514">Ο συγχρονισμός απενεργοποιήθηκε από τον οργανισμό σας. Μπορείτε ακόμη να δείτε τους σελιδοδείκτες, το ιστορικό, τους κωδικούς πρόσβασης και άλλες ρυθμίσεις σε αυτήν τη συσκευή. Εάν πραγματοποιήσετε αλλαγές, δεν θα συγχρονιστούν στον λογαριασμό σας.</translation>
@@ -949,6 +950,7 @@
 <translation id="8114753159095730575">Η λήψη του αρχείου είναι διαθέσιμη. Οι διαθέσιμες επιλογές βρίσκονται κοντά στο κάτω μέρος της οθόνης.</translation>
 <translation id="81313319706244542">2. Πατήστε Κωδικοί πρόσβασης</translation>
 <translation id="8132598642024322408">Τώρα <ph name="PRICE" /> από <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Αυτό θα χρησιμοποιηθεί για τη δημιουργία συμβάντων στο Ημερολόγιο Apple από το Chrome και το Google Lens.</translation>
 <translation id="8156478151976189188">Ο συγχρονισμός κωδικών πρόσβασης δεν λειτουργεί</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> λογαριασμοί</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Οι συσκευές σας<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
index a84fd64c..7a1bad56 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -87,6 +87,7 @@
 <translation id="1545749641540134597">Scan QR Code</translation>
 <translation id="1552525382687785070">Sync is disabled by your administrator</translation>
 <translation id="1554477036522844996">New window</translation>
+<translation id="1565371473877914088">New incognito tab</translation>
 <translation id="1580715474678097352">Stay protected from dangerous websites</translation>
 <translation id="1580783302095112590">Mail sent.</translation>
 <translation id="1582732959743469162">This will stop all progress for your current download.</translation>
@@ -133,6 +134,7 @@
 <translation id="1981118202195772574">Mobile</translation>
 <translation id="1989112275319619282">Browse</translation>
 <translation id="199425419756152024">View password</translation>
+<translation id="2010008505735295285">Reload</translation>
 <translation id="2015722694326466240">To see passwords, you must first set a passcode on your device.</translation>
 <translation id="2021670401941426298">See your search engine’s instructions for deleting your search history, if applicable.</translation>
 <translation id="202292859882676807">Microphone access allowed</translation>
@@ -299,6 +301,7 @@
 <translation id="3272527697863656322">Cancel</translation>
 <translation id="3277021493514034324">Site address copied</translation>
 <translation id="3285962946108803577">Share page…</translation>
+<translation id="3289505634533552500">Voice search</translation>
 <translation id="3290875554372353449">Choose an Account</translation>
 <translation id="3305294846493618482">more</translation>
 <translation id="3311748811247479259">Off</translation>
@@ -556,6 +559,7 @@
 <translation id="5295239312320826323">Remove account <ph name="USER_EMAIL" />?</translation>
 <translation id="5300589172476337783">Show</translation>
 <translation id="5317780077021120954">Save</translation>
+<translation id="5318298563956633672">You're already tracking this product.</translation>
 <translation id="5339316356165661760">Turn on sync</translation>
 <translation id="536067926684072644">Show Bookmarks</translation>
 <translation id="5360976571138293719">For more settings that relate to privacy, security and data collection, see <ph name="BEGIN_LINK" />Google Services<ph name="END_LINK" />.</translation>
@@ -619,6 +623,7 @@
 <translation id="581659025233126501">Turn On Sync</translation>
 <translation id="5819208479324046259">Managed by <ph name="MANAGER" />. <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation>
 <translation id="5833643789537100742">Save passwords, payment methods and addresses for Chrome to auto-fill later.</translation>
+<translation id="5834415013958049700">Lens image that you copied</translation>
 <translation id="5846482154967366008">Search Engine</translation>
 <translation id="5854790677617711513">Older than 30 days</translation>
 <translation id="5857090052475505287">New Folder</translation>
@@ -646,6 +651,7 @@
 <translation id="5984222099446776634">Recently Visited</translation>
 <translation id="5988097621740394599">See price drops on your tabs.</translation>
 <translation id="5988851877894965432">Open URLs in Chrome</translation>
+<translation id="6006672969046233841">New tab</translation>
 <translation id="6012140227487808125">Encrypting…</translation>
 <translation id="6021332621416007159">Open in...</translation>
 <translation id="6027945736510816438">Did you mean <ph name="WEBSITE" />?</translation>
@@ -832,6 +838,7 @@
 <translation id="7207023858769244910">Sync to get content based on your interests.</translation>
 <translation id="721597782417389033">Invalid card nickname</translation>
 <translation id="7221173315674413369">Explore new features and tips in 'What’s new'</translation>
+<translation id="7223102419539744003">Close tab</translation>
 <translation id="722454870747268814">New incognito tab</translation>
 <translation id="7265758999917665941">Never for this site</translation>
 <translation id="7272437679830969316">Can't verify your identity. Password not copied.</translation>
@@ -903,6 +910,7 @@
 <translation id="7856733331829174190">Couldn't download</translation>
 <translation id="785938070103630874">Open passwords, payment methods or address and more</translation>
 <translation id="7859704718976024901">Browsing history</translation>
+<translation id="7870750252270996949">Lens copied image</translation>
 <translation id="7879275349003161544">Show downloads</translation>
 <translation id="7884694604461143138">Search history (<ph name="COUNT" /> found)</translation>
 <translation id="7887198238286927132">To protect your privacy, Chrome will not auto-fill this field.</translation>
@@ -1027,6 +1035,7 @@
 <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation>
 <translation id="8810413591309742901">Default site view</translation>
 <translation id="8820817407110198400">Bookmarks</translation>
+<translation id="882557203579758546">Find in page…</translation>
 <translation id="8840513115188359703">You won't be signed out of your Google Account.</translation>
 <translation id="8843129975935593190">Your organisation limits what you can sync.</translation>
 <translation id="8849001918648564819">Hidden</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index 88defcf..6dde1f1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Dejar de seguir</translation>
 <translation id="3863769054730344136">Enviar a tus dispositivos</translation>
 <translation id="387280738075653372">Descarga Chrome aquí.</translation>
+<translation id="3888863481921783344">Se utilizará para mostrarte posibles invitados para tu evento.</translation>
 <translation id="3892144330757387737">Aquí encontrarás tu historial</translation>
 <translation id="3897092660631435901">Menú</translation>
 <translation id="3904829425754749514">Tu organización desactivó la sincronización. Podrás seguir viendo tus favoritos, el historial, las contraseñas y otras opciones de configuración en este dispositivo. Si realizas cambios, no se sincronizarán con tu cuenta.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Desactivar</translation>
 <translation id="8114753159095730575">El archivo ya se puede descargar. Las opciones disponibles se muestran junto a la parte inferior de la pantalla.</translation>
 <translation id="8132598642024322408">El precio actual es <ph name="PRICE" />; antes costaba <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Se usará para crear eventos en el Calendario de Apple desde Chrome y Google Lens.</translation>
 <translation id="8156478151976189188">No funciona la Sincronización de contraseñas.</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> cuentas</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Tus dispositivos<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index d2f0093..c865940 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Dejar de seguir</translation>
 <translation id="3863769054730344136">Enviar a tus dispositivos</translation>
 <translation id="387280738075653372">Descarga Chrome aquí.</translation>
+<translation id="3888863481921783344">Se usará para mostrarte posibles invitados a tu evento.</translation>
 <translation id="3892144330757387737">Aquí verás tu historial</translation>
 <translation id="3897092660631435901">Menú</translation>
 <translation id="3904829425754749514">Tu organización ha desactivado la sincronización. Podrás seguir viendo tus marcadores, el historial, las contraseñas y otros ajustes en este dispositivo. Si realizas cambios, no se sincronizarán con tu cuenta.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Desactivar</translation>
 <translation id="8114753159095730575">La descarga de archivos está disponible. Hay opciones disponibles en la parte inferior de la pantalla.</translation>
 <translation id="8132598642024322408">Ahora por <ph name="PRICE" />. Antes por <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Se usará para crear eventos en tu calendario de Apple a partir de contenido de Chrome y Google Lens.</translation>
 <translation id="8156478151976189188">Sincronización de contraseñas no funciona</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> cuentas</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Tus dispositivos<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index dbd0b0b..4492432 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Lõpeta jälgimine</translation>
 <translation id="3863769054730344136">Saatmine teie seadmetesse</translation>
 <translation id="387280738075653372">Laadige Chrome alla siin.</translation>
+<translation id="3888863481921783344">Seda kasutatakse teile nende kontaktide näitamiseks, keda soovite võib-olla sündmusele kutsuda.</translation>
 <translation id="3892144330757387737">Leiate oma ajaloo siit</translation>
 <translation id="3897092660631435901">Menüü</translation>
 <translation id="3904829425754749514">Teie organisatsioon lülitas sünkroonimise välja. Näete selles seadmes endiselt oma järjehoidjaid, ajalugu, paroole ja muid seadeid. Muudatuste tegemisel neid teie kontoga ei sünkroonita.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Lülita välja</translation>
 <translation id="8114753159095730575">Allalaaditav fail on saadaval. Valikud kuvatakse ekraani alaosas.</translation>
 <translation id="8132598642024322408">Nüüd on <ph name="PRICE" />, enne oli <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Seda kasutatakse Chrome'i ja Google Lensi kaudu teie Apple'i rakenduses Calendar sündmuste loomiseks.</translation>
 <translation id="8156478151976189188">Paroolide sünkroonimine ei tööta</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> kontot</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Teie seadmed<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
index 05eb6cc..610fde81 100644
--- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Utzi jarraitzeari</translation>
 <translation id="3863769054730344136">Bidali zure gailuetara</translation>
 <translation id="387280738075653372">Deskargatu Chrome hemen.</translation>
+<translation id="3888863481921783344">Agian gertaerara gonbidatu nahi dituzun pertsonak erakusteko erabiliko da hau.</translation>
 <translation id="3892144330757387737">Historia aurkituko duzu hemen</translation>
 <translation id="3897092660631435901">Menua</translation>
 <translation id="3904829425754749514">Erakundeak sinkronizazioa desaktibatu du. Gailuan dituzu oraindik laster-markak, historia, pasahitzak eta bestelako ezarpenak. Aldaketarik eginez gero, ez dira sinkronizatuko kontuarekin.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Desaktibatu</translation>
 <translation id="8114753159095730575">Fitxategi bat deskargatzeko prest dago. Pantailaren behealdean agertzen dira horretarako aukerak.</translation>
 <translation id="8132598642024322408">Orain: <ph name="PRICE" /> (aurreko prezioa: <ph name="PREVIOUS_PRICE" />)</translation>
+<translation id="8136856065410661948">Chrome-ren eta Google Lens-en bidez Apple Calendar-en gertaerak sortzeko erabiliko da hau.</translation>
 <translation id="8156478151976189188">Pasahitzen sinkronizazioa ez dabil</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> kontu</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Zure gailuak<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index 49d8d82..4e983ef6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Lopeta seuraaminen</translation>
 <translation id="3863769054730344136">Laitteille lähettäminen</translation>
 <translation id="387280738075653372">Lataa Chrome täältä.</translation>
+<translation id="3888863481921783344">Sinulle näytetään mahdollisia osallistujia tapahtumaan.</translation>
 <translation id="3892144330757387737">Näet historiasi täällä</translation>
 <translation id="3897092660631435901">Valikko</translation>
 <translation id="3904829425754749514">Organisaatiosi on laittanut synkronoinnin pois päältä. Voit edelleen nähdä kirjanmerkit, historian, salasanat ja muut asetukset tällä laitteella. Jos teet muutoksia, niitä ei synkronoida tilillesi.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Poista käytöstä</translation>
 <translation id="8114753159095730575">Ladattava tiedosto on saatavilla. Ruudun alaosassa on käytettävissä valintoja.</translation>
 <translation id="8132598642024322408">Hinta nyt <ph name="PRICE" />, ennen <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Käytetään Apple-kalenterin tapahtumien luomiseen Chromesta ja Google Lensistä.</translation>
 <translation id="8156478151976189188">Salasanojen synkronointi ei toimi</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> tiliä</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Omat laitteet<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index 771145f..a328b9a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Se désabonner</translation>
 <translation id="3863769054730344136">Envoyer à vos appareils</translation>
 <translation id="387280738075653372">Téléchargez Chrome ici.</translation>
+<translation id="3888863481921783344">Cela permettra d'afficher les participants potentiels à votre événement.</translation>
 <translation id="3892144330757387737">Votre historique s'affichera ici</translation>
 <translation id="3897092660631435901">Menu</translation>
 <translation id="3904829425754749514">Votre organisation a désactivé la synchronisation. Vos favoris, historique, mots de passe et autres paramètres resteront accessibles sur cet appareil, mais les modifications ne seront pas synchronisées avec votre compte.</translation>
@@ -943,6 +944,7 @@
 <translation id="8105368624971345109">Désactiver</translation>
 <translation id="8114753159095730575">Vous pouvez télécharger des fichiers. Différentes options sont disponibles au bas de l'écran.</translation>
 <translation id="8132598642024322408"><ph name="PRICE" /> (précédemment à <ph name="PREVIOUS_PRICE" />).</translation>
+<translation id="8136856065410661948">Cela permettra de créer des événements dans votre calendrier Apple à partir de Chrome et de Google Lens.</translation>
 <translation id="8156478151976189188">Password Sync ne fonctionne pas</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> comptes</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Vos appareils<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
index 28849889..6bac360 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Deixar de seguir</translation>
 <translation id="3863769054730344136">Enviar aos teus dispositivos</translation>
 <translation id="387280738075653372">Descarga Chrome aquí.</translation>
+<translation id="3888863481921783344">Usarase para mostrarche posibles invitados ao teu evento.</translation>
 <translation id="3892144330757387737">Aquí atoparás o teu historial</translation>
 <translation id="3897092660631435901">Menú</translation>
 <translation id="3904829425754749514">A túa organización desactivou a sincronización. Podes seguir vendo os marcadores, o historial, os contrasinais e o resto das opcións de configuración que teñas neste dispositivo. Se fas cambios, non se sincronizarán coa túa conta.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Desactivar</translation>
 <translation id="8114753159095730575">Podes descargar ficheiros. Tes opcións dispoñibles na parte inferior da pantalla.</translation>
 <translation id="8132598642024322408">Agora: <ph name="PRICE" />. Antes: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Usarase para crear eventos no teu calendario de Apple desde Chrome e Google Lens.</translation>
 <translation id="8156478151976189188">A sincronización de contrasinais non funciona</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> contas</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Os teus dispositivos<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index c979dff4..81d4def70 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">અનફૉલો કરો</translation>
 <translation id="3863769054730344136">તમારા બધા ડિવાઇસ પર મોકલો</translation>
 <translation id="387280738075653372">અહીં Chrome ડાઉનલોડ કરો.</translation>
+<translation id="3888863481921783344">તમારી ઇવેન્ટ માટે તમને સંભવિત આમંત્રિતો બતાવવા માટે, આનો ઉપયોગ કરવામાં આવશે.</translation>
 <translation id="3892144330757387737">તમને તમારો ઇતિહાસ અહીં મળશે</translation>
 <translation id="3897092660631435901">મેનૂ</translation>
 <translation id="3904829425754749514">તમારી સંસ્થાએ સિંક બંધ કર્યું છે. તમે હજુ પણ આ ડિવાઇસ પરના તમારા બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને અન્ય સેટિંગ જોઈ શકો છો. જો તમે ફેરફારો કરશો, તો તે તમારા એકાઉન્ટ સાથે સિંક કરવામાં આવશે નહીં.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">બંધ કરો</translation>
 <translation id="8114753159095730575">ફાઇલ ડાઉનલોડ માટે ઉપલબ્ધ છે. સ્ક્રીનના તળિયે વિકલ્પો ઉપલબ્ધ છે.</translation>
 <translation id="8132598642024322408">હવે <ph name="PRICE" /> છે, પહેલાં <ph name="PREVIOUS_PRICE" /> હતી.</translation>
+<translation id="8136856065410661948">Chrome અને Google Lensમાંથી તમારા Apple Calendarમાં ઇવેન્ટ બનાવવા માટે, આનો ઉપયોગ કરવામાં આવશે.</translation>
 <translation id="8156478151976189188">પાસવર્ડ સિંક કાર્ય કરતું નથી</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> એકાઉન્ટ્સ</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />તમારા ડિવાઇસ<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 65cd676..46aad35e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -371,6 +371,7 @@
 <translation id="3861486700625780712">Prestani pratiti</translation>
 <translation id="3863769054730344136">Pošaljite na svoje uređaje</translation>
 <translation id="387280738075653372">Ovdje preuzmite Chrome.</translation>
+<translation id="3888863481921783344">To će se upotrebljavati da bi vam se prikazale osobe koje se mogu pozvati na vaš događaj.</translation>
 <translation id="3892144330757387737">Ovdje ćete pronaći svoju povijest</translation>
 <translation id="3897092660631435901">Izbornik</translation>
 <translation id="3904829425754749514">Vaša je organizacija isključila sinkronizaciju. Vaše oznake, povijest, zaporke i druge postavke i dalje su vam vidljive na ovom uređaju. Ako nešto promijenite, te se promjene neće sinkronizirati s vašim računom.</translation>
@@ -948,6 +949,7 @@
 <translation id="8114753159095730575">Dostupno je preuzimanje datoteka. Opcije su dostupne pri dnu zaslona.</translation>
 <translation id="81313319706244542">2. Dodirnite Zaporke</translation>
 <translation id="8132598642024322408">Sad <ph name="PRICE" /> umjesto <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">To će se upotrebljavati za izradu događaja u vašem Apple kalendaru iz Chromea i Google objektiva.</translation>
 <translation id="8156478151976189188">Sinkronizacija zaporki ne radi</translation>
 <translation id="8157532349231307196">Broj računa: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Vaši uređaji<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index bf757f3..e4cdbc1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Koppintson az Alapértelmezett böngésző lehetőségre.</translation>
 <translation id="2820289420301699633">A Chrome a rendszergazda irányítása alatt van, aki hozzáférhet a hozzá tartozó adatokhoz is</translation>
 <translation id="2830972654601096923">Címek kezelése…</translation>
+<translation id="2834399722155632105">3. Koppintson a Jelszóbeállítások lehetőségre.</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">A Fordító beállításainak visszaállítása</translation>
 <translation id="2848086008667475748">Beállítás alapértelmezettként a Beállításokban</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Követés megszüntetése</translation>
 <translation id="3863769054730344136">Küldés a saját eszközökre</translation>
 <translation id="387280738075653372">Itt letöltheti a Chrome-ot.</translation>
+<translation id="3888863481921783344">Ennek köszönhetően tudja majd megjeleníteni a lehetséges meghívottakat az eseményéhez.</translation>
 <translation id="3892144330757387737">Itt láthatja majd az előzményeit</translation>
 <translation id="3897092660631435901">Menü</translation>
 <translation id="3904829425754749514">A szervezete kikapcsolta a szinkronizálást. Továbbra is láthatja könyvjelzőit, előzményeit, jelszavait és más beállításait ezen az eszközön. A módosítások azonban nem szinkronizálódnak az Ön fiókjába.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">Ha szeretné engedélyezni a megosztást a közelben lévő személyekkel, a Kamera vagy QR-kódok olvasására szolgáló alkalmazás segítségével olvastassa be velük ezt a QR-kódot</translation>
 <translation id="5911030830365207728">Google Fordító</translation>
 <translation id="5913600720976431809">Az oldal lefordításával kapcsolatos beállítások</translation>
+<translation id="5933515656458364246">Az összes eszközén szinkronizálhatja adatait.</translation>
 <translation id="5938160824633642847">Az eszköz tárhelye majdnem megtelt. Szabadítson fel helyet, és próbálja újra.</translation>
 <translation id="5948291296578561264">Segítségével fotókat menthet a fotótárba.</translation>
 <translation id="5951816930277761335">Ossza meg a linket</translation>
@@ -712,6 +715,7 @@
 
 Adatainak titkosítása megtörtént összetett szinkronizálási jelszavával a következő időpontban: <ph name="TIME" />. Adja meg a jelszót a szinkronizálás megkezdéséhez.</translation>
 <translation id="6418346271604475326">PDF előkészítése</translation>
+<translation id="6429213933892582367">A Jelszóbeállítások megnyitása</translation>
 <translation id="6434591244308415567">Hiba történt, próbálja újra később.</translation>
 <translation id="6435236283694032571">Hozzáadás az Olvasólistához</translation>
 <translation id="6439338047467462846">Összes engedélyezése</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Mondja ki a válaszokat</translation>
 <translation id="7207023858769244910">Szinkronizáljon, ha az érdeklődési körein alapuló tartalmakat szeretne látni.</translation>
 <translation id="721597782417389033">Érvénytelen egyedi kártyanév</translation>
+<translation id="7221173315674413369">Az Újdonságok szakaszban új funkciókat és tippeket találhat</translation>
 <translation id="722454870747268814">Új inkognitó lap</translation>
 <translation id="7265758999917665941">Ezen a webhelyen soha</translation>
 <translation id="7272437679830969316">Nem sikerült ellenőrizni a személyazonosságát. A jelszó nem lett másolva.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">Letöltés</translation>
 <translation id="7531345132340165516">Jelenlegi webhely</translation>
 <translation id="7537586195939242955">Sajnos jelenleg nem lehet létrehozni a kupont a Passbookban.</translation>
+<translation id="7553234618121028547">A kikapcsoláshoz nyissa meg a <ph name="BEGIN_LINK" />Beállítások<ph name="END_LINK" /> menüt, és lépjen a Jelszóbeállítások ponthoz.</translation>
 <translation id="7554791636758816595">Új lap</translation>
 <translation id="7561196759112975576">Mindig</translation>
 <translation id="7583004045319035904">Az inkognitó lapok zárolását <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> használatával oldhatja fel.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Létrehozhat, menthet és kezelhet jelszavakat, hogy egyszerűen be tudjon jelentkezni a webhelyekre és az alkalmazásokba. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation>
 <translation id="8105368624971345109">Kikapcsolás</translation>
 <translation id="8114753159095730575">A fájlletöltés megvalósítható. A beállításokat a képernyő alján nyithatja meg.</translation>
+<translation id="81313319706244542">2. Koppintson a Jelszavak elemre.</translation>
 <translation id="8132598642024322408">Most <ph name="PRICE" />, korábban <ph name="PREVIOUS_PRICE" /> volt.</translation>
+<translation id="8136856065410661948">Így tud majd Apple Naptár-eseményeket létrehozni a Chrome és a Google Lens használatával.</translation>
 <translation id="8156478151976189188">Nem működik a jelszavak szinkronizálása</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> fiók</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Saját eszközök<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Új keresés</translation>
 <translation id="8323906514956095947">Nyomva tartva további lapbeállításokat láthat</translation>
 <translation id="8328777765163860529">Összes bezárása</translation>
+<translation id="8343993175958086504">Biztonsági másolatot készíthet adatairól, és bármely eszközön használatja őket.</translation>
 <translation id="8378714024927312812">Az Ön szervezete kezeli</translation>
 <translation id="8386068868580335421">Visszaállítás</translation>
 <translation id="8407669440184693619">Nem található jelszó a webhelyhez</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
index 0fde2da..37e500e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Չհետևել</translation>
 <translation id="3863769054730344136">Ուղարկել սեփական սարքերին</translation>
 <translation id="387280738075653372">Ներբեռնեք Chrome-ն այստեղ։</translation>
+<translation id="3888863481921783344">Սա կօգտագործվի՝ ցույց տալու ձեր միջոցառմանը հնարավոր հրավիրված օգտատերերին։</translation>
 <translation id="3892144330757387737">Պատմությունը կգտնեք այստեղ</translation>
 <translation id="3897092660631435901">Ընտրացանկ</translation>
 <translation id="3904829425754749514">Ձեր կազմակերպությունն անջատել է համաժամացումը։ Դուք նախկինի պես կարող եք տեսնել ձեր էջանիշները, պատմությունը, գաղտնաբառերն ու մյուս կարգավորումները այս սարքում։ Սակայն ձեր կատարած փոփոխությունները չեն համաժամացվի հաշվի հետ։</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Անջատել</translation>
 <translation id="8114753159095730575">Ֆայլը հասանելի է ներբեռնման համար: Ընտրանքները հասանելի են էկրանի ներքևի հատվածում:</translation>
 <translation id="8132598642024322408">Նոր գինը՝ <ph name="PRICE" />, նախկին գինը՝ <ph name="PREVIOUS_PRICE" />։</translation>
+<translation id="8136856065410661948">Սա կօգտագործվի՝ ձեր Apple Calendar-ում Chrome-ից և Google Տեսապակուց միջոցառումներ ստեղծելու համար։</translation>
 <translation id="8156478151976189188">Գաղտնաբառերի համաժամացումը չի աշխատում</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> հաշիվ</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Ձեր սարքերը<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 35435d7..4ea26c2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Ketuk Aplikasi Browser Default</translation>
 <translation id="2820289420301699633">Administrator dapat mengontrol Chrome dan dapat mengakses datanya</translation>
 <translation id="2830972654601096923">Kelola Alamat...</translation>
+<translation id="2834399722155632105">3. Ketuk Opsi Sandi</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Reset Setelan Terjemahan</translation>
 <translation id="2848086008667475748">Jadikan Default di Setelan …</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Untuk berbagi dengan orang-orang di sekitar, izinkan mereka memindai kode QR ini dengan kamera atau aplikasi pemindai QR</translation>
 <translation id="5911030830365207728">Google Terjemahan</translation>
 <translation id="5913600720976431809">Opsi untuk Menerjemahkan halaman</translation>
+<translation id="5933515656458364246">Sinkronkan data Anda di semua perangkat.</translation>
 <translation id="5938160824633642847">Perangkat Anda hampir penuh. Kosongkan ruang penyimpanan dan coba lagi.</translation>
 <translation id="5948291296578561264">Tindakan ini memungkinkan Anda menyimpan foto ke koleksi foto.</translation>
 <translation id="5951816930277761335">Bagikan Link</translation>
@@ -713,6 +715,7 @@
 
 Data Anda dienkripsi dengan frasa sandi sinkronisasi pada tanggal <ph name="TIME" />. Loginkan frasa sandi untuk memulai sinkronisasi.</translation>
 <translation id="6418346271604475326">Menyiapkan PDF</translation>
+<translation id="6429213933892582367">Buka Opsi Sandi</translation>
 <translation id="6434591244308415567">Terjadi error. Harap coba lagi nanti.</translation>
 <translation id="6435236283694032571">Tambahkan ke Daftar Bacaan</translation>
 <translation id="6439338047467462846">Izinkan Semua</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Ucapkan Jawabannya</translation>
 <translation id="7207023858769244910">Sinkronkan untuk mendapatkan konten berdasarkan minat Anda.</translation>
 <translation id="721597782417389033">Nama Panggilan Kartu Tidak Valid</translation>
+<translation id="7221173315674413369">Pelajari berbagai fitur dan tips baru di Yang Baru</translation>
 <translation id="722454870747268814">Tab Samaran Baru</translation>
 <translation id="7265758999917665941">Jangan Pernah Untuk Situs Ini</translation>
 <translation id="7272437679830969316">Tidak dapat memverifikasi identitas. Sandi tidak disalin.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Download</translation>
 <translation id="7531345132340165516">Situs Ini</translation>
 <translation id="7537586195939242955">Maaf, Pass Anda tidak dapat dipasang ke Passbook saat ini.</translation>
+<translation id="7553234618121028547">Untuk menonaktifkan, buka <ph name="BEGIN_LINK" />Setelan<ph name="END_LINK" /> lalu buka Opsi Sandi.</translation>
 <translation id="7554791636758816595">Tab Baru</translation>
 <translation id="7561196759112975576">Selalu</translation>
 <translation id="7583004045319035904">Gunakan <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> untuk membuka kunci tab Samaran.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Buat, simpan, dan kelola sandi Anda agar Anda dapat mudah login ke situs dan aplikasi. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Nonaktifkan</translation>
 <translation id="8114753159095730575">Download file tersedia. Opsi tersedia di dekat bagian bawah layar.</translation>
+<translation id="81313319706244542">2. Ketuk Sandi</translation>
 <translation id="8132598642024322408">Sekarang <ph name="PRICE" />, sebelumnya <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Ini akan digunakan untuk mengambil acara dari Chrome dan Google Lens lalu membuatnya di Apple Calendar.</translation>
 <translation id="8156478151976189188">Sinkronisasi Sandi Tidak Berfungsi</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Penelusuran Baru</translation>
 <translation id="8323906514956095947">Sentuh lama untuk opsi tab lainnya</translation>
 <translation id="8328777765163860529">Tutup Semua</translation>
+<translation id="8343993175958086504">Cadangkan data Anda dan gunakan di perangkat mana pun.</translation>
 <translation id="8378714024927312812">Dikelola oleh organisasi</translation>
 <translation id="8386068868580335421">Reset</translation>
 <translation id="8407669440184693619">Tidak ada sandi yang ditemukan untuk situs ini</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb
index bd7503d..eed8c47e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_is.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Ýttu á „Sjálfgefið vafraforrit“</translation>
 <translation id="2820289420301699633">Kerfisstjórinn þinn hefur stjórn á Chrome og getur skoðað gögn vafrans.</translation>
 <translation id="2830972654601096923">Stjórna heimilisföngum ...</translation>
+<translation id="2834399722155632105">3. Ýttu á „Valkostir fyrir aðgangsorð“</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Endurstilla þýðingarstillingar</translation>
 <translation id="2848086008667475748">Gera sjálfgefinn í stillingum…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Ef þú vilt deila með fólki í nágrenninu skaltu láta það skanna þennan QR-kóða með myndavélinni sinni eða QR-forriti</translation>
 <translation id="5911030830365207728">Google Translate</translation>
 <translation id="5913600720976431809">Valkostir fyrir þýðingu þessarar síðu</translation>
+<translation id="5933515656458364246">Samstilltu gögnin þín í öllum tækjum.</translation>
 <translation id="5938160824633642847">Tækið er næstum því fullt. Losaðu um pláss og reyndu aftur.</translation>
 <translation id="5948291296578561264">Þetta gerir þér kleift að vista myndir í myndasafninu þínu.</translation>
 <translation id="5951816930277761335">Deildu tenglinum</translation>
@@ -713,6 +715,7 @@
 
 Gögnin þín voru dulkóðuð með aðgangsorði samstillingar <ph name="TIME" />. Sláðu það inn til að hefja samstillingu.</translation>
 <translation id="6418346271604475326">Undirbýr PDF</translation>
+<translation id="6429213933892582367">Opnaðu „Valkostir fyrir aðgangsorð“</translation>
 <translation id="6434591244308415567">Villa kom upp. Reyndu aftur síðar.</translation>
 <translation id="6435236283694032571">Bæta við leslista</translation>
 <translation id="6439338047467462846">Leyfa öll</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Lesa upp svör</translation>
 <translation id="7207023858769244910">Samstilltu til að fá efni sem byggist á áhugasviðum þínum.</translation>
 <translation id="721597782417389033">Ógilt gælunafn korts</translation>
+<translation id="7221173315674413369">Kannaðu nýja eiginleika og ábendingar í „Nýjungar“</translation>
 <translation id="722454870747268814">Nýr huliðsflipi</translation>
 <translation id="7265758999917665941">Aldrei fyrir þetta vefsvæði</translation>
 <translation id="7272437679830969316">Ekki tókst að staðfesta hver þú ert. Aðgangsorð var ekki afritað.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Sækja</translation>
 <translation id="7531345132340165516">Þessi síða</translation>
 <translation id="7537586195939242955">Því miður var ekki hægt að vista miðann í Passbook á þessari stundu.</translation>
+<translation id="7553234618121028547">Til að slökkva á þessu skaltu opna <ph name="BEGIN_LINK" />Stillingar<ph name="END_LINK" /> og fara í „Valkostir fyrir aðgangsorð“</translation>
 <translation id="7554791636758816595">Nýr flipi</translation>
 <translation id="7561196759112975576">Alltaf</translation>
 <translation id="7583004045319035904">Notaðu <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> til að taka huliðsflipana þína úr lás.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Búðu til, vistaðu og stjórnaðu aðgangsorðunum þínum til að skrá þig inn á vefsvæði og forrit á einfaldan hátt. <ph name="BEGIN_LINK" />Nánar<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Slökkva</translation>
 <translation id="8114753159095730575">Hægt er að sækja skrá. Valkostir eru í boði neðarlega á skjánum.</translation>
+<translation id="81313319706244542">2. Ýttu á „Aðgangsorð“</translation>
 <translation id="8132598642024322408">Verð nú <ph name="PRICE" />, verð áður <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Þetta verður notað til að búa til viðburði í Apple Calendar frá Chrome og Google-linsu.</translation>
 <translation id="8156478151976189188">Samstilling aðgangsorða virkar ekki</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Ný leit</translation>
 <translation id="8323906514956095947">Haltu inni til að sjá fleiri valkosti fyrir flipa</translation>
 <translation id="8328777765163860529">Loka öllu</translation>
+<translation id="8343993175958086504">Afritaðu efnið þitt og notaðu það í hvaða tæki sem er.</translation>
 <translation id="8378714024927312812">Stjórnað af fyrirtækinu þínu</translation>
 <translation id="8386068868580335421">Endurstilla</translation>
 <translation id="8407669440184693619">Engin aðgangsorð fundust fyrir þetta vefsvæði</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
index b1c2b0eb..5858f5c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Жазылымды тоқтату</translation>
 <translation id="3863769054730344136">Құрылғыларға жіберу</translation>
 <translation id="387280738075653372">Chrome-ды осы жерден жүктеп алыңыз.</translation>
+<translation id="3888863481921783344">Оқиғаңызға шақыруға болатын адамдарды көрсету үшін пайдаланылады.</translation>
 <translation id="3892144330757387737">Тарихты осы жерден табасыз</translation>
 <translation id="3897092660631435901">Мәзір</translation>
 <translation id="3904829425754749514">Ұйымыңыз синхрондау функциясын өшірді. Осы құрылғыдағы барлық бетбелгіні, тарихты, құпия сөзді және басқа да параметрлерді көре аласыз. Егер өзгерістер енгізсеңіз, олар аккаунтыңызбен синхрондалмайды.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Өшіру</translation>
 <translation id="8114753159095730575">Файлды жүктеп алуға болады. Экранның төменгі жағынан басқа опцияларды таңдай аласыз.</translation>
 <translation id="8132598642024322408">Қазіргі бағасы: <ph name="PRICE" />, бастапқы бағасы: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Apple Calendar-да Chrome және Google Lens арқылы оқиғалар жасау үшін пайдаланылады.</translation>
 <translation id="8156478151976189188">Құпия сөзді синхрондау жұмыс істемейді</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> аккаунт</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Құрылғыларыңыз<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb
index b3713d0..7059c3f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. ចុច​កម្មវិធីរុករកតាមអ៊ីនធឺណិត​លំនាំដើម</translation>
 <translation id="2820289420301699633">អ្នកគ្រប់គ្រង​របស់អ្នក​មានសិទ្ធិ​គ្រប់គ្រង Chrome និង​អាចចូលប្រើ​ទិន្នន័យ​របស់វាបាន</translation>
 <translation id="2830972654601096923">គ្រប់គ្រង​អាសយដ្ឋាន...</translation>
+<translation id="2834399722155632105">3. ចុច "ជម្រើស​ពាក្យសម្ងាត់"</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">កំណត់ការកំណត់បកប្រែឡើងវិញ</translation>
 <translation id="2848086008667475748">កំណត់ជាលំនាំដើមនៅក្នុងការកំណត់…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">ដើម្បីចែករំលែក​ជាមួយមនុស្ស​នៅជិត សូមអនុញ្ញាត​ឱ្យពួកគេ​ស្កេនកូដ QR នេះដោយប្រើ​កាមេរ៉ា ឬកម្មវិធី​ស្កេន QR របស់ពួកគេ</translation>
 <translation id="5911030830365207728">កម្មវិធីបកប្រែ Google</translation>
 <translation id="5913600720976431809">ជម្រើស​សម្រាប់​បកប្រែទំព័រ</translation>
+<translation id="5933515656458364246">ធ្វើសមកាលកម្ម​ទិន្នន័យ​របស់អ្នក​នៅលើ​ឧបករណ៍ទាំងអស់។</translation>
 <translation id="5938160824633642847">ឧបករណ៍​របស់អ្នក​ជិត​ពេញ​ហើយ។ សូម​បង្កើន​ទំហំ​ផ្ទុក​ រួច​ព្យាយាម​ម្តងទៀត។</translation>
 <translation id="5948291296578561264">វា​អនុញ្ញាត​ឱ្យអ្នក​រក្សាទុក​រូបថត​ទៅក្នុងបណ្ណាល័យរូបថត​របស់អ្នក។</translation>
 <translation id="5951816930277761335">ចែករំលែក​តំណ</translation>
@@ -713,6 +715,7 @@
 
 ទិន្នន័យរបស់អ្នកត្រូវបានអ៊ិនគ្រីបដោយប្រើឃ្លាសម្ងាត់សមកាលកម្មរបស់អ្នកកាលពីថ្ងៃ <ph name="TIME" />។ សូមបញ្ចូលវាដើម្បីចាប់ផ្តើមធ្វើសមកាលកម្ម។</translation>
 <translation id="6418346271604475326">កំពុងរៀបចំ PDF</translation>
+<translation id="6429213933892582367">បើក "ជម្រើស​ពាក្យសម្ងាត់"</translation>
 <translation id="6434591244308415567">មានបញ្ហា​កើត​ឡើង។ ព្យាយាម​ម្តង​ទៀត​នៅ​ពេល​ក្រោយ។</translation>
 <translation id="6435236283694032571">បញ្ចូលទៅក្នុងបញ្ជីអាន</translation>
 <translation id="6439338047467462846">អនុញ្ញាត​ទាំងអស់</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">ឆ្លើយតបទៅវិញ</translation>
 <translation id="7207023858769244910">ធ្វើសមកាលកម្ម ដើម្បី​យក​ខ្លឹមសារដោយផ្អែកលើ​ចំណាប់អារម្មណ៍​របស់អ្នក។</translation>
 <translation id="721597782417389033">ឈ្មោះហៅក្រៅរបស់​កាតមិនត្រឹមត្រូវ</translation>
+<translation id="7221173315674413369">រុករក​មុខងារ និង​គន្លឹះ​ថ្មីៗ​នៅក្នុង "អ្វីដែលថ្មី"</translation>
 <translation id="722454870747268814">ផ្ទាំងអនាមិកថ្មី</translation>
 <translation id="7265758999917665941">មិន​ចងចាំ​សម្រាប់​គេហទំព័រ​នេះទេ</translation>
 <translation id="7272437679830969316">មិនអាច​ផ្ទៀងផ្ទាត់​អត្តសញ្ញាណ​របស់អ្នក​បានទេ។ ពាក្យសម្ងាត់​មិន​បានចម្លង។</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">ទាញយក</translation>
 <translation id="7531345132340165516">គេហទំព័របច្ចុប្បន្ន</translation>
 <translation id="7537586195939242955">សូមទោស Pass របស់អ្នកមិនអាចដំឡើងទៅកាន់ Passbook បានទេនៅពេលនេះ។</translation>
+<translation id="7553234618121028547">ដើម្បីបិទ សូមបើក​<ph name="BEGIN_LINK" />ការកំណត់<ph name="END_LINK" /> និង​ចូលទៅ "ជម្រើស​ពាក្យសម្ងាត់"។</translation>
 <translation id="7554791636758816595">ផ្ទាំងថ្មី</translation>
 <translation id="7561196759112975576">ជានិច្ច</translation>
 <translation id="7583004045319035904">ប្រើ <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> ដើម្បីដោះសោផ្ទាំងឯកជនរបស់អ្នក។</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">បង្កើត រក្សាទុក និងគ្រប់គ្រងពាក្យសម្ងាត់របស់អ្នក ដើម្បីឱ្យអ្នកអាចចូលគេហទំព័រ និងកម្មវិធីបានយ៉ាងងាយស្រួល។ <ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែម<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">បិទ</translation>
 <translation id="8114753159095730575">អាចទាញយកឯកសារ​បានហើយ។ មានជម្រើស​នៅ​ក្បែរ​ផ្នែកខាងក្រោមនៃ​អេក្រង់។</translation>
+<translation id="81313319706244542">2. ចុច "ពាក្យសម្ងាត់"</translation>
 <translation id="8132598642024322408">ឥឡូវ <ph name="PRICE" /> ពីមុន <ph name="PREVIOUS_PRICE" />។</translation>
 <translation id="8136856065410661948">សកម្មភាពនេះ​នឹង​ត្រូវបាន​ប្រើ ដើម្បីបង្កើត​ព្រឹត្តិការណ៍​នៅក្នុង Apple Calendar របស់អ្នកពី Chrome និង Google Lens។</translation>
 <translation id="8156478151976189188">សមកាលកម្ម​ពាក្យសម្ងាត់​មិនដំណើរការទេ</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">ការស្វែងរក​ថ្មី</translation>
 <translation id="8323906514956095947">ចុចឱ្យជាប់ ដើម្បី​ទទួលបានជម្រើស​ផ្ទាំង​ច្រើនទៀត</translation>
 <translation id="8328777765163860529">បិទ​ទាំងអស់</translation>
+<translation id="8343993175958086504">បម្រុង​ទុក​ទិន្នន័យ​របស់​អ្នក និង​ប្រើ​វា​នៅ​លើ​ឧបករណ៍​ណា​ក៏បាន។</translation>
 <translation id="8378714024927312812">គ្រប់គ្រងដោយ​ស្ថាប័ន​របស់អ្នក</translation>
 <translation id="8386068868580335421">កំណត់ឡើងវិញ</translation>
 <translation id="8407669440184693619">រកមិនឃើញ​ពាក្យសម្ងាត់​សម្រាប់គេហទំព័រ​នេះទេ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index a293cbb..ba385e5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. 기본 브라우저 앱 탭하기</translation>
 <translation id="2820289420301699633">관리자가 Chrome을 제어하고 Chrome 데이터에 액세스할 수 있습니다.</translation>
 <translation id="2830972654601096923">주소 관리...</translation>
+<translation id="2834399722155632105">3. 비밀번호 옵션 탭하기</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">번역 설정 재설정</translation>
 <translation id="2848086008667475748">설정에서 기본 브라우저로 지정…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">근처에 있는 사용자와 공유하려면 상대방에게 카메라나 QR 스캐너 앱으로 QR 코드를 스캔해 달라고 요청하세요.</translation>
 <translation id="5911030830365207728">Google 번역</translation>
 <translation id="5913600720976431809">페이지 번역 옵션</translation>
+<translation id="5933515656458364246">모든 기기에서 데이터를 동기화해 보세요.</translation>
 <translation id="5938160824633642847">기기의 저장용량이 거의 가득 찼습니다. 여유 공간을 확보한 후 다시 시도해 보세요.</translation>
 <translation id="5948291296578561264">이렇게 하면 사진 라이브러리에 사진을 저장할 수 있습니다.</translation>
 <translation id="5951816930277761335">링크 공유</translation>
@@ -713,6 +715,7 @@
 
 <ph name="TIME" />에 동기화 암호로 데이터가 암호화되었습니다. 동기화를 시작하려면 입력하세요.</translation>
 <translation id="6418346271604475326">PDF 준비 중</translation>
+<translation id="6429213933892582367">비밀번호 옵션 열기</translation>
 <translation id="6434591244308415567">오류가 발생했습니다. 나중에 다시 시도해 보세요.</translation>
 <translation id="6435236283694032571">읽기 목록에 추가</translation>
 <translation id="6439338047467462846">모두 허용</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">음성 응답</translation>
 <translation id="7207023858769244910">동기화하여 내 관심분야에 맞는 콘텐츠를 받아보세요.</translation>
 <translation id="721597782417389033">잘못된 카드 닉네임</translation>
+<translation id="7221173315674413369">'새로운 기능'에서 새로운 기능과 팁을 살펴보세요.</translation>
 <translation id="722454870747268814">새 시크릿 탭</translation>
 <translation id="7265758999917665941">이 사이트 제외</translation>
 <translation id="7272437679830969316">신원을 인증할 수 없습니다. 비밀번호가 복사되지 않았습니다.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">다운로드</translation>
 <translation id="7531345132340165516">현재 사이트</translation>
 <translation id="7537586195939242955">현재 패스를 패스북에 설치할 수 없습니다.</translation>
+<translation id="7553234618121028547">사용 중지하려면 <ph name="BEGIN_LINK" />설정<ph name="END_LINK" />을 열고 비밀번호 옵션으로 이동합니다.</translation>
 <translation id="7554791636758816595">새 탭</translation>
 <translation id="7561196759112975576">항상</translation>
 <translation id="7583004045319035904">시크릿 탭을 잠금 해제하려면 <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> 인증을 사용하세요.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">사이트와 앱에 쉽게 로그인할 수 있도록 비밀번호를 생성, 저장, 관리하세요. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">사용 중지</translation>
 <translation id="8114753159095730575">파일을 다운로드할 수 있습니다. 화면 하단에서 옵션을 선택할 수 있습니다.</translation>
+<translation id="81313319706244542">2. 비밀번호 탭하기</translation>
 <translation id="8132598642024322408">정가 <ph name="PREVIOUS_PRICE" />인 제품을 <ph name="PRICE" />에 판매 중</translation>
 <translation id="8136856065410661948">Chrome 및 Google 렌즈에서 Apple 캘린더 일정을 만들 때 사용됩니다.</translation>
 <translation id="8156478151976189188">비밀번호 동기화가 작동하지 않음</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">새 검색</translation>
 <translation id="8323906514956095947">더 많은 탭 옵션을 보려면 길게 터치하세요.</translation>
 <translation id="8328777765163860529">모두 닫기</translation>
+<translation id="8343993175958086504">콘텐츠를 백업하고 어느 기기에서나 사용하세요.</translation>
 <translation id="8378714024927312812">조직에서 관리</translation>
 <translation id="8386068868580335421">재설정</translation>
 <translation id="8407669440184693619">이 사이트의 비밀번호를 찾을 수 없음</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
index d5182a3..59e109a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Жазылууну токтотуу</translation>
 <translation id="3863769054730344136">Түзмөктөрүңүзгө жөнөтүңүз</translation>
 <translation id="387280738075653372">Chrome'ду бул жерден жүктөп алыңыз.</translation>
+<translation id="3888863481921783344">Бул иш-чараңызга чакырыла турган адамдарды көрсөтүү үчүн колдонулат.</translation>
 <translation id="3892144330757387737">Таржымалыңызды ушул жерден табасыз</translation>
 <translation id="3897092660631435901">Меню</translation>
 <translation id="3904829425754749514">Уюмуңуз шайкештирүүнү өчүрүп койду. Ушул түзмөгүңүздө кыстармаларды, таржымалды, сырсөздөрдү жана башка жөндөөлөрүңүздү дагы деле көрүп турасыз. Эгер өзгөртүүлөрдү киргизсеңиз, алар аккаунтуңузга шайкештирилбейт.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Өчүрүү</translation>
 <translation id="8114753159095730575">Файлды жүктөп алууга болот. Параметрлер экрандын төмөн жагында берилген.</translation>
 <translation id="8132598642024322408">Азыркы баасы: <ph name="PRICE" />, мурунку баасы: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Бул Chrome жана Google Lens кызматындагы Apple Жылнаамасында иш-чараларды түзүү үчүн колдонулат.</translation>
 <translation id="8156478151976189188">Сырсөздү шайкештирүү иштеген жок</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> каттоо эсеби</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Түзмөктөрүңүз<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
index a07a46c..22c92e1f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. ແຕະແອັບໂປຣແກຣມທ່ອງເວັບເລີ່ມຕົ້ນ</translation>
 <translation id="2820289420301699633">ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດຄວບຄຸມ Chrome ແລະ ເຂົ້າເຖິງຂໍ້ມູນຂອງມັນໄດ້</translation>
 <translation id="2830972654601096923">ຈັດການທີ່ຢູ່...</translation>
+<translation id="2834399722155632105">3. ແຕະຕົວເລືອກລະຫັດຜ່ານ</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">ຕັ້ງຄ່າການຕັ້ງຄ່າການແປຄືນໃໝ່</translation>
 <translation id="2848086008667475748">ຕັ້ງເປັນຄ່າເລີ່ມຕົ້ນໃນການຕັ້ງຄ່າ…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">ອະນຸຍາດໃຫ້ເຂົາເຈົ້າສະແກນລະຫັດ QR ນີ້ດ້ວຍແອັບກ້ອງຖ່າຍຮູບ ຫຼື ເຄື່ອງສະແກນ QR ຂອງເຂົາເຈົ້າເພື່ອແບ່ງປັນກັບຄົນທີ່ຢູ່ໃກ້ຄຽງ</translation>
 <translation id="5911030830365207728">Google ແປພາສາ</translation>
 <translation id="5913600720976431809">ຕົວເລືອກໃນການແປໜ້າ</translation>
+<translation id="5933515656458364246">ຊິ້ງຂໍ້ມູນຂອງທ່ານຢູ່ອຸປະກອນທັງໝົດ.</translation>
 <translation id="5938160824633642847">ອຸປະກອນຂອງທ່ານເກືອບເຕັມແລ້ວ. ກະລຸນາຂະຫຍາຍພື້ນທີ່ຫວ່າງ ແລະ ລອງອີກຄັ້ງ.</translation>
 <translation id="5948291296578561264">ນີ້ອະນຸຍາດໃຫ້ທ່ານບັນທຶກຮູບຖ່າຍໄວ້ໃນຫ້ອງສະໝຸດຮູບ.</translation>
 <translation id="5951816930277761335">ແບ່ງປັນລິ້ງ</translation>
@@ -713,6 +715,7 @@
 
 ຂໍ້ມູນຂອງທ່ານຖືກເຂົ້າລະຫັດໄວ້ດ້ວຍວະລີຜ່ານການຊິ້ງຂອງທ່ານໃນວັນທີ <ph name="TIME" />. ໃຫ້ປ້ອນມັນເພື່ອເລີ່ມການຊິ້ງຂໍ້ມູນ.</translation>
 <translation id="6418346271604475326">ກຳລັງກະກຽມ PDF</translation>
+<translation id="6429213933892582367">ເປີດຕົວເລືອກລະຫັດຜ່ານ</translation>
 <translation id="6434591244308415567">ເກີດຄວາມຜິດພາດຂຶ້ນ. ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ.</translation>
 <translation id="6435236283694032571">ເພີ່ມໃສ່ລາຍການທີ່ຈະອ່ານ</translation>
 <translation id="6439338047467462846">ອະນຸຍາດທັງໝົດ</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">ເວົ້າ​ຄຳ​ຕອບ​ກັບ​ຄືນ</translation>
 <translation id="7207023858769244910">ຊິ້ງຂໍ້ມູນເພື່ອຮັບເນື້ອຫາໂດຍອ້າງອີງໃສ່ຄວາມສົນໃຈຂອງທ່ານ.</translation>
 <translation id="721597782417389033">ຊື່ຫຼິ້ນບັດບໍ່ຖືກຕ້ອງ</translation>
+<translation id="7221173315674413369">ສຳຫຼວດຄຸນສົມບັດ ແລະ ເຄັດລັບໃໝ່ໆໃນ ມີຫຍັງໃໝ່</translation>
 <translation id="722454870747268814">ແຖບທີ່ບໍ່ເຜີຍຕົວຕົນໃໝ່</translation>
 <translation id="7265758999917665941">ບໍ່ເລີຍສໍາລັບເວັບໄຊນີ້</translation>
 <translation id="7272437679830969316">ບໍ່ສາມາດພິສູດຢືນຢັນຕົວຕົນຂອງທ່ານໄດ້. ບໍ່ໄດ້ສຳເນົາລະຫັດຜ່ານ.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">ດາວ​ໂຫລດ</translation>
 <translation id="7531345132340165516">ເວັບໄຊປັດຈຸບັນ</translation>
 <translation id="7537586195939242955">ຂໍ​ອະ​ໄພ​, ບັດຜ່ານ​ຂອງ​ທ່ານ​ບໍ່​ສາ​ມາດຕິດ​ຕັ້ງ​ໃສ່​ປຶ້ມ​ຜ່ານ​ໃນ​ເວ​ລາ​ນີ້​ໄດ້.</translation>
+<translation id="7553234618121028547">ເພື່ອປິດ, ໃຫ້ເປີດ <ph name="BEGIN_LINK" />ການຕັ້ງຄ່າ<ph name="END_LINK" /> ແລະ ເຂົ້າໄປ ຕົວເລືອກລະຫັດຜ່ານ.</translation>
 <translation id="7554791636758816595">ແຖບ​ໃຫມ່</translation>
 <translation id="7561196759112975576">ຢູ່ສະເໝີ</translation>
 <translation id="7583004045319035904">ໃຊ້ <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> ເພື່ອປົດລັອກແຖບບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານ.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">ສ້າງ, ບັນທຶກ ແລະ ຈັດການລະຫັດຜ່ານຂອງທ່ານເພື່ອໃຫ້ທ່ານສາມາດເຂົ້າສູ່ລະບົບຫາເວັບໄຊ ແລະ ແອັບໄດ້ຢ່າງງ່າຍດາຍ. <ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">ປິດ</translation>
 <translation id="8114753159095730575">ການດາວໂຫຼດໄຟລ໌ບໍ່ສາມາດໃຊ້ໄດ້. ມີຕົວເລືອກຕ່າງໆຢູ່ໃກ້ສ່ວນລຸ່ມຂອງໜ້າຈໍ.</translation>
+<translation id="81313319706244542">2. ແຕະລະຫັດຜ່ານ</translation>
 <translation id="8132598642024322408">ຕອນນີ້ <ph name="PRICE" /> ກ່ອນໜ້ານີ້ <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">ຂໍ້ມູນນີ້ຈະໃຊ້ເພື່ອສ້າງນັດໝາຍໃນປະຕິທິນ Apple ຂອງທ່ານຈາກ Chrome ແລະ Google Lens.</translation>
 <translation id="8156478151976189188">ການຊິ້ງຂໍ້ມູນລະຫັດຜ່ານບໍ່ເຮັດວຽກ</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">ຊອກຫາໃໝ່</translation>
 <translation id="8323906514956095947">ແຕະຄ້າງໄວ້ສຳລັບຕົວເລືອກເພີ່ມເຕີມຂອງແຖບ</translation>
 <translation id="8328777765163860529">ປິດທັງໝົດ</translation>
+<translation id="8343993175958086504">ສຳຮອງຂໍ້ມູນຂອງທ່ານ ແລະ ໃຊ້ມັນຢູ່ອຸປະກອນໃດກໍໄດ້.</translation>
 <translation id="8378714024927312812">ຈັດການໂດຍອົງການຂອງທ່ານ</translation>
 <translation id="8386068868580335421">ຣີເຊັດ</translation>
 <translation id="8407669440184693619">ບໍ່ເຫັນລະຫັດຜ່ານສຳລັບເວັບໄຊນີ້</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index a591710..19c67fb3a0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Palieskite „Numatytoji naršyklės programa“</translation>
 <translation id="2820289420301699633">Jūsų administratorius valdo naršyklę „Chrome“ ir gali pasiekti jos duomenis</translation>
 <translation id="2830972654601096923">Tvarkyti adresus...</translation>
+<translation id="2834399722155632105">3. Palieskite „Slaptažodžio parinktys“</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Nust. Vert. nust. iš n.</translation>
 <translation id="2848086008667475748">Nustatyti kaip numatytąją nustatymuose…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Nebestebėti</translation>
 <translation id="3863769054730344136">Išsiųsti į jūsų įrenginius</translation>
 <translation id="387280738075653372">Čia atsisiųskite „Chrome“.</translation>
+<translation id="3888863481921783344">Šie duomenys bus naudojami norint parodyti galimus pakviestuosius į įvykį.</translation>
 <translation id="3892144330757387737">Čia rasite istoriją</translation>
 <translation id="3897092660631435901">Meniu</translation>
 <translation id="3904829425754749514">Sinchronizavimas išjungtas organizacijoje. Vis tiek galėsite peržiūrėti žymes, istoriją, slaptažodžius ir kitus nustatymus šiame įrenginyje. Jei atliksite pakeitimų, jie nebus sinchronizuojami su jūsų paskyra.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">Norėdami bendrinti su netoliese esančiais žmonėmis, leiskite jiems nuskaityti šį QR kodą savo fotoaparatu ar QR kodų skaitytuvo programa</translation>
 <translation id="5911030830365207728">„Google“ vertėjas</translation>
 <translation id="5913600720976431809">Puslapio vertimo parinktys</translation>
+<translation id="5933515656458364246">Sinchronizuokite duomenis visuose įrenginiuose.</translation>
 <translation id="5938160824633642847">Jūsų įrenginys beveik pilnas. Atlaisvinkite vietos ir bandykite dar kartą.</translation>
 <translation id="5948291296578561264">Taip galėsite išsaugoti nuotraukas nuotraukų bibliotekoje.</translation>
 <translation id="5951816930277761335">Bendrinkite nuorodą</translation>
@@ -712,6 +715,7 @@
 
 <ph name="TIME" /> duomenys buvo užšifruoti naudojant sinchronizavimo slaptafrazę. Įveskite ją, kad pradėtumėte sinchronizuoti.</translation>
 <translation id="6418346271604475326">Ruošiamas PDF</translation>
+<translation id="6429213933892582367">Atidarykite slaptažodžio parinktis</translation>
 <translation id="6434591244308415567">Įvyko klaida. Vėliau bandykite dar kartą.</translation>
 <translation id="6435236283694032571">Pridėti prie skaitymo sąrašo</translation>
 <translation id="6439338047467462846">Leisti viską</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Sakyti atsakymus</translation>
 <translation id="7207023858769244910">Sinchronizuokite, kad gautumėte turinio pagal savo pomėgius.</translation>
 <translation id="721597782417389033">Netinkamas kortelės slapyvardis</translation>
+<translation id="7221173315674413369">Naršykite naujas funkcijas ir patarimus skiltyje „Kas naujo“</translation>
 <translation id="722454870747268814">Naujas inkognito skirtukas</translation>
 <translation id="7265758999917665941">Niekada šioje svetainėje</translation>
 <translation id="7272437679830969316">Nepavyko patvirtinti tapatybės. Slaptažodis nenukopijuotas.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">Atsisiųsti</translation>
 <translation id="7531345132340165516">Dabartinė svetainė</translation>
 <translation id="7537586195939242955">Deja, šiuo metu negalima įdiegti „Pass“ į „Passbook“.</translation>
+<translation id="7553234618121028547">Jei norite išjungti, atidarykite skiltį <ph name="BEGIN_LINK" />„Nustatymai“<ph name="END_LINK" /> ir eikite į skiltį „Slaptažodžio parinktys“.</translation>
 <translation id="7554791636758816595">Naujas skirtukas</translation>
 <translation id="7561196759112975576">Visada</translation>
 <translation id="7583004045319035904">Naudokite <ph name="BIOMETRIC_AUTHENITCATION_TYPE" />, kad atrakintumėte inkognito skirtukus.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Kurkite, saugokite ir tvarkykite slaptažodžius, kad galėtumėte lengvai prisijungti prie svetainių ir programų. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Išjungti</translation>
 <translation id="8114753159095730575">Galima atsisiųsti failą. Parinktys pasiekiamos netoli ekrano apačios.</translation>
+<translation id="81313319706244542">2. Palieskite „Slaptažodžiai“</translation>
 <translation id="8132598642024322408">Dabar <ph name="PRICE" />, buvo <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Šie duomenys bus naudojami įvykiams programoje „Apple Calendar“ kurti naudojant „Chrome“ ir „Google Lens“.</translation>
 <translation id="8156478151976189188">Slaptažodžio sinchronizavimas neveikia</translation>
 <translation id="8157532349231307196">Paskyrų: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Jūsų įrenginiai<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Nauja paieška</translation>
 <translation id="8323906514956095947">Palieskite ir palaikykite, kad būtų pateikta daugiau skirtukų parinkčių</translation>
 <translation id="8328777765163860529">Uždaryti viską</translation>
+<translation id="8343993175958086504">Sukurkite atsarginę turinio kopiją ir naudokite ją bet kuriame įrenginyje.</translation>
 <translation id="8378714024927312812">Tvarko jūsų organizacija</translation>
 <translation id="8386068868580335421">Nustatyti iš naujo</translation>
 <translation id="8407669440184693619">Nerasta šios svetainės slaptažodžių</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index 1ba43bb..1cdef9d 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Pieskarieties vienumam Noklusējuma pārlūka lietotne.</translation>
 <translation id="2820289420301699633">Jūsu administrators kontrolē pārlūku Chrome un var piekļūt tā datiem</translation>
 <translation id="2830972654601096923">Pārvaldīt adreses...</translation>
+<translation id="2834399722155632105">3. Pieskarieties pogai Paroles iespējas.</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Atiestatīt tulk. iestat.</translation>
 <translation id="2848086008667475748">Padarīt par noklusējumu sadaļā Iestatījumi…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Lai kopīgotu saturu ar tuvumā esošajiem cilvēkiem, ļaujiet viņiem skenēt šo kvadrātkodu, izmantojot kameru vai kvadrātkodu skenēšanas lietotni.</translation>
 <translation id="5911030830365207728">Google tulkotājs</translation>
 <translation id="5913600720976431809">Šīs lapas tulkošanas opcijas</translation>
+<translation id="5933515656458364246">Varat sinhronizēt savus datus visās ierīcēs.</translation>
 <translation id="5938160824633642847">Ierīcē nepietiek vietas. Atbrīvojiet vietu un mēģiniet vēlreiz.</translation>
 <translation id="5948291296578561264">Šādi varat saglabāt fotoattēlus savā fotoattēlu bibliotēkā.</translation>
 <translation id="5951816930277761335">Kopīgojiet saiti.</translation>
@@ -713,6 +715,7 @@
 
 Jūsu dati tika šifrēti, izmantojot jūsu sinhronizācijas ieejas frāzi šādā datumā: <ph name="TIME" />. Lai sāktu sinhronizēšanu, ievadiet ieejas frāzi.</translation>
 <translation id="6418346271604475326">PDF sagatave</translation>
+<translation id="6429213933892582367">Atveriet sadaļu Paroles iespējas.</translation>
 <translation id="6434591244308415567">Radās kļūda. Vēlāk mēģiniet vēlreiz.</translation>
 <translation id="6435236283694032571">Pievienot lasīšanas sarakstam</translation>
 <translation id="6439338047467462846">Atļaut visus</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Izrunāt atbildes skaļi</translation>
 <translation id="7207023858769244910">Ieslēdziet sinhronizāciju, lai atrastu savām interesēm pielāgotu saturu.</translation>
 <translation id="721597782417389033">Nederīgs kredītkartes apzīmējums</translation>
+<translation id="7221173315674413369">Izpētiet jaunas funkcijas un padomus sadaļā “Jaunumi”</translation>
 <translation id="722454870747268814">Jauna inkognito cilne</translation>
 <translation id="7265758999917665941">Nekad šai vietnei</translation>
 <translation id="7272437679830969316">Nevar apstiprināt jūsu identitāti. Parole nav nokopēta.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Lejupielādēt</translation>
 <translation id="7531345132340165516">Šobrīd aktīvā vietne</translation>
 <translation id="7537586195939242955">Diemžēl pašlaik jūsu atļauju nevar instalēt lietotnē Passbook.</translation>
+<translation id="7553234618121028547">Lai to izslēgtu, atveriet sadaļu <ph name="BEGIN_LINK" />Iestatījumi<ph name="END_LINK" /> un pārejiet uz iestatījumu Paroles iespējas.</translation>
 <translation id="7554791636758816595">Jauna cilne</translation>
 <translation id="7561196759112975576">Vienmēr</translation>
 <translation id="7583004045319035904"><ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> ļaus atbloķēt inkognito cilnes.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Izveidojiet, saglabājiet un pārvaldiet paroles, lai varētu ērti pierakstīties vietnēs un lietotnēs. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation>
 <translation id="8105368624971345109">Izslēgt</translation>
 <translation id="8114753159095730575">Pieejama failu lejupielāde. Pieejamās opcijas redzamas ekrāna apakšdaļā.</translation>
+<translation id="81313319706244542">2. Pieskarieties vienumam Paroles.</translation>
 <translation id="8132598642024322408">Pašreizējā cena: <ph name="PRICE" />; iepriekšējā cena: <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Piekļuve tiks izmantota, lai jūsu Apple kalendārā veidotu pasākumus no pārlūka Chrome un funkcijas Google Lens.</translation>
 <translation id="8156478151976189188">Paroļu sinhronizācija nedarbojas</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Jauns meklēšanas vaicājums</translation>
 <translation id="8323906514956095947">Lai atvērtu citas ciļņu opcijas, pieskarieties un turiet.</translation>
 <translation id="8328777765163860529">Aizvērt visu</translation>
+<translation id="8343993175958086504">Varat dublēt savus datus un izmantot tos jebkurā ierīcē.</translation>
 <translation id="8378714024927312812">Pārvalda jūsu organizācija</translation>
 <translation id="8386068868580335421">Atiestatīt</translation>
 <translation id="8407669440184693619">Šai vietnei nav atrasta neviena parole</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
index bf75cae..d186917 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Өгөгдмөл хөтчийн аппыг товшино уу</translation>
 <translation id="2820289420301699633">Танай администратор Chrome-г хянах бөгөөд өгөгдөлд нь хандах боломжтой</translation>
 <translation id="2830972654601096923">Хаягийг удирдах...</translation>
+<translation id="2834399722155632105">3. Нууц үгний сонголт дээр товшино уу</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Орчуулгын тохиргоог дахин тохируулах</translation>
 <translation id="2848086008667475748">Тохиргоо хэсэгт өгөгдмөл болгох…</translation>
@@ -631,6 +632,7 @@
 <translation id="5899314093904173337">Ойролцоо байгаа хүмүүстэй хуваалцахын тулд тэдэнд энэ QR кодыг камер эсвэл QR код скан хийдэг аппаар скан хийхийг зөвшөөрнө үү</translation>
 <translation id="5911030830365207728">Google Translate</translation>
 <translation id="5913600720976431809">Хуудсыг орчуулах сонголтууд</translation>
+<translation id="5933515656458364246">Өгөгдлөө бүх төхөөрөмж дээр синк хийгээрэй.</translation>
 <translation id="5938160824633642847">Таны төхөөрөмж бараг дүүрсэн байна. Зай гаргаад дахин оролдоно уу.</translation>
 <translation id="5948291296578561264">Энэ нь танд зургийг зургийн сандаа хадгалах боломжийг олгодог.</translation>
 <translation id="5951816930277761335">Холбоосыг хуваалцана уу</translation>
@@ -712,6 +714,7 @@
 
 Таны өгөгдлийг таны синк хийх нэвтрэх үгтэй <ph name="TIME" />-д шифрлэсэн байна. Синкийг эхлүүлэхийн тулд үүнийг оруулна уу.</translation>
 <translation id="6418346271604475326">PDF форматыг бэлдэж байна</translation>
+<translation id="6429213933892582367">Нууц үгний сонголтыг нээнэ үү</translation>
 <translation id="6434591244308415567">Алдаа гарлаа. Дараа дахин оролдоно уу.</translation>
 <translation id="6435236283694032571">Унших жагсаалтад нэмэх</translation>
 <translation id="6439338047467462846">Бүгдийг зөвшөөрөх</translation>
@@ -827,6 +830,7 @@
 <translation id="7203585745079012652">Хариултыг буцааж хэлэх</translation>
 <translation id="7207023858769244910">Таны сонирхолд тулгуурласан контент авахын тулд синк хийнэ үү.</translation>
 <translation id="721597782417389033">Картын буруу хоч</translation>
+<translation id="7221173315674413369">"Шинэ юм юу байна" хэсэгт шинэ онцлогууд болон зөвлөгөөнүүдийг судлаарай</translation>
 <translation id="722454870747268814">Нууцлалын шинэ таб</translation>
 <translation id="7265758999917665941">Энэ сайтад хэзээ ч хадгалахгүй</translation>
 <translation id="7272437679830969316">Таныг баталгаажуулж чадсангүй. Нууц үгийг хуулаагүй байна.</translation>
@@ -860,6 +864,7 @@
 <translation id="7514365320538308">Татаж авах</translation>
 <translation id="7531345132340165516">Одоогийн сайт</translation>
 <translation id="7537586195939242955">Уучлаарай, таны Pass-ыг одоогоор Passbook руу суулгаж болохгүй байна.</translation>
+<translation id="7553234618121028547">Унтраахын тулд <ph name="BEGIN_LINK" />Тохиргоог<ph name="END_LINK" /> нээж, Нууц үгний сонголт руу очно уу.</translation>
 <translation id="7554791636758816595">Шинэ таб</translation>
 <translation id="7561196759112975576">Үргэлж</translation>
 <translation id="7583004045319035904">Нууцлалтай табуудынхаа түгжээг тайлахын тулд <ph name="BIOMETRIC_AUTHENITCATION_TYPE" />-г ашиглана уу.</translation>
@@ -941,6 +946,7 @@
 <translation id="8101409298456377967">Нууц үгээ үүсгэж, хадгалж мөн удирдсанаар та сайтууд болон аппуудад хялбархан нэвтрэх боломжтой. <ph name="BEGIN_LINK" />Нэмэлт мэдээлэл авах<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Унтраах</translation>
 <translation id="8114753159095730575">Файл татаж авах боломжтой. Дэлгэцийн доод хэсгийн сонголтууд боломжтой.</translation>
+<translation id="81313319706244542">2. Нууц үгнүүд дээр товшино уу</translation>
 <translation id="8132598642024322408">Одоо <ph name="PRICE" /> болсон бөгөөд өмнө нь <ph name="PREVIOUS_PRICE" /> байсан.</translation>
 <translation id="8136856065410661948">Үүнийг таны Apple Calendar-т Chrome болон Google Lens-с үйл явдал үүсгэхэд ашиглана.</translation>
 <translation id="8156478151976189188">Нууц үг синк хийх ажиллахгүй байна</translation>
@@ -963,6 +969,7 @@
 <translation id="8319076807703933069">Шинэ хайлт</translation>
 <translation id="8323906514956095947">Табын бусад сонголтыг харахын тулд удаан дарна уу</translation>
 <translation id="8328777765163860529">Бүгдийг хаах</translation>
+<translation id="8343993175958086504">Зүйлсээ хуулбарлаж, дурын төхөөрөмж дээр ашиглана уу.</translation>
 <translation id="8378714024927312812">Танай байгууллагаас удирддаг</translation>
 <translation id="8386068868580335421">Шинэчлэх</translation>
 <translation id="8407669440184693619">Энэ сайтад нууц үг олдсонгүй</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index d4ac555a..91e1a88c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">၂။ 'မူရင်း ဘရောင်ဇာအက်ပ်' ကို တို့ပါ</translation>
 <translation id="2820289420301699633">သင့်စီမံခန့်ခွဲသူက Chrome ကို ထိန်းချုပ်ခွင့်ရှိပြီး ၎င်း၏ဒေတာများကို ဝင်ကြည့်နိုင်သည်</translation>
 <translation id="2830972654601096923">လိပ်စာများ စီမံရန်...</translation>
+<translation id="2834399722155632105">၃။ စကားဝှက် ရွေးစရာများကို တို့ပါ</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />၊ <ph name="STATE" />၊ <ph name="URL" /></translation>
 <translation id="2843803966603263712">ဘာသာပြန် ဆက်တင်များ ပြန်လည်သတ်မှတ်မည်</translation>
 <translation id="2848086008667475748">ဆက်တင်များထဲတွင် ပုံသေသတ်မှတ်ရန်…</translation>
@@ -631,6 +632,7 @@
 <translation id="5899314093904173337">အနီးတဝိုက်ရှိ လူများနှင့် မျှဝေရန် ၎င်းတို့၏ ကင်မရာ သို့မဟုတ် QR စကင်နာအက်ပ်ဖြင့် ဤ QR ကုဒ်ကို စကင်ဖတ်စေပါ</translation>
 <translation id="5911030830365207728">Google ဘာသာပြန်</translation>
 <translation id="5913600720976431809">စာမျက်နှာကို 'ဘာသာပြန်ရန်' ရွေးချယ်မှုများ</translation>
+<translation id="5933515656458364246">စက်အားလုံးတွင် သင့်ဒေတာကို စင့်ခ်လုပ်ပါ။</translation>
 <translation id="5938160824633642847">သင်၏ စက်ပစ္စည်းနေရာ ပြည့်ပါတော့မည်။ နေရာလွတ်လုပ်ပြီး ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="5948291296578561264">၎င်းသည်ဓာတ်ပုံများအား သင်၏ဓာတ်ပုံဒစ်ဂျစ်တိုက်သို့ သိမ်းဆည်းခွင့်ပေးပါသည်။</translation>
 <translation id="5951816930277761335">လင့်ခ် မျှဝေပါ</translation>
@@ -712,6 +714,7 @@
 
 သင့်ဒေတာများကို <ph name="TIME" /> ပေါ်တွင်သင်စင့်ခ်ပြုလုပ်ထားသည့် စကားဝှက်ဖြင့် အသွင်ဝှက်ထားပါသည်။ စင့်ခ်ပြုလုပ်ခြင်းစတင်ရန် ၎င်းကိုထည့်ပါ။</translation>
 <translation id="6418346271604475326">PDF ပြင်ဆင်နေသည်</translation>
+<translation id="6429213933892582367">စကားဝှက် ရွေးစရာများကို ဖွင့်ပါ</translation>
 <translation id="6434591244308415567">အမှားအယွင်း ရှိနေသည်။ နောက်မှ ထပ်လုပ်ကြည့်ပါ။</translation>
 <translation id="6435236283694032571">‘ဖတ်ရန်စာရင်း’ တွင် ထည့်ရန်</translation>
 <translation id="6439338047467462846">အားလုံးကို ခွင့်ပြုရန်</translation>
@@ -827,6 +830,7 @@
 <translation id="7203585745079012652">အဖြေများကို ပြန်လည်ပြောကြားမည်</translation>
 <translation id="7207023858769244910">သင့်စိတ်ဝင်စားမှုများအပေါ် အခြေခံသည့် အကြောင်းအရာများ ရယူရန် စင့်ခ်လုပ်နိုင်သည်။</translation>
 <translation id="721597782417389033">မမှန်ကန်သော ကတ်နာမည်ပြောင်</translation>
+<translation id="7221173315674413369">ဝန်ဆောင်မှုအသစ်များနှင့် အကြံပြုချက်များကို ‘အသစ်ပါဝင်မှုများ’ တွင် စူးစမ်းလေ့လာနိုင်သည်</translation>
 <translation id="722454870747268814">ရုပ်ဖျက်တဘ်အသစ်</translation>
 <translation id="7265758999917665941">ဤဝဘ်ဆိုက်အတွက် လုံးဝမလုပ်ရန်</translation>
 <translation id="7272437679830969316">သင်မည်သူမည်ဝါဖြစ်ကြောင်း အတည်ပြု၍ မရနိုင်ပါ။ စကားဝှက်ကို မိတ္ထူကူးမထားပါ။</translation>
@@ -860,6 +864,7 @@
 <translation id="7514365320538308">ဒေါင်းလုဒ်</translation>
 <translation id="7531345132340165516">လက်ရှိ ဝဘ်ဆိုက်</translation>
 <translation id="7537586195939242955">ဝမ်းနည်းပါသည်၊ သင့်လက်မှတ်ကို ယခုချိန်တွင် Passbook သို့ တပ်ဆင်၍ မရနိုင်ပါ။</translation>
+<translation id="7553234618121028547">ပိတ်ရန်အတွက် <ph name="BEGIN_LINK" />ဆက်တင်များ<ph name="END_LINK" /> ဖွင့်ပြီး ‘စကားဝှက် ရွေးစရာများ’ သို့သွားပါ။</translation>
 <translation id="7554791636758816595">တဘ် အသစ်</translation>
 <translation id="7561196759112975576">အမြဲတမ်း</translation>
 <translation id="7583004045319035904">သင့် 'ရုပ်ဖျက်တဘ်များ' ကို ဖွင့်ရန် <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> ကို သုံးပါ။</translation>
@@ -941,6 +946,7 @@
 <translation id="8101409298456377967">ဝဘ်ဆိုက်နှင့် အက်ပ်များသို့ လွယ်ကူစွာလက်မှတ်ထိုးဝင်နိုင်ရန် စကားဝှက်များ ပြုလုပ်ပြီး သိမ်းကာစီမံပါ။ <ph name="BEGIN_LINK" />ပိုမိုလေ့လာရန်<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">ပိတ်ပါ</translation>
 <translation id="8114753159095730575">ဖိုင်ကို ဒေါင်းလုဒ်လုပ်နိုင်ပါပြီ။ မျက်နှာပြင်အောက်ခြေနားတွင် ရွေးချယ်စရာများ ရှိပါသည်။</translation>
+<translation id="81313319706244542">၂။ စကားဝှက်များကို တို့ပါ</translation>
 <translation id="8132598642024322408">ယခင် <ph name="PREVIOUS_PRICE" /> ယခု <ph name="PRICE" />။</translation>
 <translation id="8136856065410661948">Apple Calendar တွင် Chrome နှင့် Google Lens မှ အစီအစဉ်များ ပြုလုပ်ရန် ၎င်းကိုသုံးမည်။</translation>
 <translation id="8156478151976189188">‘စကားဝှက်စင့်ခ်လုပ်ခြင်း’ ကို သုံး၍မရပါ</translation>
@@ -963,6 +969,7 @@
 <translation id="8319076807703933069">ရှာဖွေမှု အသစ်</translation>
 <translation id="8323906514956095947">နောက်ထပ် တဘ်ရွေးချယ်စရာများအတွက် တို့၍ဖိထားပါ</translation>
 <translation id="8328777765163860529">အားလုံး ပိတ်ရန်</translation>
+<translation id="8343993175958086504">သင့်အချက်အလက်များကို အရန်သိမ်းပြီး စက်တိုင်းတွင် သုံးနိုင်သည်။</translation>
 <translation id="8378714024927312812">သင်၏ 'အဖွဲ့အစည်း' က စီမံခန့်ခွဲထားသည်</translation>
 <translation id="8386068868580335421">ပြင်ဆင်သတ်မှတ်ရန်</translation>
 <translation id="8407669440184693619">ဤဝဘ်ဆိုက်အတွက် စကားဝှက်မရှိပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
index 6d8c973..1e7bd86 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -371,6 +371,7 @@
 <translation id="3861486700625780712">ਅਨੁਸਰਣ ਕਰਨਾ ਬੰਦ ਕਰੋ</translation>
 <translation id="3863769054730344136">ਆਪਣੇ ਡੀਵਾਈਸਾਂ 'ਤੇ ਭੇਜੋ</translation>
 <translation id="387280738075653372">Chrome ਨੂੰ ਇੱਥੋਂ ਡਾਊਨਲੋਡ ਕਰੋ।</translation>
+<translation id="3888863481921783344">ਇਸਦੀ ਵਰਤੋਂ ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ ਇਵੈਂਟ ਲਈ ਸੰਭਾਵਿਤ ਨਿਮੰਤਰਿਤ ਵਿਅਕਤੀ ਦਿਖਾਉਣ ਲਈ ਕੀਤੀ ਜਾਵੇਗੀ।</translation>
 <translation id="3892144330757387737">ਤੁਹਾਨੂੰ ਆਪਣਾ ਇਤਿਹਾਸ ਇੱਥੇ ਮਿਲੇਗਾ</translation>
 <translation id="3897092660631435901">ਮੀਨੂ</translation>
 <translation id="3904829425754749514">ਤੁਹਾਡੀ ਸੰਸਥਾ ਨੇ ਸਿੰਕ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ। ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਆਪਣੇ ਬੁੱਕਮਾਰਕ, ਇਤਿਹਾਸ, ਪਾਸਵਰਡ ਅਤੇ ਹੋਰ ਸੈਟਿੰਗਾਂ ਦੇਖ ਸਕਦੇ ਹੋ। ਜੇ ਤੁਸੀਂ ਤਬਦੀਲੀਆਂ ਕਰਦੇ ਹੋ, ਤਾਂ ਉਨ੍ਹਾਂ ਦਾ ਸਿੰਕ ਤੁਹਾਡੇ ਖਾਤੇ ਨਾਲ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ।</translation>
@@ -948,6 +949,7 @@
 <translation id="8114753159095730575">ਫ਼ਾਈਲ ਡਾਊਨਲੋਡ ਕਰਨਾ ਉਪਲਬਧ ਹੈ। ਵਿਕਲਪ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਲੇ ਪਾਸੇ ਕੋਲ ਉਪਲਬਧ ਹਨ।</translation>
 <translation id="81313319706244542">2. ਪਾਸਵਰਡਾਂ 'ਤੇ ਟੈਪ ਕਰੋ</translation>
 <translation id="8132598642024322408">ਹੁਣ <ph name="PRICE" /> ਹੈ, ਪਹਿਲਾਂ <ph name="PREVIOUS_PRICE" /> ਸੀ।</translation>
+<translation id="8136856065410661948">ਇਸਦੀ ਵਰਤੋਂ Chrome ਅਤੇ Google Lens ਤੋਂ ਤੁਹਾਡੇ Apple Calendar ਵਿੱਚ ਇਵੈਂਟ ਬਣਾਉਣ ਲਈ ਕੀਤੀ ਜਾਵੇਗੀ।</translation>
 <translation id="8156478151976189188">ਪਾਸਵਰਡ ਸਿੰਕ ਕੰਮ ਨਹੀਂ ਕਰ ਰਿਹਾ ਹੈ</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> ਖਾਤੇ</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />ਤੁਹਾਡੇ ਡੀਵਾਈਸ<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index 2e0c478a..11491585f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Przestań obserwować</translation>
 <translation id="3863769054730344136">Wyślij na swoje urządzenia</translation>
 <translation id="387280738075653372">Tutaj możesz pobrać Chrome.</translation>
+<translation id="3888863481921783344">Będziemy z tego korzystać, aby sugerować Ci osoby, które możesz zaprosić na swoje wydarzenie.</translation>
 <translation id="3892144330757387737">Tu znajdziesz swoją historię</translation>
 <translation id="3897092660631435901">Menu</translation>
 <translation id="3904829425754749514">Twoja organizacja wyłączyła synchronizację. Nadal masz dostęp do swoich zakładek, historii, haseł i innych ustawień na tym urządzeniu. Jeśli wprowadzisz zmiany, nie zostaną one zsynchronizowane na Twoim koncie.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Wyłącz</translation>
 <translation id="8114753159095730575">Pobrany plik jest dostępny. Opcje są dostępne u dołu ekranu.</translation>
 <translation id="8132598642024322408">Teraz <ph name="PRICE" />, wcześniej <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Będziemy z tego korzystać, aby tworzyć wydarzenia z Chrome i Obiektywu Google w kalendarzu Apple.</translation>
 <translation id="8156478151976189188">Funkcja Password Sync nie działa</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> kont(a)</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Twoje urządzenia<ph name="END_LINK" /> · <ph name="EMAIL" /></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 f6553056..be4e8be10 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Toque em "App do navegador padrão"</translation>
 <translation id="2820289420301699633">Seu administrador pode controlar o Chrome e acessar os dados desse navegador</translation>
 <translation id="2830972654601096923">Gerenciar endereços…</translation>
+<translation id="2834399722155632105">3. Toque em "Opções de senha"</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Redefinir Tradutor</translation>
 <translation id="2848086008667475748">Definir como padrão nas Configurações…</translation>
@@ -631,6 +632,7 @@
 <translation id="5899314093904173337">Para compartilhar com pessoas próximas, permita que elas leiam esse código QR com a câmera ou um app adequado</translation>
 <translation id="5911030830365207728">Google Tradutor</translation>
 <translation id="5913600720976431809">Opções para traduzir a página</translation>
+<translation id="5933515656458364246">Sincronize seus dados em todos os dispositivos.</translation>
 <translation id="5938160824633642847">Seu dispositivo está quase cheio. Libere espaço e tente novamente.</translation>
 <translation id="5948291296578561264">Isso permite que você salve fotos na sua biblioteca de fotos.</translation>
 <translation id="5951816930277761335">Compartilhe o link</translation>
@@ -712,6 +714,7 @@
 
 Seus dados foram criptografados com sua senha longa de sincronização no dia <ph name="TIME" />. Informe-a para começar a sincronização.</translation>
 <translation id="6418346271604475326">Preparando PDF</translation>
+<translation id="6429213933892582367">Abra "Opções de senha"</translation>
 <translation id="6434591244308415567">Ocorreu um erro. Tente novamente mais tarde.</translation>
 <translation id="6435236283694032571">Adicionar à Lista de leitura</translation>
 <translation id="6439338047467462846">Permitir todos</translation>
@@ -827,6 +830,7 @@
 <translation id="7203585745079012652">Falar as respostas</translation>
 <translation id="7207023858769244910">Sincronize para receber conteúdo com base nos seus interesses.</translation>
 <translation id="721597782417389033">Apelido do cartão inválido</translation>
+<translation id="7221173315674413369">Conheça os novos recursos e dicas em "Novidades"</translation>
 <translation id="722454870747268814">Nova guia anônima</translation>
 <translation id="7265758999917665941">Nunca para este site</translation>
 <translation id="7272437679830969316">Não é possível verificar sua identidade. Senha não copiada.</translation>
@@ -860,6 +864,7 @@
 <translation id="7514365320538308">Fazer o download</translation>
 <translation id="7531345132340165516">Site atual</translation>
 <translation id="7537586195939242955">Impossível instalar senha no livro de senhas no momento.</translation>
+<translation id="7553234618121028547">Para desativar, abra <ph name="BEGIN_LINK" />Configurações<ph name="END_LINK" /> e acesse "Opções de senha".</translation>
 <translation id="7554791636758816595">Nova guia</translation>
 <translation id="7561196759112975576">Sempre</translation>
 <translation id="7583004045319035904">Use o <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> para desbloquear suas guias anônimas.</translation>
@@ -940,6 +945,7 @@
 <translation id="8101409298456377967">Crie, salve e gerencie suas senhas para que possa fazer login em sites e apps com facilidade. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Desativar</translation>
 <translation id="8114753159095730575">O download de arquivo está disponível. Opções disponíveis perto da parte inferior da tela.</translation>
+<translation id="81313319706244542">2. Toque em "Senhas"</translation>
 <translation id="8132598642024322408">De <ph name="PREVIOUS_PRICE" /> por <ph name="PRICE" />.</translation>
 <translation id="8136856065410661948">Eventos vão ser criados no Calendário da Apple com o conteúdo do Chrome e do Google Lens.</translation>
 <translation id="8156478151976189188">O Password Sync não está funcionando</translation>
@@ -962,6 +968,7 @@
 <translation id="8319076807703933069">Nova pesquisa</translation>
 <translation id="8323906514956095947">Toque no botão e mantenha-o pressionado para ver mais opções da guia</translation>
 <translation id="8328777765163860529">Fechar todos</translation>
+<translation id="8343993175958086504">Faça backup e use seus dados em qualquer dispositivo.</translation>
 <translation id="8378714024927312812">Gerenciado pela sua organização</translation>
 <translation id="8386068868580335421">Redefinir</translation>
 <translation id="8407669440184693619">Nenhuma senha encontrada para este site</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index cc3c33d..3cf16ed7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Найдите раздел, где выбирается браузер по умолчанию.</translation>
 <translation id="2820289420301699633">Администратор сможет управлять всеми данными в браузере Chrome.</translation>
 <translation id="2830972654601096923">Управление адресами</translation>
+<translation id="2834399722155632105">3. Выберите "Настройки паролей".</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Сбросить настройки перевода</translation>
 <translation id="2848086008667475748">Сделать браузером по умолчанию в настройках</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Чтобы предоставить доступ пользователям поблизости, попросите их отсканировать этот QR-код с помощью камеры или специального приложения.</translation>
 <translation id="5911030830365207728">Google Переводчик</translation>
 <translation id="5913600720976431809">Параметры перевода страницы</translation>
+<translation id="5933515656458364246">Синхронизируйте данные на всех устройствах.</translation>
 <translation id="5938160824633642847">Освободите место на устройстве и повторите попытку.</translation>
 <translation id="5948291296578561264">Это позволяет вам сохранять фотографии в галерее.</translation>
 <translation id="5951816930277761335">Поделитесь ссылкой.</translation>
@@ -713,6 +715,7 @@
 
 Данные были зашифрованы с помощью кодовой фразы <ph name="TIME" />. Введите ее, чтобы начать синхронизацию.</translation>
 <translation id="6418346271604475326">Подготовка PDF</translation>
+<translation id="6429213933892582367">Откройте раздел "Настройки паролей".</translation>
 <translation id="6434591244308415567">Произошла ошибка. Повторите попытку позже.</translation>
 <translation id="6435236283694032571">Добавить в список для чтения</translation>
 <translation id="6439338047467462846">Разрешать все</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Озвучивать результаты поиска</translation>
 <translation id="7207023858769244910">Включите синхронизацию и смотрите интересный контент.</translation>
 <translation id="721597782417389033">Недопустимое название карты</translation>
+<translation id="7221173315674413369">Прочитайте новости и рекомендации на вкладке "Что нового"</translation>
 <translation id="722454870747268814">Новая вкладка инкогнито</translation>
 <translation id="7265758999917665941">Никогда для этого сайта</translation>
 <translation id="7272437679830969316">Не удалось пройти проверку. Пароль не скопирован.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Скачать</translation>
 <translation id="7531345132340165516">Текущий сайт</translation>
 <translation id="7537586195939242955">Не удалось внести данные в Passbook.</translation>
+<translation id="7553234618121028547">Чтобы отключить автозаполнение, выберите <ph name="BEGIN_LINK" />Настройки<ph name="END_LINK" /> и перейдите в раздел "Настройки паролей".</translation>
 <translation id="7554791636758816595">Новая вкладка</translation>
 <translation id="7561196759112975576">Всегда</translation>
 <translation id="7583004045319035904">Используйте <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> для разблокировки вкладок инкогнито.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Создавайте, сохраняйте и изменяйте пароли. Быстрый доступ к ним позволит вам легко входить в аккаунты на сайтах и в приложениях. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Отключить</translation>
 <translation id="8114753159095730575">Файл доступен для скачивания. Параметры указаны в нижней части экрана.</translation>
+<translation id="81313319706244542">2. Выберите "Пароли".</translation>
 <translation id="8132598642024322408">Новая цена: <ph name="PRICE" />, старая цена: <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Эти данные будут использоваться для создания мероприятий в календаре Apple непосредственно из Chrome и Google Объектива.</translation>
 <translation id="8156478151976189188">Синхронизация паролей не работает</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Новый поиск</translation>
 <translation id="8323906514956095947">Нажмите и удерживайте, чтобы открыть список дополнительных действий с вкладками</translation>
 <translation id="8328777765163860529">Закрыть все</translation>
+<translation id="8343993175958086504">Создайте резервную копию данных и используйте их на любом устройстве.</translation>
 <translation id="8378714024927312812">Управляется вашей организацией</translation>
 <translation id="8386068868580335421">Сбросить</translation>
 <translation id="8407669440184693619">Паролей для этого сайта не найдено</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb
index 19f1ba5..35aa653c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_si.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. පෙරනිමි බ්‍රව්සර යෙදුම තට්ටු කරන්න</translation>
 <translation id="2820289420301699633">ඔබගේ පරිපාලකට Chrome පාලනය කළ හැකි අතර එහි දත්තවලට ප්‍රවේශ විය හැකිය.</translation>
 <translation id="2830972654601096923">ලිපින කළමනාකරණය...</translation>
+<translation id="2834399722155632105">3. මුරපද විකල්ප තට්ටු කරන්න</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">පරිවර්තන සැකසීම් නැවත සකසන්න</translation>
 <translation id="2848086008667475748">සැකසීම් තුළ පෙරනිමි බවට පත් කරන්න…</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">අනුගමනය කිරීමෙන් ඉවත් වන්න</translation>
 <translation id="3863769054730344136">ඔබේ උපාංග වෙත යවන්න</translation>
 <translation id="387280738075653372">මෙතැනින් Chrome බා ගන්න.</translation>
+<translation id="3888863481921783344">ඔබේ සිදුවීමට හැකි ආරාධිතයන් පෙන්වීමට මෙය භාවිතා කරනු ඇත.</translation>
 <translation id="3892144330757387737">ඔබට ඔබේ ඉතිහාසය මෙහි හමුවනු ඇත</translation>
 <translation id="3897092660631435901">මෙනුව</translation>
 <translation id="3904829425754749514">ඔබගේ සංවිධානය සමමුහුර්ත කිරීම ක්‍රියාවිරහිත කර ඇත. ඔබට තවම ඔබගේ පිටුසන්, ඉතිහාසය, මුරපද සහ වෙනත් සැකසීම් මෙම උපාංගයෙහි බැලිය හැකිය. ඔබ වෙනස් කිරීම් සිදු කළහොත්, ඒවා ඔබගේ ගිණුමට සමමුහුර්ත නොවනු ඇත.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">ආසන්නයේ සිටින පුද්ගලයින් සමග බෙදා ගැනීමට, ඔවුන්ට මෙම QR කේතය ඔවුන්ගේ කැමරාවෙන් හෝ QR සැකෑන් කිරීමේ යෙදුමෙන් ස්කෑන් කිරීමට ඉඩ දෙන්න</translation>
 <translation id="5911030830365207728">Google පරිවර්තනය</translation>
 <translation id="5913600720976431809">පිටුව පරිවර්තන කිරීමට විවෘත කරන්න</translation>
+<translation id="5933515656458364246">සියලු උපාංගවල ඔබේ දත්ත සමමුහුර්ත කරන්න.</translation>
 <translation id="5938160824633642847">ඔබේ උපාංගය මුළුමනින්ම පිරී ඇත. ඉඩ නිදහස් කර නැවත උත්සාහ කරන්න.</translation>
 <translation id="5948291296578561264">මෙය ඔබට ඔබේ ඡායාරූප පුස්තකාලයට ඡායාරූප සුරැකීමට ඉඩ සලසයි.</translation>
 <translation id="5951816930277761335">සබැඳිය බෙදා ගන්න</translation>
@@ -712,6 +715,7 @@
 
 ඔබේ දත්ත <ph name="TIME" /> විට ඔබේ සමමුහුර්ත මුරවදන සමඟ සංකේතනය කර ඇත. සමමුහුර්ත කිරීම ආරම්භ කිරීමට ඇතුළු කරන්න.</translation>
 <translation id="6418346271604475326">PDF සූදානම් කිරීම</translation>
+<translation id="6429213933892582367">මුරපද විකල්ප විවෘත කරන්න</translation>
 <translation id="6434591244308415567">දෝෂයක් සිදු විය. පසුව නැවත උත්සාහ කරන්න.</translation>
 <translation id="6435236283694032571">කියවීම් ලැයිස්තුවට එක් කරන්න</translation>
 <translation id="6439338047467462846">සියල්ල ඉඩ දෙන්න</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">පිළිතුරු ආපසු දෙන්න</translation>
 <translation id="7207023858769244910">ඔබගේ ලැදිකම් මත පදනම්ව අන්තර්ගතය ලබා ගැනීමට සමමුහුර්ත කරන්න.</translation>
 <translation id="721597782417389033">වලංගු නොවන කාඩ්පත් අපනාමය</translation>
+<translation id="7221173315674413369">අලුත් දේ තුළ නව විශේෂාංග සහ ඉඟි ගවේෂණය කරන්න</translation>
 <translation id="722454870747268814">නව අප්‍රසිද්ධ පටිත්ත</translation>
 <translation id="7265758999917665941">කිසි විටෙක මෙම වෙබ් අඩවිය සඳහා නැත</translation>
 <translation id="7272437679830969316">ඔබගේ අනන්‍යතාව තහවුරු කළ නොහැකිය. මුරපදය පිටපත් නොකරන ලදී.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">බාගන්න</translation>
 <translation id="7531345132340165516">වත්මන් අඩවිය</translation>
 <translation id="7537586195939242955">කනගාටුයි, ඔබේ අවසර පත මේ අවස්ථාවේදී අවසර පොත වෙතට ස්ථාපනය කළ නොහැකිය.</translation>
+<translation id="7553234618121028547">ක්‍රියාවිරහිත කිරීම සඳහා, <ph name="BEGIN_LINK" />සැකසීම්<ph name="END_LINK" /> විවෘත කර මුරපද විකල්ප වෙත යන්න.</translation>
 <translation id="7554791636758816595">නව ටැබය</translation>
 <translation id="7561196759112975576">සැමවිටම</translation>
 <translation id="7583004045319035904">ඔබගේ අප්‍රකට ටැබ අගුලු හැරීමට <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> භාවිත කරන්න.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">ඔබට පහසුවෙන් අඩවි සහ යෙදුම්වලට පිරීමට හැකි වන පරිදි ඔබගේ මුරපද තනන්න, සුරකින්න සහ කළමනාකරණය කරන්න. <ph name="BEGIN_LINK" />තව දැන ගන්න<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">ක්‍රියා විරහිත කරන්න</translation>
 <translation id="8114753159095730575">ගොනුව බාගත හැකි වේ. තිරයේ පහළට ආසන්නව විකල්ප තිබේ.</translation>
+<translation id="81313319706244542">2. මුරපද තට්ටු කරන්න</translation>
 <translation id="8132598642024322408">දැන් <ph name="PRICE" /> පෙරදී <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Chrome සහ Google Lens වෙතින් ඔබේ Apple දින දර්ශනයේ සිදුවීම් තැනීමට මෙය භාවිතා කරනු ඇත.</translation>
 <translation id="8156478151976189188">මුරපද සමමුහුර්තය ක්‍රියා නොකරයි</translation>
 <translation id="8157532349231307196">ගිණුම් <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />ඔබගේ උපාංග<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">අලුත් සෙවීම</translation>
 <translation id="8323906514956095947">තවත් පටිති විකල්ප සඳහා ස්පර්ශ කරගෙන සිටින්න</translation>
 <translation id="8328777765163860529">සියල්ල වසන්න</translation>
+<translation id="8343993175958086504">ඔබේ දේවල් උපස්ථ කර එය ඕනෑම උපාංගයක භාවිතා කරන්න.</translation>
 <translation id="8378714024927312812">ඔබේ ආයතනය විසින් කළමනා කෙරේ</translation>
 <translation id="8386068868580335421">යළි සකසන්න</translation>
 <translation id="8407669440184693619">මෙම වෙබ් අඩවිය සඳහා මුරපද කිසිවක් හමු නොවිය</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index 769fa9096..a6e9f64 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Dotaknite se možnosti za privzeto aplikacijo za brskanje.</translation>
 <translation id="2820289420301699633">Skrbnik ima nadzor nad Chromom in lahko dostopa do podatkov v njem.</translation>
 <translation id="2830972654601096923">Upravljanje naslovov ...</translation>
+<translation id="2834399722155632105">3. Dotaknite se »Password Options« (Možnosti gesla).</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Ponastavi nastavitve za prevajanje</translation>
 <translation id="2848086008667475748">Nastavi kot privzeto v nastavitvah …</translation>
@@ -370,6 +371,7 @@
 <translation id="3861486700625780712">Ne spremljaj več</translation>
 <translation id="3863769054730344136">Pošiljanje v naprave</translation>
 <translation id="387280738075653372">Tukaj prenesite Chrome.</translation>
+<translation id="3888863481921783344">To bo uporabljeno za prikaz morebitnih povabljencev na vaš dogodek.</translation>
 <translation id="3892144330757387737">Tukaj bo prikazana zgodovina</translation>
 <translation id="3897092660631435901">Meni</translation>
 <translation id="3904829425754749514">Vaša organizacija je izklopila sinhronizacijo. Še vedno si lahko ogledate zaznamke, zgodovino, gesla in druge nastavitve v tej napravi. Če naredite spremembe, ne bodo sinhronizirane z računom.</translation>
@@ -631,6 +633,7 @@
 <translation id="5899314093904173337">Če želite deliti z osebami v bližini, naj s fotoaparatom ali aplikacijo za optično branje kod QR optično preberejo to kodo QR</translation>
 <translation id="5911030830365207728">Google Prevajalnik</translation>
 <translation id="5913600720976431809">Možnosti za prevod strani</translation>
+<translation id="5933515656458364246">Sinhronizacija podatkov v vseh napravah.</translation>
 <translation id="5938160824633642847">Shramba naprave je skoraj polna. Sprostite prostor in poskusite znova.</translation>
 <translation id="5948291296578561264">S tem je mogoče shranjevati fotografije v knjižnico fotografij.</translation>
 <translation id="5951816930277761335">Deljenje povezave</translation>
@@ -712,6 +715,7 @@
 
 Podatki so bili šifrirani z vašim geslom za sinhronizacijo <ph name="TIME" />. Vnesite ga, če želite začeti sinhronizacijo.</translation>
 <translation id="6418346271604475326">Preparing PDF</translation>
+<translation id="6429213933892582367">Odprite »Password Options« (Možnosti gesla).</translation>
 <translation id="6434591244308415567">Prišlo je do napake. Poskusite znova pozneje.</translation>
 <translation id="6435236283694032571">Dodajanje na bralni seznam</translation>
 <translation id="6439338047467462846">Dovoli vse</translation>
@@ -827,6 +831,7 @@
 <translation id="7203585745079012652">Izgovorjava odgovorov</translation>
 <translation id="7207023858769244910">Sinhronizirajte, da boste deležni vsebine glede na vaša zanimanja.</translation>
 <translation id="721597782417389033">Neveljaven vzdevek za kartico</translation>
+<translation id="7221173315674413369">Raziščite nove funkcije in nasvete v »Novosti«</translation>
 <translation id="722454870747268814">New Incognito Tab</translation>
 <translation id="7265758999917665941">Nikoli za to spletno mesto</translation>
 <translation id="7272437679830969316">Identitete ni mogoče preveriti. Geslo ni kopirano.</translation>
@@ -860,6 +865,7 @@
 <translation id="7514365320538308">Prenos</translation>
 <translation id="7531345132340165516">Trenutna stran</translation>
 <translation id="7537586195939242955">Elementa trenutno ni mogoče namesiti v Passbook.</translation>
+<translation id="7553234618121028547">Če želite izklopiti, odprite <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" /> (Nastavitve) in nato »Password Options« (Možnosti gesla).</translation>
 <translation id="7554791636758816595">Nov zavihek</translation>
 <translation id="7561196759112975576">Vedno</translation>
 <translation id="7583004045319035904">Za odklepanje anonimnih zavihkov uporabite to: <ph name="BIOMETRIC_AUTHENITCATION_TYPE" />.</translation>
@@ -941,7 +947,9 @@
 <translation id="8101409298456377967">Ustvarite, shranite in upravljajte gesla, tako da se lahko preprosto prijavite na spletnih mestih in v aplikacijah. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Izklop</translation>
 <translation id="8114753159095730575">Prenos datotek je na voljo. Možnosti so na voljo pri dnu zaslona.</translation>
+<translation id="81313319706244542">2. Dotaknite se »Passwords« (Gesla).</translation>
 <translation id="8132598642024322408">Zdaj: <ph name="PRICE" />, prej: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">To bo uporabljeno za ustvarjanje dogodkov v koledarju Apple Calendar s Chromom in Googlom Lens.</translation>
 <translation id="8156478151976189188">Sinhronizacija gesel ne deluje</translation>
 <translation id="8157532349231307196">Število računov: <ph name="NUMBER_OF_ACCOUNTS" /></translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Vaše naprave<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -962,6 +970,7 @@
 <translation id="8319076807703933069">Novo iskanje</translation>
 <translation id="8323906514956095947">Pridržite za več možnosti zavihkov</translation>
 <translation id="8328777765163860529">Zapri vse</translation>
+<translation id="8343993175958086504">Varnostno kopirajte vsebino in jo uporabljajte v poljubni napravi.</translation>
 <translation id="8378714024927312812">Upravlja vaša organizacija</translation>
 <translation id="8386068868580335421">Ponastavi</translation>
 <translation id="8407669440184693619">Za to spletno mesto ni najdenih gesel</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
index 847d0084..b7adc2c9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Mos e ndiq</translation>
 <translation id="3863769054730344136">Dërgo te pajisjet e tua</translation>
 <translation id="387280738075653372">Shkarko Chrome këtu.</translation>
+<translation id="3888863481921783344">Kjo do të përdoret për të të shfaqur të ftuarit e mundshëm në ngjarjen tënde.</translation>
 <translation id="3892144330757387737">Këtu do të gjesh historikun tënd</translation>
 <translation id="3897092660631435901">Menyja</translation>
 <translation id="3904829425754749514">Organizata jote e ka çaktivizuar sinkronizimin. Mund të shikosh ende faqeshënuesit, historikun, fjalëkalimet dhe cilësime të tjera në këtë pajisje. Nëse bën ndryshime, ato nuk do të sinkronizohen me llogarinë tënde.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Çaktivizo</translation>
 <translation id="8114753159095730575">Ofrohet shkarkimi i skedarit. Opsionet ofrohen pranë fundit të ekranit.</translation>
 <translation id="8132598642024322408">Tani <ph name="PRICE" />, ishte <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Kjo do të përdoret për të krijuar ngjarje në Apple Calendar nga Chrome dhe nga "Lentja e Google".</translation>
 <translation id="8156478151976189188">Sinkronizimi i fjalëkalimeve nuk po funksionon</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> llogari</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Pajisjet e tua<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
index da650d0..fdcb369 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Dodirnite Podrazumevana aplikacija za pregledanje</translation>
 <translation id="2820289420301699633">Administrator ima kontrolu nad Chrome-om i može da pristupa njegovim podacima</translation>
 <translation id="2830972654601096923">Upravljajte adresama...</translation>
+<translation id="2834399722155632105">3. Dodirnite Opcije lozinki</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Resetuj podešavanja Prevodioca</translation>
 <translation id="2848086008667475748">Podesi kao podrazumevano u Podešavanjima…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Da biste delili sa ljudima u blizini, dajte im da skeniraju ovaj QR kôd pomoću kamere ili aplikacije za skeniranje QR koda</translation>
 <translation id="5911030830365207728">Google prevodilac</translation>
 <translation id="5913600720976431809">Opcije za prevod stranice</translation>
+<translation id="5933515656458364246">Sinhronizujte podatke na svim uređajima.</translation>
 <translation id="5938160824633642847">Uređaj je skoro pun. Oslobodite prostor i probajte ponovo.</translation>
 <translation id="5948291296578561264">Ovo vam omogućava da čuvate slike u fototeci.</translation>
 <translation id="5951816930277761335">Delite link</translation>
@@ -713,6 +715,7 @@
 
 Podaci su šifrovani pomoću pristupne fraze za sinhronizaciju <ph name="TIME" />. Unesite je da biste započeli sinhronizaciju.</translation>
 <translation id="6418346271604475326">Priprema PDF datoteke</translation>
+<translation id="6429213933892582367">Otvorite Opcije lozinki</translation>
 <translation id="6434591244308415567">Došlo je do greške. Probajte ponovo kasnije.</translation>
 <translation id="6435236283694032571">Dodaj na Listu za čitanje</translation>
 <translation id="6439338047467462846">Sve je dozvoljeno</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Izgovaraj odgovore</translation>
 <translation id="7207023858769244910">Sinhronizujte da biste dobijali sadržaj na osnovu interesovanja.</translation>
 <translation id="721597782417389033">Nevažeći nadimak kartice</translation>
+<translation id="7221173315674413369">Istražite nove funkcije i savete u odeljku Šta je novo</translation>
 <translation id="722454870747268814">Nova kartica bez arhiviranja</translation>
 <translation id="7265758999917665941">Nikada za ovaj sajt</translation>
 <translation id="7272437679830969316">Verifikacija identiteta nije uspela. Lozinka nije kopirana.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Preuzmi</translation>
 <translation id="7531345132340165516">Trenutni sajt</translation>
 <translation id="7537586195939242955">Žao nam je, pristupna reč sada ne može da se instalira u Passbook.</translation>
+<translation id="7553234618121028547">Da biste isključili, otvorite <ph name="BEGIN_LINK" />Podešavanja<ph name="END_LINK" /> i idite u Opcije lozinki.</translation>
 <translation id="7554791636758816595">Nova kartica</translation>
 <translation id="7561196759112975576">Uvek</translation>
 <translation id="7583004045319035904">Otključajte kartice bez arhiviranja pomoću opcije <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /></translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Pravite i čuvajte lozinke i upravljajte njima da biste se lako prijavljivali na sajtove i u aplikacije. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Isključi</translation>
 <translation id="8114753159095730575">Preuzimanje datoteke nije dostupno. Opcije su navedene u dnu ekrana.</translation>
+<translation id="81313319706244542">2. Dodirnite Lozinke</translation>
 <translation id="8132598642024322408">Cena je <ph name="PRICE" />, a bila je <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Ovo će se koristiti za pravljenje događaja u Apple Calendar-u iz Chrome-a i Google objektiva.</translation>
 <translation id="8156478151976189188">Sinhronizacija lozinki ne radi</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Nova pretraga</translation>
 <translation id="8323906514956095947">Dodirnite i zadržite ako želite više opcija za kartice</translation>
 <translation id="8328777765163860529">Zatvori sve</translation>
+<translation id="8343993175958086504">Pravite rezervne kopije sadržaja i koristite ga na bilo kom uređaju.</translation>
 <translation id="8378714024927312812">Ovim upravlja organizacija</translation>
 <translation id="8386068868580335421">Resetuj</translation>
 <translation id="8407669440184693619">Nije pronađena nijedna lozinka za ovaj sajt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index 9a1277c..7b9c7fa 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Додирните Подразумевана апликација за прегледање</translation>
 <translation id="2820289420301699633">Администратор има контролу над Chrome-ом и може да приступа његовим подацима</translation>
 <translation id="2830972654601096923">Управљајте адресама...</translation>
+<translation id="2834399722155632105">3. Додирните Опције лозинки</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Ресетуј подешавања Преводиоца</translation>
 <translation id="2848086008667475748">Подеси као подразумевано у Подешавањима…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Да бисте делили са људима у близини, дајте им да скенирају овај QR кôд помоћу камере или апликације за скенирање QR кода</translation>
 <translation id="5911030830365207728">Google преводилац</translation>
 <translation id="5913600720976431809">Опције за превод странице</translation>
+<translation id="5933515656458364246">Синхронизујте податке на свим уређајима.</translation>
 <translation id="5938160824633642847">Уређај је скоро пун. Ослободите простор и пробајте поново.</translation>
 <translation id="5948291296578561264">Ово вам омогућава да чувате слике у фототеци.</translation>
 <translation id="5951816930277761335">Делите линк</translation>
@@ -713,6 +715,7 @@
 
 Подаци су шифровани помоћу приступне фразе за синхронизацију <ph name="TIME" />. Унесите је да бисте започели синхронизацију.</translation>
 <translation id="6418346271604475326">Припрема PDF датотеке</translation>
+<translation id="6429213933892582367">Отворите Опције лозинки</translation>
 <translation id="6434591244308415567">Дошло је до грешке. Пробајте поново касније.</translation>
 <translation id="6435236283694032571">Додај на Листу за читање</translation>
 <translation id="6439338047467462846">Све је дозвољено</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Изговарај одговоре</translation>
 <translation id="7207023858769244910">Синхронизујте да бисте добијали садржај на основу интересовања.</translation>
 <translation id="721597782417389033">Неважећи надимак картице</translation>
+<translation id="7221173315674413369">Истражите нове функције и савете у одељку Шта је ново</translation>
 <translation id="722454870747268814">Нова картица без архивирањa</translation>
 <translation id="7265758999917665941">Никада за овај сајт</translation>
 <translation id="7272437679830969316">Верификација идентитета није успела. Лозинка није копирана.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Преузми</translation>
 <translation id="7531345132340165516">Тренутни сајт</translation>
 <translation id="7537586195939242955">Жао нам је, приступна реч сада не може да се инсталира у Passbook.</translation>
+<translation id="7553234618121028547">Да бисте искључили, отворите <ph name="BEGIN_LINK" />Подешавања<ph name="END_LINK" /> и идите у Опције лозинки.</translation>
 <translation id="7554791636758816595">Нова картица</translation>
 <translation id="7561196759112975576">Увек</translation>
 <translation id="7583004045319035904">Откључајте картице без архивирања помоћу опције <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /></translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Правите и чувајте лозинке и управљајте њима да бисте се лако пријављивали на сајтове и у апликације. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Искључи</translation>
 <translation id="8114753159095730575">Преузимање датотеке није доступно. Опције су наведене у дну екрана.</translation>
+<translation id="81313319706244542">2. Додирните Лозинке</translation>
 <translation id="8132598642024322408">Цена је <ph name="PRICE" />, а била је <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Ово ће се користити за прављење догађаја у Apple Calendar-у из Chrome-а и Google објектива.</translation>
 <translation id="8156478151976189188">Синхронизација лозинки не ради</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Нова претрага</translation>
 <translation id="8323906514956095947">Додирните и задржите ако желите више опција за картице</translation>
 <translation id="8328777765163860529">Затвори све</translation>
+<translation id="8343993175958086504">Правите резервне копије садржаја и користите га на било ком уређају.</translation>
 <translation id="8378714024927312812">Овим управља организација</translation>
 <translation id="8386068868580335421">Ресетуј</translation>
 <translation id="8407669440184693619">Није пронађена ниједна лозинка за овај сајт</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
index 0bfa0b7..07e837f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Sluta följa</translation>
 <translation id="3863769054730344136">Skicka till dina enheter</translation>
 <translation id="387280738075653372">Ladda ned Chrome här.</translation>
+<translation id="3888863481921783344">Detta används för att visa möjliga användare att bjuda in till händelser.</translation>
 <translation id="3892144330757387737">Du hittar historiken här</translation>
 <translation id="3897092660631435901">Meny</translation>
 <translation id="3904829425754749514">Organisationen har inaktiverat synkronisering. Bokmärken, lösenord, historik och andra inställningar finns fortfarande kvar på enheten. Om du ändrar något synkroniseras inte detta med kontot.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Inaktivera</translation>
 <translation id="8114753159095730575">En filnedladdning är tillgänglig. Alternativ visas nära skärmens nederkant.</translation>
 <translation id="8132598642024322408">Nedsatt från <ph name="PREVIOUS_PRICE" /> till <ph name="PRICE" />.</translation>
+<translation id="8136856065410661948">Detta används för att skapa händelser i Apple Kalender från Chrome och Google Lens.</translation>
 <translation id="8156478151976189188">Det går inte att synkronisera lösenord</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> konton</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Dina enheter<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index ab55de8..fc401434 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">பின்தொடர்வதை நிறுத்து</translation>
 <translation id="3863769054730344136">என் சாதனங்களுக்கு அனுப்பு</translation>
 <translation id="387280738075653372">Chromeமை இங்கே பதிவிறக்கவும்.</translation>
+<translation id="3888863481921783344">உங்கள் நிகழ்விற்கு அழைக்கப்படக்கூடியவர்களைக் காட்டுவதற்கு இது பயன்படுத்தப்படும்.</translation>
 <translation id="3892144330757387737">உங்கள் வரலாற்றை இங்கே பார்ப்பீர்கள்</translation>
 <translation id="3897092660631435901">மெனு</translation>
 <translation id="3904829425754749514">உங்கள் நிறுவனம் ஒத்திசைவை முடக்கியுள்ளது. இருப்பினும் இந்தச் சாதனத்தில் உள்ள உங்கள் புக்மார்க்குகள், பதிவுகள், கடவுச்சொற்கள் மற்றும் பிற அமைப்புகளை உங்களால் பார்க்க முடியும். ஏதேனும் மாற்றங்களைச் செய்தால் அவை உங்கள் கணக்குடன் ஒத்திசைக்கப்படாது.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">முடக்கு</translation>
 <translation id="8114753159095730575">ஃபைலைப் பதிவிறக்கிக்கொள்ளலாம். திரையின் அடிப்பகுதிக்கு அருகில், விருப்பங்கள் உள்ளன.</translation>
 <translation id="8132598642024322408">தற்போதைய விலை: <ph name="PRICE" />, முந்தைய விலை: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Chrome, Google Lens ஆகியவற்றில் இருந்து உங்கள் Apple Calendarரில் நிகழ்வுகளை உருவாக்க இது பயன்படுத்தப்படும்.</translation>
 <translation id="8156478151976189188">கடவுச்சொல்லை ஒத்திசைக்க முடியவில்லை</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> கணக்குகள்</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />உங்கள் சாதனங்கள்<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 7cefea3..7ec3f2a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -87,6 +87,7 @@
 <translation id="1545749641540134597">สแกนโค้ด QR</translation>
 <translation id="1552525382687785070">ผู้ดูแลระบบปิดใช้การซิงค์</translation>
 <translation id="1554477036522844996">หน้าต่างใหม่</translation>
+<translation id="1565371473877914088">แท็บใหม่ที่ไม่ระบุตัวตน</translation>
 <translation id="1580715474678097352">รับการปกป้องจากเว็บไซต์ที่เป็นอันตราย</translation>
 <translation id="1580783302095112590">ส่งอีเมลแล้ว</translation>
 <translation id="1582732959743469162">การดำเนินการนี้จะหยุดการดาวน์โหลดที่ดำเนินอยู่ทั้งหมด</translation>
@@ -133,6 +134,7 @@
 <translation id="1981118202195772574">อุปกรณ์เคลื่อนที่</translation>
 <translation id="1989112275319619282">เปิดดู</translation>
 <translation id="199425419756152024">ดูรหัสผ่าน</translation>
+<translation id="2010008505735295285">โหลดซ้ำ</translation>
 <translation id="2015722694326466240">หากต้องการดูรหัสผ่าน คุณต้องตั้งพาสโค้ดในอุปกรณ์ก่อน</translation>
 <translation id="2021670401941426298">ดูวิธีลบประวัติการค้นหา (หากมี) ของเครื่องมือค้นหาที่คุณใช้</translation>
 <translation id="202292859882676807">อนุญาตให้เข้าถึงไมโครโฟน</translation>
@@ -299,6 +301,7 @@
 <translation id="3272527697863656322">ยกเลิก</translation>
 <translation id="3277021493514034324">คัดลอกที่อยู่เว็บไซต์แล้ว</translation>
 <translation id="3285962946108803577">แชร์หน้าเว็บ...</translation>
+<translation id="3289505634533552500">ค้นหาด้วยเสียง</translation>
 <translation id="3290875554372353449">เลือกบัญชี</translation>
 <translation id="3305294846493618482">เพิ่มเติม</translation>
 <translation id="3311748811247479259">ปิด</translation>
@@ -556,6 +559,7 @@
 <translation id="5295239312320826323">นำบัญชี <ph name="USER_EMAIL" /> ออกใช่ไหม</translation>
 <translation id="5300589172476337783">แสดง</translation>
 <translation id="5317780077021120954">บันทึก</translation>
+<translation id="5318298563956633672">คุณติดตามผลิตภัณฑ์นี้อยู่แล้ว</translation>
 <translation id="5339316356165661760">เปิดการซิงค์</translation>
 <translation id="536067926684072644">แสดงบุ๊กมาร์ก</translation>
 <translation id="5360976571138293719">ดูการตั้งค่าเพิ่มเติมเกี่ยวกับความเป็นส่วนตัว ความปลอดภัย และการรวบรวมข้อมูลได้ที่<ph name="BEGIN_LINK" />บริการของ Google<ph name="END_LINK" /></translation>
@@ -619,6 +623,7 @@
 <translation id="581659025233126501">เปิดการซิงค์</translation>
 <translation id="5819208479324046259">จัดการโดย <ph name="MANAGER" /> <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="5833643789537100742">บันทึกรหัสผ่าน วิธีการชําระเงิน และที่อยู่เพื่อให้ Chrome ป้อนข้อความอัตโนมัติภายหลัง</translation>
+<translation id="5834415013958049700">รูปภาพที่คุณคัดลอกด้วย Lens</translation>
 <translation id="5846482154967366008">เครื่องมือค้นหา</translation>
 <translation id="5854790677617711513">เกิน 30 วัน</translation>
 <translation id="5857090052475505287">โฟลเดอร์ใหม่</translation>
@@ -646,6 +651,7 @@
 <translation id="5984222099446776634">เข้าชมล่าสุด</translation>
 <translation id="5988097621740394599">ดูการลดราคาในแท็บ</translation>
 <translation id="5988851877894965432">เปิด URL ใน Chrome</translation>
+<translation id="6006672969046233841">แท็บใหม่</translation>
 <translation id="6012140227487808125">กำลังเข้ารหัส…</translation>
 <translation id="6021332621416007159">เปิดใน...</translation>
 <translation id="6027945736510816438">คุณหมายถึง <ph name="WEBSITE" /> ใช่ไหม</translation>
@@ -832,6 +838,7 @@
 <translation id="7207023858769244910">ซิงค์เพื่อรับเนื้อหาตามความสนใจของคุณ</translation>
 <translation id="721597782417389033">ชื่อเล่นของบัตรไม่ถูกต้อง</translation>
 <translation id="7221173315674413369">สำรวจฟีเจอร์และเคล็ดลับใหม่ๆ ใน "มีอะไรใหม่"</translation>
+<translation id="7223102419539744003">ปิดแท็บ</translation>
 <translation id="722454870747268814">แท็บที่ไม่ระบุตัวตนใหม่</translation>
 <translation id="7265758999917665941">ไม่จดจำสำหรับเว็บไซต์นี้</translation>
 <translation id="7272437679830969316">ยืนยันตัวตนของคุณไม่ได้ คัดลอกรหัสผ่านไม่สำเร็จ</translation>
@@ -903,6 +910,7 @@
 <translation id="7856733331829174190">ดาวน์โหลดไม่ได้</translation>
 <translation id="785938070103630874">เปิดรหัสผ่าน วิธีการชําระเงิน หรือที่อยู่ และอื่นๆ</translation>
 <translation id="7859704718976024901">ประวัติการเข้าชม</translation>
+<translation id="7870750252270996949">รูปภาพที่คัดลอกด้วย Lens</translation>
 <translation id="7879275349003161544">แสดงการดาวน์โหลด</translation>
 <translation id="7884694604461143138">ประวัติการค้นหา (พบ <ph name="COUNT" /> รายการ)</translation>
 <translation id="7887198238286927132">Chrome จะไม่ป้อนข้อความลงในช่องนี้โดยอัตโนมัติเพื่อปกป้องความเป็นส่วนตัวของคุณ</translation>
@@ -1027,6 +1035,7 @@
 <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
 <translation id="8810413591309742901">มุมมองเริ่มต้นของเว็บไซต์</translation>
 <translation id="8820817407110198400">บุ๊กมาร์ก</translation>
+<translation id="882557203579758546">ค้นหาในหน้าเว็บ…</translation>
 <translation id="8840513115188359703">คุณจะไม่ออกจากระบบบัญชี Google</translation>
 <translation id="8843129975935593190">องค์กรของคุณจำกัดสิ่งที่คุณสามารถซิงค์</translation>
 <translation id="8849001918648564819">ซ่อน</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index fe19958..13e8794 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">Takibi bırak</translation>
 <translation id="3863769054730344136">Cihaza Gönder</translation>
 <translation id="387280738075653372">Chrome'u buradan indirin.</translation>
+<translation id="3888863481921783344">Bu bilgiler, etkinliğinize katılması muhtemel olan davetlileri göstermek için kullanılır.</translation>
 <translation id="3892144330757387737">Geçmişiniz burada gösterilir</translation>
 <translation id="3897092660631435901">Menü</translation>
 <translation id="3904829425754749514">Kuruluşunuz senkronizasyonu kapattı. Yer işaretleri, geçmiş, şifreler ve diğer ayarlarınızı bu cihazda görmeye devam edebilirsiniz. Değişiklik yaparsanız bu değişiklikler hesabınızla senkronize edilmez.</translation>
@@ -942,6 +943,7 @@
 <translation id="8105368624971345109">Kapat</translation>
 <translation id="8114753159095730575">Dosya indirme işlevi kullanılabilir. Seçenekler ekranın alt tarafındadır.</translation>
 <translation id="8132598642024322408">Şimdiki fiyat: <ph name="PRICE" />; eski fiyat: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Bu bilgiler, Chrome ve Google Lens'ten alınan etkinlikleri Apple Takvim'de oluşturmak için kullanılır.</translation>
 <translation id="8156478151976189188">Şifre Senkronizasyonu Çalışmıyor</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> hesap</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Cihazlarınız<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
index 05246425..68a82c4f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2۔ ڈیفالٹ براؤزر ایپ تھپتھپائیں</translation>
 <translation id="2820289420301699633">‏آپ کے منتظم کو Chrome پر کنٹرول حاصل ہے اور وہ اس کے ڈیٹا تک رسائی حاصل کر سکتا ہے</translation>
 <translation id="2830972654601096923">پتوں کا نظم کریں...</translation>
+<translation id="2834399722155632105">3. پاس ورڈ کے اختیارات پر تھپتھپائیں۔</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />، <ph name="STATE" />، <ph name="URL" /></translation>
 <translation id="2843803966603263712">‏Translate کی ترتیبات کو دوبارہ ترتیب دیں</translation>
 <translation id="2848086008667475748">ترتیبات میں ڈیفالٹ بنائیں…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">‏قریبی لوگوں سے اشتراک کرنے کے لیے، انہیں اس QR کوڈ کو ان کے کیمرے یا QR اسکینر ایپ سے اسکین کرنے دیں</translation>
 <translation id="5911030830365207728">Google Translate</translation>
 <translation id="5913600720976431809">صفحہ کا ترجمہ کرنے کے اختیارات</translation>
+<translation id="5933515656458364246">تمام آلات پر اپنے ڈیٹا کی مطابقت پذیری کریں۔</translation>
 <translation id="5938160824633642847">آپ کے آلہ کا اسٹوریج تقریباً بھرا ہوا ہے۔ جگہ خالی کر کے دوبارہ کوشش کریں۔</translation>
 <translation id="5948291296578561264">یہ آپ کو اپنی تصویری لائبریری میں تصاویر محفوظ کرنے دیتا ہے۔</translation>
 <translation id="5951816930277761335">لنک کا اشتراک کریں</translation>
@@ -713,6 +715,7 @@
 
 آپ کے ڈیٹا کی آپ کے مطابقت پذیر پاس فریز کے ساتھ <ph name="TIME" /> پر مرموز کاری کی گئی تھی۔ مطابقت پذیری شروع کرنے کیلئے اسے درج کریں۔</translation>
 <translation id="6418346271604475326">‏PDF تیار ہو رہی ہے</translation>
+<translation id="6429213933892582367">پاس ورڈ کے اختیارات کھولیں</translation>
 <translation id="6434591244308415567">ایک خرابی پیش آ گئی۔ بعد میں دوبارہ کوشش کریں۔</translation>
 <translation id="6435236283694032571">پڑھنے کی فہرست میں شامل کریں</translation>
 <translation id="6439338047467462846">سبھی کو اجازت دیں</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">جوابات دوبارہ بولیں</translation>
 <translation id="7207023858769244910">اپنی دلچسپیوں کی بنیاد پر مواد حاصل کرنے کے لیے مطابقت پذیری کریں۔</translation>
 <translation id="721597782417389033">کارڈ کا غلط عرفی نام</translation>
+<translation id="7221173315674413369">نیا کیا ہے میں نئی خصوصیات اور تجاویز دریافت کریں</translation>
 <translation id="722454870747268814">نیا پوشیدگی ٹیب</translation>
 <translation id="7265758999917665941">اس سائٹ کیلئے کبھی نہیں</translation>
 <translation id="7272437679830969316">آپ کی شناخت کی توثیق نہیں کی جا سکتی۔ پاس ورڈ کاپی نہیں ہوا۔</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">ڈاؤن لوڈ کریں</translation>
 <translation id="7531345132340165516">موجودہ سائٹ</translation>
 <translation id="7537586195939242955">‏معذرت، آپ کا Pass اس وقت Passbook میں انسٹال نہیں کیا جا سکتا ہے۔</translation>
+<translation id="7553234618121028547">آف کرنے کے لیے، <ph name="BEGIN_LINK" />ترتیبات<ph name="END_LINK" /> کھولیں اور پاس ورڈ کے اختیارات پر جائیں۔</translation>
 <translation id="7554791636758816595">نیا ٹیب</translation>
 <translation id="7561196759112975576">ہمیشہ</translation>
 <translation id="7583004045319035904">اپنے پوشیدگی ٹیبز کو غیر مقفل کرنے کیلئے <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> کا استعمال کریں۔</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">اپنے پاس ورڈز تخلیق کریں، محفوظ کریں اور ان کا نظم کریں تاکہ آپ آسانی سے سائٹس اور ایپس میں سائن ان کر سکیں۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">آف کریں</translation>
 <translation id="8114753159095730575">فائل ڈاؤن لوڈ دستیاب ہے۔ اختیارات اسکرین کے نچلے حصے کے قریب دستیاب ہیں۔</translation>
+<translation id="81313319706244542">2. پاس ورڈز پر تھپتھپائیں</translation>
 <translation id="8132598642024322408">اب <ph name="PRICE" /> پہلے <ph name="PREVIOUS_PRICE" /> تھی۔</translation>
 <translation id="8136856065410661948">‏اس کا استعمال Chrome اور Google لینز سے آپ کے Apple کیلنڈر میں ایونٹس تخلیق کرنے کے لیے کیا جائے گا۔</translation>
 <translation id="8156478151976189188">پاس ورڈ کی مطابقت پذیری کام نہیں کر رہی ہے</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">نئی تلاش</translation>
 <translation id="8323906514956095947">ٹیب کے مزید اختیارات کیلئے ٹچ کریں اور دبائے رکھیں</translation>
 <translation id="8328777765163860529">تمام بند کریں</translation>
+<translation id="8343993175958086504">اپنے ڈیٹا کا بیک اپ لیں اور اسے کسی بھی آلے پر استعمال کریں۔</translation>
 <translation id="8378714024927312812">آپ کی تنظیم کے زیر نظم</translation>
 <translation id="8386068868580335421">ری سیٹ کریں</translation>
 <translation id="8407669440184693619">اس سائٹ کے لیے کوئی پاس ورڈ نہیں ملا</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
index e90302418..96af820 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -371,6 +371,7 @@
 <translation id="3861486700625780712">Kuzatuvni bekor qilish</translation>
 <translation id="3863769054730344136">Qurilmalaringizga yuborish</translation>
 <translation id="387280738075653372">Chrorome ilovasini yuklab olish.</translation>
+<translation id="3888863481921783344">Bu sizga tadbiringizga ehtimoliy takliflarni koʻrsatish uchun ishlatiladi.</translation>
 <translation id="3892144330757387737">Brauzer tarixi shu yerda chiqadi</translation>
 <translation id="3897092660631435901">Menyu</translation>
 <translation id="3904829425754749514">Sinxronizatsiya tashkilotingiz tomonidan faolsizlantirilgan. Bu qurilmadagi bukmarklar, tarix, parollar va boshqa sozlamalarni koʻrishingiz mumkin. Oʻzgartirish kiritilsa, ular hisobingizga sinxronlanmaydi.</translation>
@@ -948,6 +949,7 @@
 <translation id="8114753159095730575">Faylni yuklab olish mumkin. Qo‘shimcha amallar ekranning pastki qismida.</translation>
 <translation id="81313319706244542">2. Parollarni bosing</translation>
 <translation id="8132598642024322408">Joriy narxi: <ph name="PRICE" />, eski narxi: <ph name="PREVIOUS_PRICE" />.</translation>
+<translation id="8136856065410661948">Bu Chrome va Google Lensdan Apple Calendar ilovasida tadbirlar yaratish uchun ishlatiladi.</translation>
 <translation id="8156478151976189188">Parollar sinxronizatsiyasi ishlamayapti</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> ta hisob</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />Qurilmalaringiz<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index bcb5762..319685b48 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Nhấn vào Ứng dụng trình duyệt mặc định</translation>
 <translation id="2820289420301699633">Quản trị viên của bạn có quyền kiểm soát Chrome và có thể truy cập dữ liệu của Chrome</translation>
 <translation id="2830972654601096923">Quản lý địa chỉ...</translation>
+<translation id="2834399722155632105">3. Nhấn vào Tuỳ chọn mật khẩu</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Đặt lại cài đặt dịch</translation>
 <translation id="2848086008667475748">Đặt thành Mặc định trong phần Cài đặt…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Để chia sẻ với những người ở gần, hãy cho phép họ quét mã QR này bằng máy ảnh hoặc ứng dụng quét mã QR</translation>
 <translation id="5911030830365207728">Google Dịch</translation>
 <translation id="5913600720976431809">Các tùy chọn dịch trang</translation>
+<translation id="5933515656458364246">Đồng bộ hoá dữ liệu của bạn trên mọi thiết bị.</translation>
 <translation id="5938160824633642847">Thiết bị của bạn gần hết không gian lưu trữ. Hãy giải phóng dung lượng và thử lại.</translation>
 <translation id="5948291296578561264">Điều này cho phép bạn lưu ảnh vào thư viện ảnh của mình.</translation>
 <translation id="5951816930277761335">Chia sẻ đường liên kết</translation>
@@ -713,6 +715,7 @@
 
 Dữ liệu của bạn đã được mã hóa bằng cụm mật khẩu đồng bộ hóa của bạn vào <ph name="TIME" />. Nhập cụm mật khẩu đó để bắt đầu đồng bộ hóa.</translation>
 <translation id="6418346271604475326">Đang chuẩn bị PDF</translation>
+<translation id="6429213933892582367">Mở Tuỳ chọn mật khẩu</translation>
 <translation id="6434591244308415567">Đã xảy ra lỗi. Hãy thử lại sau.</translation>
 <translation id="6435236283694032571">Thêm vào Danh sách đọc</translation>
 <translation id="6439338047467462846">Cho phép tất cả</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Trả lời bằng giọng nói</translation>
 <translation id="7207023858769244910">Đồng bộ hóa để nhận nội dung dựa trên mối quan tâm của bạn.</translation>
 <translation id="721597782417389033">Biệt hiệu của thẻ không hợp lệ</translation>
+<translation id="7221173315674413369">Khám phá các mẹo và tính năng mới trong phần Tính năng mới</translation>
 <translation id="722454870747268814">Thẻ ẩn danh mới</translation>
 <translation id="7265758999917665941">Không bao giờ đối với trang web này</translation>
 <translation id="7272437679830969316">Không thể xác minh danh tính của bạn. Chưa sao chép mật khẩu.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Tải xuống</translation>
 <translation id="7531345132340165516">Trang hiện tại</translation>
 <translation id="7537586195939242955">Rất tiếc, không thể cài đặt Pass (Vé xem) của bạn vào Passbook (Ví điện tử) lúc này.</translation>
+<translation id="7553234618121028547">Để tắt, hãy mở phần <ph name="BEGIN_LINK" />Cài đặt<ph name="END_LINK" /> rồi chuyển đến phần Tuỳ chọn mật khẩu.</translation>
 <translation id="7554791636758816595">Thẻ mới</translation>
 <translation id="7561196759112975576">Luôn luôn</translation>
 <translation id="7583004045319035904">Dùng <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> để mở khóa các thẻ Ẩn danh.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Tạo, lưu và quản lý mật khẩu để bạn có thể dễ dàng đăng nhập vào các trang web và ứng dụng. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Tắt</translation>
 <translation id="8114753159095730575">Hiện đã có tệp tải xuống. Bạn có thể sử dụng các tùy chọn ở gần cuối màn hình.</translation>
+<translation id="81313319706244542">2. Nhấn vào Mật khẩu</translation>
 <translation id="8132598642024322408">Giá mới: <ph name="PRICE" />, giá cũ: <ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Thông tin này sẽ được dùng để tạo sự kiện trong Lịch Apple trên Chrome và Google Ống kính.</translation>
 <translation id="8156478151976189188">Tính năng đồng bộ hóa mật khẩu hiện không hoạt động</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Tìm kiếm mới</translation>
 <translation id="8323906514956095947">Chạm và giữ để hiển thị thêm tùy chọn về thẻ</translation>
 <translation id="8328777765163860529">Đóng tất cả</translation>
+<translation id="8343993175958086504">Sao lưu và sử dụng dữ liệu của bạn trên mọi thiết bị.</translation>
 <translation id="8378714024927312812">Do tổ chức của bạn quản lý</translation>
 <translation id="8386068868580335421">Đặt lại</translation>
 <translation id="8407669440184693619">Không tìm thấy mật khẩu nào cho trang web này</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
index 3f46b4b..a1624a18 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -370,6 +370,7 @@
 <translation id="3861486700625780712">取消关注</translation>
 <translation id="3863769054730344136">发送到您的设备</translation>
 <translation id="387280738075653372">可从此处下载 Chrome。</translation>
+<translation id="3888863481921783344">这是为了向您显示有望邀请哪些人来参加您的活动。</translation>
 <translation id="3892144330757387737">您的历史记录会显示在此处</translation>
 <translation id="3897092660631435901">菜单</translation>
 <translation id="3904829425754749514">贵组织已关闭同步功能。您仍可在此设备上查看自己的书签、历史记录、密码及其他设置。如果您做出更改,这些更改将不会同步到您的帐号。</translation>
@@ -940,6 +941,7 @@
 <translation id="8105368624971345109">关闭</translation>
 <translation id="8114753159095730575">已可下载文件。选项位于屏幕底部附近。</translation>
 <translation id="8132598642024322408">现价 <ph name="PRICE" />,原价 <ph name="PREVIOUS_PRICE" />。</translation>
+<translation id="8136856065410661948">这是为了在 Apple 日历中通过 Chrome 和 Google 智能镜头创建活动。</translation>
 <translation id="8156478151976189188">无法同步密码</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> 个帐号</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />您的设备<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
index df4153a..1fe7f26 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -232,7 +232,7 @@
 <translation id="2815198996063984598">2. 輕按 [預設瀏覽器應用程式]</translation>
 <translation id="2820289420301699633">管理員可控制 Chrome,並存取其中的資料</translation>
 <translation id="2830972654601096923">管理地址…</translation>
-<translation id="2834399722155632105">3. 輕觸「密碼選項」</translation>
+<translation id="2834399722155632105">3. 輕按 [密碼選項]</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />,<ph name="STATE" />,<ph name="URL" /></translation>
 <translation id="2843803966603263712">重設翻譯設定</translation>
 <translation id="2848086008667475748">在「設定」中設定為「預設」…</translation>
@@ -371,7 +371,7 @@
 <translation id="3861486700625780712">取消追蹤</translation>
 <translation id="3863769054730344136">傳送至您的裝置</translation>
 <translation id="387280738075653372">在此下載 Chrome。</translation>
-<translation id="3888863481921783344">系統會使用這些資料向你顯示活動的可能邀請對象。</translation>
+<translation id="3888863481921783344">系統會透過此操作,向您顯示可能受邀出席活動的人。</translation>
 <translation id="3892144330757387737">您可在此查看記錄</translation>
 <translation id="3897092660631435901">選單</translation>
 <translation id="3904829425754749514">您的機構已關閉同步功能。您仍可在此裝置上查看自己的書籤、記錄、密碼和其他設定,但作出的變更將不會同步到您的帳戶。</translation>
@@ -573,7 +573,7 @@
 <translation id="5489208564673669003">如要管理所有網站的 Cookie,請參閱 <ph name="BEGIN_LINK" />Cookie 設定<ph name="END_LINK" />。</translation>
 <translation id="5490005495580364134">封鎖所有 Cookie (不建議)</translation>
 <translation id="5513681519188741830"><ph name="TIME" /> 小時前</translation>
-<translation id="5520466080178053306">依序輕觸「密碼管理工具」和「新增」</translation>
+<translation id="5520466080178053306">輕按 [密碼管理工具],然後輕按 [新增]</translation>
 <translation id="5525095647255982834">如要將此分頁傳送至其他裝置,請在目的地裝置上登入 Chrome。</translation>
 <translation id="5525269841082836315">建立通關密語</translation>
 <translation id="5542540507657872337">找到 <ph name="COUNT" /> 個已開啟的分頁</translation>
@@ -715,7 +715,7 @@
 
 您已於 <ph name="TIME" />使用同步密碼短語加密資料,請輸入密碼短語開始同步資料。</translation>
 <translation id="6418346271604475326">正在準備 PDF</translation>
-<translation id="6429213933892582367">開啟「密碼選項」</translation>
+<translation id="6429213933892582367">開啟 [密碼選項]</translation>
 <translation id="6434591244308415567">發生錯誤,請稍後再試。</translation>
 <translation id="6435236283694032571">加入閱讀清單</translation>
 <translation id="6439338047467462846">全部允許</translation>
@@ -829,7 +829,7 @@
 <translation id="7203585745079012652">語音答覆</translation>
 <translation id="7207023858769244910">啟用同步功能,以便系統根據您的興趣提供內容。</translation>
 <translation id="721597782417389033">無效的信用卡暱稱</translation>
-<translation id="7221173315674413369">你可以前往「新功能」頁面探索新功能及相關提示</translation>
+<translation id="7221173315674413369">在「最新功能」中探索新功能和提示</translation>
 <translation id="722454870747268814">新增無痕式分頁</translation>
 <translation id="7265758999917665941">一律不儲存此網站的密碼</translation>
 <translation id="7272437679830969316">無法驗證您的身分。未複製密碼。</translation>
@@ -863,7 +863,7 @@
 <translation id="7514365320538308">下載</translation>
 <translation id="7531345132340165516">目前網站</translation>
 <translation id="7537586195939242955">很抱歉,目前無法將您的通行票證加到 Passbook。</translation>
-<translation id="7553234618121028547">如要關閉,請開啟<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />並前往「密碼選項」部分。</translation>
+<translation id="7553234618121028547">要關閉,請開啟「<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />」並前往「密碼選項」部分。</translation>
 <translation id="7554791636758816595">新分頁</translation>
 <translation id="7561196759112975576">永遠使用</translation>
 <translation id="7583004045319035904">使用 <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> 解鎖無痕式分頁。</translation>
@@ -945,9 +945,9 @@
 <translation id="8101409298456377967">建立、儲存及管理密碼,讓您輕鬆登入網站和應用程式。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">關閉</translation>
 <translation id="8114753159095730575">您可以下載檔案。可用選項喺螢幕底部附近。</translation>
-<translation id="81313319706244542">2. 輕觸「密碼」</translation>
+<translation id="81313319706244542">2. 輕按 [密碼]</translation>
 <translation id="8132598642024322408">原價係 <ph name="PREVIOUS_PRICE" />,現售 <ph name="PRICE" />。</translation>
-<translation id="8136856065410661948">系統將使用 Chrome 和 Google 智慧鏡頭中的內容在 Apple 行事曆中建立活動。</translation>
+<translation id="8136856065410661948">系統會透過此操作,在 Chrome 和「Google 智能鏡頭」的「Apple 日曆」中建立活動。</translation>
 <translation id="8156478151976189188">密碼同步功能無法正常運作</translation>
 <translation id="8157532349231307196"><ph name="NUMBER_OF_ACCOUNTS" /> 個帳戶</translation>
 <translation id="8193953846147532858"><ph name="BEGIN_LINK" />您的裝置<ph name="END_LINK" /> · <ph name="EMAIL" /></translation>
@@ -1063,7 +1063,7 @@
 <translation id="9081058212938299310">要更新 <ph name="USERNAME" /> 的密碼嗎?</translation>
 <translation id="9083838294503912307">如要在不同裝置上同步並享受個人化體驗,請開啟同步處理功能。</translation>
 <translation id="9087108903408689779">Chrome 建議的密碼:</translation>
-<translation id="9093271241977565440">輕觸畫面頂端的「搜尋」圖示</translation>
+<translation id="9093271241977565440">輕按畫面頂部的「搜尋」圖示</translation>
 <translation id="9094033019050270033">更新密碼</translation>
 <translation id="9097506547406246598">無法取消追蹤,發生錯誤。</translation>
 <translation id="9100610230175265781">請輸入複雜密碼</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
index 9c95b63f..d5f7424 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -232,6 +232,7 @@
 <translation id="2815198996063984598">2. Thepha Uhlelo Lokusebenza Lwesiphequluli Esizenzakalelayo</translation>
 <translation id="2820289420301699633">Umlawuli wakho unolawulo ku-Chrome futhi angafinyelela idatha yayo.</translation>
 <translation id="2830972654601096923">Phatha amakheli...</translation>
+<translation id="2834399722155632105">3. Thepha Ongakukhetha Kwephasiwedi</translation>
 <translation id="2834956026595107950"><ph name="TITLE" />, <ph name="STATE" />, <ph name="URL" /></translation>
 <translation id="2843803966603263712">Setha kabusha izilungiselelo ze-Translate</translation>
 <translation id="2848086008667475748">Yenza Okuzenzakalelayo Kumasethingi…</translation>
@@ -632,6 +633,7 @@
 <translation id="5899314093904173337">Ukuze wabelane nabantu abaseduze, bavumele ukuthi baskene le khodi ye-QR ngekhamera noma ngohlelo lokusebenza lokuskena i-QR</translation>
 <translation id="5911030830365207728">Google Translate</translation>
 <translation id="5913600720976431809">Izinketho zokuhumusha ikhasi</translation>
+<translation id="5933515656458364246">Vumelanisa idatha yakho kuwo wonke amadivayisi.</translation>
 <translation id="5938160824633642847">Idivayisi yakho isicishe igcwele. Khulula isikhala uphinde uzame futhi.</translation>
 <translation id="5948291296578561264">Lokhu kukuvumela ukuthi ulondoloze izithombe kulabhulali yakho yezithombe.</translation>
 <translation id="5951816930277761335">Yabelana Ngelinki</translation>
@@ -713,6 +715,7 @@
 
 Idatha yakho ibethelwe ngomushwana wokungena wakho ngo-<ph name="TIME" />. Yifake ukuze uqale ukuvumelanisa.</translation>
 <translation id="6418346271604475326">Ilungisela i-PDF</translation>
+<translation id="6429213933892582367">Vula Ongakukhetha Kwephasiwedi</translation>
 <translation id="6434591244308415567">Kuvele iphutha. Zama futhi ngemuva kwesikhathi.</translation>
 <translation id="6435236283694032571">Engeza ohlwini lokufunda</translation>
 <translation id="6439338047467462846">Vumela Konke</translation>
@@ -828,6 +831,7 @@
 <translation id="7203585745079012652">Khulumela emuva izimpendulo</translation>
 <translation id="7207023858769244910">Vumelanisa ukuze uthole okuqukethwe ngokusekelwe kuzintshisekelo zakho.</translation>
 <translation id="721597782417389033">Isiteketiso Sekhadi Esingavumelekile</translation>
+<translation id="7221173315674413369">Hlola izakhi ezintsha namathiphu kokuthi Yini Entsha</translation>
 <translation id="722454870747268814">Ithebhu entsha ye-incognito</translation>
 <translation id="7265758999917665941">Ungalokothi kuleli sayithi</translation>
 <translation id="7272437679830969316">Ayikwazi ukuqinisekisa ubunikazi bakho. Iphasiwedi ayikopishiwe.</translation>
@@ -861,6 +865,7 @@
 <translation id="7514365320538308">Landa</translation>
 <translation id="7531345132340165516">Isayithi Lamanje</translation>
 <translation id="7537586195939242955">Uxolo, ukudlula kwakho akukwazi ukufakwa ku-Passbook ngalesi sikhathi.</translation>
+<translation id="7553234618121028547">Vala, vula <ph name="BEGIN_LINK" />Amasethingi<ph name="END_LINK" /> bese uya Kongakukhetha Kwephasiwedi.</translation>
 <translation id="7554791636758816595">Ithebhu entsha</translation>
 <translation id="7561196759112975576">Njalo</translation>
 <translation id="7583004045319035904">Sebenzisa i-<ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> ukuvula amathebhu wakho we-Incognito.</translation>
@@ -942,6 +947,7 @@
 <translation id="8101409298456377967">Yenza, londoloza, futhi uphathe amaphasiwedi akho ukuze ungene ngemvume kalula kumasayithi nama-app. <ph name="BEGIN_LINK" />Funda kabanzi<ph name="END_LINK" /></translation>
 <translation id="8105368624971345109">Vala</translation>
 <translation id="8114753159095730575">Ukulanda ifayela kuyatholakala. Izinketho zitholakala eduze kwangaphansi kwesikrini.</translation>
+<translation id="81313319706244542">2. Thepha Amaphasiwedi</translation>
 <translation id="8132598642024322408">Manje kungu-<ph name="PRICE" /> bekungu-<ph name="PREVIOUS_PRICE" />.</translation>
 <translation id="8136856065410661948">Lokhu kuzosetshenziselwa ukusungula imicimbi Kukhalenda lakho le-Apple ukusuka ku-Chrome nakulensi ye-Google.</translation>
 <translation id="8156478151976189188">Ukuvumelanisa Iphasiwedi Akusebenzi</translation>
@@ -964,6 +970,7 @@
 <translation id="8319076807703933069">Ukusesha okusha</translation>
 <translation id="8323906514956095947">Thinta uphinde ubambe ukuze uthole okunye okungakhethwa zethebhu</translation>
 <translation id="8328777765163860529">Vala konke</translation>
+<translation id="8343993175958086504">Yenza isipele izinto zakho futhi uzisebenzise kunoma iyiphi idivayisi.</translation>
 <translation id="8378714024927312812">Kuphethwe inhlangano yakho</translation>
 <translation id="8386068868580335421">Setha kabusha</translation>
 <translation id="8407669440184693619">Awekho amaphasiwedi atholakele waleli sayithi</translation>
diff --git a/ios/chrome/browser/metrics/incognito_usage_app_state_agent.mm b/ios/chrome/browser/metrics/incognito_usage_app_state_agent.mm
index e9fcfe6..73c5383 100644
--- a/ios/chrome/browser/metrics/incognito_usage_app_state_agent.mm
+++ b/ios/chrome/browser/metrics/incognito_usage_app_state_agent.mm
@@ -123,6 +123,11 @@
 
   _appState = appState;
   [appState addObserver:self];
+
+  for (SceneState* scene in appState.connectedScenes) {
+    [scene addObserver:self];
+  }
+  [self updateIncognitoContentVisible];
 }
 
 #pragma mark - AppStateObserver
diff --git a/ios/chrome/browser/ui/badges/BUILD.gn b/ios/chrome/browser/ui/badges/BUILD.gn
index 1cfe60ca..855eb00 100644
--- a/ios/chrome/browser/ui/badges/BUILD.gn
+++ b/ios/chrome/browser/ui/badges/BUILD.gn
@@ -123,6 +123,7 @@
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/icons:symbols",
     "//ios/chrome/browser/ui/list_model",
+    "//ios/chrome/browser/ui/main:layout_guide_util",
     "//ios/chrome/browser/ui/popup_menu/public:popup_menu_ui",
     "//ios/chrome/browser/ui/popup_menu/public/cells",
     "//ios/chrome/browser/ui/resources:legacy_password_key",
diff --git a/ios/chrome/browser/ui/badges/badge_popup_menu_coordinator.mm b/ios/chrome/browser/ui/badges/badge_popup_menu_coordinator.mm
index 325b3218..8292974 100644
--- a/ios/chrome/browser/ui/badges/badge_popup_menu_coordinator.mm
+++ b/ios/chrome/browser/ui/badges/badge_popup_menu_coordinator.mm
@@ -19,6 +19,7 @@
 #import "ios/chrome/browser/ui/badges/badge_popup_menu_item.h"
 #import "ios/chrome/browser/ui/badges/badges_histograms.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
+#import "ios/chrome/browser/ui/main/layout_guide_util.h"
 #import "ios/chrome/browser/ui/popup_menu/public/cells/popup_menu_item.h"
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_consumer.h"
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.h"
@@ -27,6 +28,7 @@
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_table_view_controller_delegate.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_item.h"
 #import "ios/chrome/browser/ui/util/layout_guide_names.h"
+#import "ios/chrome/browser/ui/util/util_swift.h"
 #import "ios/chrome/browser/web_state_list/web_state_list.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -64,7 +66,12 @@
   self.popupMenuPresenter = [[PopupMenuPresenter alloc] init];
   self.popupMenuPresenter.baseViewController = self.baseViewController;
   self.popupMenuPresenter.presentedViewController = self.popupViewController;
-  self.popupMenuPresenter.guideName = kBadgeOverflowMenuGuide;
+  LayoutGuideCenter* layoutGuideCenter =
+      LayoutGuideCenterForBrowser(self.browser);
+  UILayoutGuide* layoutGuide =
+      [layoutGuideCenter makeLayoutGuideNamed:kBadgeOverflowMenuGuide];
+  [self.popupMenuPresenter.baseViewController.view addLayoutGuide:layoutGuide];
+  self.popupMenuPresenter.layoutGuide = layoutGuide;
   self.popupMenuPresenter.delegate = self;
   [self.popupMenuPresenter prepareForPresentation];
   [self.popupMenuPresenter presentAnimated:YES];
diff --git a/ios/chrome/browser/ui/badges/badge_view_controller.h b/ios/chrome/browser/ui/badges/badge_view_controller.h
index 9128c5a2..0e281e4e 100644
--- a/ios/chrome/browser/ui/badges/badge_view_controller.h
+++ b/ios/chrome/browser/ui/badges/badge_view_controller.h
@@ -11,12 +11,16 @@
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_element.h"
 
 @class BadgeButtonFactory;
+@class LayoutGuideCenter;
 
 // Manages badges to display that are received through BadgeConsumer. Currently
 // only displays the newest badge.
 @interface BadgeViewController
     : UIViewController <BadgeConsumer, FullscreenUIElement>
 
+// The layout guide center to use to reference the displayed badge.
+@property(nonatomic, strong) LayoutGuideCenter* layoutGuideCenter;
+
 // `buttonFactory` must be non-nil.
 - (instancetype)initWithButtonFactory:(BadgeButtonFactory*)buttonFactory
     NS_DESIGNATED_INITIALIZER;
diff --git a/ios/chrome/browser/ui/badges/badge_view_controller.mm b/ios/chrome/browser/ui/badges/badge_view_controller.mm
index 3506fd6..6bacd5b 100644
--- a/ios/chrome/browser/ui/badges/badge_view_controller.mm
+++ b/ios/chrome/browser/ui/badges/badge_view_controller.mm
@@ -10,7 +10,8 @@
 #import "ios/chrome/browser/ui/badges/badge_button_factory.h"
 #import "ios/chrome/browser/ui/badges/badge_constants.h"
 #import "ios/chrome/browser/ui/badges/badge_item.h"
-#import "ios/chrome/browser/ui/util/named_guide.h"
+#import "ios/chrome/browser/ui/util/layout_guide_names.h"
+#import "ios/chrome/browser/ui/util/util_swift.h"
 #import "ios/chrome/common/material_timing.h"
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
@@ -221,9 +222,10 @@
                      self.view.transform = CGAffineTransformIdentity;
                    }
                    completion:nil];
-  NamedGuide* guide = [NamedGuide guideWithName:kBadgeOverflowMenuGuide
-                                           view:_displayedBadge];
-  guide.constrainedView = _displayedBadge;
+
+  // Register the badge with the layout guide center.
+  [self.layoutGuideCenter referenceView:_displayedBadge
+                              underName:kBadgeOverflowMenuGuide];
 }
 
 - (void)setFullScreenBadge:(BadgeButton*)fullScreenBadge {
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm
index cca456c..c769e6b5 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.mm
@@ -693,7 +693,13 @@
 
 #pragma mark - UIResponder
 
-- (NSArray*)keyCommands {
+// To always be able to register key commands via -keyCommands, the VC must be
+// able to become first responder.
+- (BOOL)canBecomeFirstResponder {
+  return YES;
+}
+
+- (NSArray<UIKeyCommand*>*)keyCommands {
   return @[ UIKeyCommand.cr_close ];
 }
 
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
index bf9cdde..e81f7852 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -451,7 +451,19 @@
   [self.sharedState.editingFolderCell stopEdit];
 }
 
-- (NSArray*)keyCommands {
+- (UIStatusBarStyle)preferredStatusBarStyle {
+  return UIStatusBarStyleDefault;
+}
+
+#pragma mark - UIResponder
+
+// To always be able to register key commands via -keyCommands, the VC must be
+// able to become first responder.
+- (BOOL)canBecomeFirstResponder {
+  return YES;
+}
+
+- (NSArray<UIKeyCommand*>*)keyCommands {
   return @[ UIKeyCommand.cr_close ];
 }
 
@@ -460,10 +472,6 @@
   [self navigationBarCancel:nil];
 }
 
-- (UIStatusBarStyle)preferredStatusBarStyle {
-  return UIStatusBarStyleDefault;
-}
-
 #pragma mark - Protected
 
 - (void)loadBookmarkViews {
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 9e67188b..8fd25c6 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -1038,6 +1038,8 @@
 
 #pragma mark - UIResponder
 
+// To always be able to register key commands, the VC must be able to become
+// first responder.
 - (BOOL)canBecomeFirstResponder {
   return YES;
 }
@@ -1842,7 +1844,6 @@
     NSArray<GuideName*>* guideNames = @[
       kContentAreaGuide,
       kPrimaryToolbarGuide,
-      kBadgeOverflowMenuGuide,
       kOmniboxGuide,
       kOmniboxLeadingImageGuide,
       kOmniboxTextFieldGuide,
diff --git a/ios/chrome/browser/ui/history/BUILD.gn b/ios/chrome/browser/ui/history/BUILD.gn
index c9e87557..c64cd84 100644
--- a/ios/chrome/browser/ui/history/BUILD.gn
+++ b/ios/chrome/browser/ui/history/BUILD.gn
@@ -93,6 +93,7 @@
     "//ios/chrome/browser/ui/alert_coordinator",
     "//ios/chrome/browser/ui/collection_view/cells",
     "//ios/chrome/browser/ui/commands",
+    "//ios/chrome/browser/ui/keyboard",
     "//ios/chrome/browser/ui/list_model",
     "//ios/chrome/browser/ui/table_view",
     "//ios/chrome/browser/ui/table_view:presentation",
diff --git a/ios/chrome/browser/ui/history/history_table_view_controller.mm b/ios/chrome/browser/ui/history/history_table_view_controller.mm
index 9f028a6..39b8075 100644
--- a/ios/chrome/browser/ui/history/history_table_view_controller.mm
+++ b/ios/chrome/browser/ui/history/history_table_view_controller.mm
@@ -35,6 +35,7 @@
 #import "ios/chrome/browser/ui/history/history_ui_delegate.h"
 #import "ios/chrome/browser/ui/history/history_util.h"
 #import "ios/chrome/browser/ui/history/public/history_presentation_delegate.h"
+#import "ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_link_header_footer_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_text_header_footer_item.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h"
@@ -722,6 +723,23 @@
   }
 }
 
+#pragma mark - UIResponder
+
+// To always be able to register key commands via -keyCommands, the VC must be
+// able to become first responder.
+- (BOOL)canBecomeFirstResponder {
+  return YES;
+}
+
+- (NSArray*)keyCommands {
+  return @[ UIKeyCommand.cr_close ];
+}
+
+- (void)keyCommand_close {
+  base::RecordAction(base::UserMetricsAction("MobileKeyCommandClose"));
+  [self.delegate dismissHistoryWithCompletion:nil];
+}
+
 #pragma mark - TableViewURLDragDataSource
 
 - (URLInfo*)tableView:(UITableView*)tableView
diff --git a/ios/chrome/browser/ui/icons/BUILD.gn b/ios/chrome/browser/ui/icons/BUILD.gn
index 6fa5374..fabd4833 100644
--- a/ios/chrome/browser/ui/icons/BUILD.gn
+++ b/ios/chrome/browser/ui/icons/BUILD.gn
@@ -72,10 +72,15 @@
     "//ios/chrome/browser/ui/icons/resources:photo_badge_magnifyingglass",
     "//ios/chrome/browser/ui/icons/resources:photo_badge_plus",
     "//ios/chrome/browser/ui/icons/resources:plus_circle_fill",
+    "//ios/chrome/browser/ui/icons/resources:plus_circle_fill_ios14",
     "//ios/chrome/browser/ui/icons/resources:popup_badge_minus",
     "//ios/chrome/browser/ui/icons/resources:shield",
     "//ios/chrome/browser/ui/icons/resources:square_bullet_square",
     "//ios/chrome/browser/ui/icons/resources:square_number",
+    "//ios/chrome/browser/ui/icons/resources:tab_grid_new_tab_button_incognito_ios14",
+    "//ios/chrome/browser/ui/icons/resources:tab_grid_new_tab_button_ios14",
+    "//ios/chrome/browser/ui/icons/resources:tab_grid_new_tab_floating_button_incognito_ios14",
+    "//ios/chrome/browser/ui/icons/resources:tab_grid_new_tab_floating_button_ios14",
     "//ios/chrome/browser/ui/icons/resources:translate",
     "//ios/chrome/common/ui/colors",
     ios_branded_icons,
diff --git a/ios/chrome/browser/ui/icons/resources/BUILD.gn b/ios/chrome/browser/ui/icons/resources/BUILD.gn
index 6837256..824fa1b 100644
--- a/ios/chrome/browser/ui/icons/resources/BUILD.gn
+++ b/ios/chrome/browser/ui/icons/resources/BUILD.gn
@@ -95,6 +95,16 @@
   ]
 }
 
+imageset("plus_circle_fill_ios14") {
+  sources = [
+    "plus_circle_fill_ios14.imageset/Contents.json",
+    "plus_circle_fill_ios14.imageset/plus_circle_fill_ios14@2x.png",
+    "plus_circle_fill_ios14.imageset/plus_circle_fill_ios14@3x.png",
+    "plus_circle_fill_ios14.imageset/plus_circle_fill_ios14_dark@2x.png",
+    "plus_circle_fill_ios14.imageset/plus_circle_fill_ios14_dark@3x.png",
+  ]
+}
+
 symbolset("arrow_triangle_slash_circlepath") {
   sources = [
     "arrow_triangle_slash_circlepath.symbolset/Contents.json",
@@ -163,3 +173,35 @@
     "shield.symbolset/shield.cr.svg",
   ]
 }
+
+imageset("tab_grid_new_tab_button_ios14") {
+  sources = [
+    "tab_grid_new_tab_button_ios14.imageset/Contents.json",
+    "tab_grid_new_tab_button_ios14.imageset/tab_grid_new_tab_button_ios14@2x.png",
+    "tab_grid_new_tab_button_ios14.imageset/tab_grid_new_tab_button_ios14@3x.png",
+  ]
+}
+
+imageset("tab_grid_new_tab_button_incognito_ios14") {
+  sources = [
+    "tab_grid_new_tab_button_incognito_ios14.imageset/Contents.json",
+    "tab_grid_new_tab_button_incognito_ios14.imageset/tab_grid_new_tab_button_incognito_ios14@2x.png",
+    "tab_grid_new_tab_button_incognito_ios14.imageset/tab_grid_new_tab_button_incognito_ios14@3x.png",
+  ]
+}
+
+imageset("tab_grid_new_tab_floating_button_ios14") {
+  sources = [
+    "tab_grid_new_tab_floating_button_ios14.imageset/Contents.json",
+    "tab_grid_new_tab_floating_button_ios14.imageset/tab_grid_new_tab_floating_button_ios14@2x.png",
+    "tab_grid_new_tab_floating_button_ios14.imageset/tab_grid_new_tab_floating_button_ios14@3x.png",
+  ]
+}
+
+imageset("tab_grid_new_tab_floating_button_incognito_ios14") {
+  sources = [
+    "tab_grid_new_tab_floating_button_incognito_ios14.imageset/Contents.json",
+    "tab_grid_new_tab_floating_button_incognito_ios14.imageset/tab_grid_new_tab_floating_button_incognito_ios14@2x.png",
+    "tab_grid_new_tab_floating_button_incognito_ios14.imageset/tab_grid_new_tab_floating_button_incognito_ios14@3x.png",
+  ]
+}
diff --git a/ios/chrome/browser/ui/icons/resources/plus_circle_fill.symbolset/plus.circle.fill.cr.svg b/ios/chrome/browser/ui/icons/resources/plus_circle_fill.symbolset/plus.circle.fill.cr.svg
index c5fab25..d3feeab 100644
--- a/ios/chrome/browser/ui/icons/resources/plus_circle_fill.symbolset/plus.circle.fill.cr.svg
+++ b/ios/chrome/browser/ui/icons/resources/plus_circle_fill.symbolset/plus.circle.fill.cr.svg
@@ -5,6 +5,12 @@
        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="3300" height="2200">
  <!--glyph: "", point size: 100.0, font version: "17.3d3e1", template writer version: "65.1"-->
+ <style>.hierarchical-0:secondary {fill:#4D4D4D}
+.hierarchical-1:primary {fill:#212121}
+
+.SFSymbolsPreview212121 {fill:#212121;opacity:1.0}
+.SFSymbolsPreview4D4D4D {fill:#4D4D4D;opacity:1.0}
+</style>
  <g id="Notes">
   <rect height="2200" id="artboard" style="fill:white;opacity:1" width="3300" x="0" y="0"/>
   <line style="fill:none;stroke:black;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="292" y2="292"/>
@@ -48,8 +54,8 @@
   <text style="stroke:none;fill:black;font-family:sans-serif;font-size:13;font-weight:bold;" transform="matrix(1 0 0 1 1289 1953)">Exporting</text>
   <text style="stroke:none;fill:black;font-family:sans-serif;font-size:13;" transform="matrix(1 0 0 1 1289 1971)">Symbols should be outlined when exporting to ensure the</text>
   <text style="stroke:none;fill:black;font-family:sans-serif;font-size:13;" transform="matrix(1 0 0 1 1289 1989)">design is preserved when submitting to Xcode.</text>
-  <text id="template-version" style="stroke:none;fill:black;font-family:sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1933)">Template v.2.0</text>
-  <text style="stroke:none;fill:black;font-family:sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1951)">Requires Xcode 12 or greater</text>
+  <text id="template-version" style="stroke:none;fill:black;font-family:sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1933)">Template v.3.0</text>
+  <text style="stroke:none;fill:black;font-family:sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1951)">Requires Xcode 13 or greater</text>
   <text id="descriptive-name" style="stroke:none;fill:black;font-family:sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1969)">Generated from plus.circle.fill.cr</text>
   <text style="stroke:none;fill:black;font-family:sans-serif;font-size:13;text-anchor:end;" transform="matrix(1 0 0 1 3036 1987)">Typeset at 100 points</text>
   <text style="stroke:none;fill:black;font-family:sans-serif;font-size:13;" transform="matrix(1 0 0 1 263 726)">Small</text>
@@ -72,90 +78,117 @@
   </g>
   <line id="Baseline-L" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1556" y2="1556"/>
   <line id="Capline-L" style="fill:none;stroke:#27AAE1;opacity:1;stroke-width:0.5;" x1="263" x2="3036" y1="1485.54" y2="1485.54"/>
-  <line id="left-margin" style="fill:none;stroke:#FF3B30;stroke-width:0.5;opacity:1.0;" x1="1374.84" x2="1374.84" y1="1030.78" y2="1150.12"/>
-  <line id="right-margin" style="fill:none;stroke:#FF3B30;stroke-width:0.5;opacity:1.0;" x1="1524.84" x2="1524.84" y1="1030.78" y2="1150.12"/>
+  <line id="left-margin-Regular-M" style="fill:none;stroke:#FF3B30;stroke-width:0.5;opacity:1.0;" x1="1374.84" x2="1374.84" y1="1030.78" y2="1150.12"/>
+  <line id="right-margin-Regular-M" style="fill:none;stroke:#FF3B30;stroke-width:0.5;opacity:1.0;" x1="1524.84" x2="1524.84" y1="1030.78" y2="1150.12"/>
  </g>
  <g id="Symbols">
   <g id="Black-L" transform="matrix(1 0 0 1 2843.4 1556)">
-   <path d="M124.7 47.29C113.85 52 102.26 54.35 89.96 54.35C77.65 54.35 66.07 52 55.21 47.29C44.35 42.65 34.78 36.17 26.47 27.86C18.23 19.56 11.76 9.97 7.05-0.89C2.35-11.75 0-23.34 0-35.65C0-47.96 2.35-59.55 7.05-70.41C11.76-81.27 18.23-90.83 26.47-99.08C34.78-107.38 44.33-113.89 55.12-118.59C65.98-123.3 77.56-125.65 89.87-125.65C102.24-125.65 113.85-123.3 124.7-118.59C135.56-113.89 145.14-107.38 153.44-99.08C161.74-90.83 168.24-81.27 172.95-70.41C177.65-59.55 180-47.96 180-35.65C180-23.34 177.65-11.75 172.95-0.89C168.24 9.97 161.74 19.56 153.44 27.86C145.14 36.17 135.56 42.65 124.7 47.29ZM79.34-7.83C79.34-1.75 84.26 3.17 90.34 3.17C96.42 3.17 101.34-1.75 101.34-7.83L101.34-24.67L118.17-24.67C124.25-24.67 129.17-29.59 129.17-35.67C129.17-41.74 124.25-46.67 118.17-46.67L101.34-46.67L101.34-63.5C101.34-69.58 96.42-74.5 90.34-74.5C84.26-74.5 79.34-69.58 79.34-63.5L79.34-46.67L62.5-46.67C56.43-46.67 51.5-41.74 51.5-35.67C51.5-29.59 56.43-24.67 62.5-24.67L79.34-24.67L79.34-7.83Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M124.7 47.29C113.85 52 102.26 54.35 89.96 54.35C77.65 54.35 66.07 52 55.21 47.29C44.35 42.65 34.78 36.17 26.47 27.86C18.23 19.56 11.76 9.97 7.05-0.89C2.35-11.75 0-23.34 0-35.65C0-47.96 2.35-59.55 7.05-70.41C11.76-81.27 18.23-90.83 26.47-99.08C34.78-107.38 44.33-113.89 55.12-118.59C65.98-123.3 77.56-125.65 89.87-125.65C102.24-125.65 113.85-123.3 124.7-118.59C135.56-113.89 145.14-107.38 153.44-99.08C161.74-90.83 168.24-81.27 172.95-70.41C177.65-59.55 180-47.96 180-35.65C180-23.34 177.65-11.75 172.95-0.89C168.24 9.97 161.74 19.56 153.44 27.86C145.14 36.17 135.56 42.65 124.7 47.29Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M79.34-7.83C79.34-1.75 84.26 3.17 90.34 3.17C96.42 3.17 101.34-1.75 101.34-7.83L101.34-24.67L118.17-24.67C124.25-24.67 129.17-29.59 129.17-35.67C129.17-41.74 124.25-46.67 118.17-46.67L101.34-46.67L101.34-63.5C101.34-69.58 96.42-74.5 90.34-74.5C84.26-74.5 79.34-69.58 79.34-63.5L79.34-46.67L62.5-46.67C56.43-46.67 51.5-41.74 51.5-35.67C51.5-29.59 56.43-24.67 62.5-24.67L79.34-24.67L79.34-7.83Z"/>
   </g>
   <g id="Heavy-L" transform="matrix(1 0 0 1 2545.69 1556)">
-   <path d="M126.09 48.26C115.11 53.02 103.4 55.4 90.96 55.4C78.51 55.4 66.8 53.02 55.82 48.26C44.85 43.57 35.16 37.02 26.77 28.62C18.43 20.22 11.89 10.53 7.13-0.45C2.38-11.43 0-23.15 0-35.6C0-48.05 2.38-59.77 7.13-70.75C11.89-81.73 18.43-91.39 26.77-99.73C35.16-108.13 44.82-114.71 55.74-119.46C66.71-124.22 78.42-126.6 90.87-126.6C103.37-126.6 115.11-124.22 126.09-119.46C137.07-114.71 146.75-108.13 155.14-99.73C163.54-91.39 170.11-81.73 174.87-70.75C179.62-59.77 182-48.05 182-35.6C182-23.15 179.62-11.43 174.87-0.45C170.11 10.53 163.54 20.22 155.14 28.62C146.75 37.02 137.07 43.57 126.09 48.26ZM81.84-7.83C81.84-2.58 86.09 1.67 91.34 1.67C96.59 1.67 100.84-2.58 100.84-7.83L100.84-26.17L119.17-26.17C124.42-26.17 128.67-30.42 128.67-35.67C128.67-40.91 124.42-45.17 119.17-45.17L100.84-45.17L100.84-63.5C100.84-68.75 96.59-73 91.34-73C86.09-73 81.84-68.75 81.84-63.5L81.84-45.17L63.5-45.17C58.25-45.17 54-40.91 54-35.67C54-30.42 58.25-26.17 63.5-26.17L81.84-26.17L81.84-7.83Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M126.09 48.26C115.11 53.02 103.4 55.4 90.96 55.4C78.51 55.4 66.8 53.02 55.82 48.26C44.85 43.57 35.16 37.02 26.77 28.62C18.43 20.22 11.89 10.53 7.13-0.45C2.38-11.43 0-23.15 0-35.6C0-48.05 2.38-59.77 7.13-70.75C11.89-81.73 18.43-91.39 26.77-99.73C35.16-108.13 44.82-114.71 55.74-119.46C66.71-124.22 78.42-126.6 90.87-126.6C103.37-126.6 115.11-124.22 126.09-119.46C137.07-114.71 146.75-108.13 155.14-99.73C163.54-91.39 170.11-81.73 174.87-70.75C179.62-59.77 182-48.05 182-35.6C182-23.15 179.62-11.43 174.87-0.45C170.11 10.53 163.54 20.22 155.14 28.62C146.75 37.02 137.07 43.57 126.09 48.26Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M81.84-7.83C81.84-2.58 86.09 1.67 91.34 1.67C96.59 1.67 100.84-2.58 100.84-7.83L100.84-26.17L119.17-26.17C124.42-26.17 128.67-30.42 128.67-35.67C128.67-40.91 124.42-45.17 119.17-45.17L100.84-45.17L100.84-63.5C100.84-68.75 96.59-73 91.34-73C86.09-73 81.84-68.75 81.84-63.5L81.84-45.17L63.5-45.17C58.25-45.17 54-40.91 54-35.67C54-30.42 58.25-26.17 63.5-26.17L81.84-26.17L81.84-7.83Z"/>
   </g>
   <g id="Bold-L" transform="matrix(1 0 0 1 2249.98 1556)">
-   <path d="M124.7 47.74C113.85 52.45 102.26 54.8 89.96 54.8C77.65 54.8 66.07 52.45 55.21 47.74C44.35 43.1 34.78 36.62 26.47 28.31C18.23 20.01 11.76 10.42 7.05-0.44C2.35-11.3 0-22.89 0-35.2C0-47.51 2.35-59.1 7.05-69.96C11.76-80.83 18.23-90.38 26.47-98.63C34.78-106.93 44.33-113.44 55.12-118.14C65.98-122.85 77.56-125.2 89.87-125.2C102.24-125.2 113.85-122.85 124.7-118.14C135.56-113.44 145.14-106.93 153.44-98.63C161.74-90.38 168.24-80.83 172.95-69.96C177.65-59.1 180-47.51 180-35.2C180-22.89 177.65-11.3 172.95-0.44C168.24 10.42 161.74 20.01 153.44 28.31C145.14 36.62 135.56 43.1 124.7 47.74ZM81.99-7.33C81.99-2.91 85.57 0.67 89.99 0.67C94.41 0.67 97.99-2.91 97.99-7.33L97.99-27.17L117.82-27.17C122.24-27.17 125.82-30.75 125.82-35.17C125.82-39.59 122.24-43.17 117.82-43.17L97.99-43.17L97.99-63C97.99-67.42 94.41-71 89.99-71C85.57-71 81.99-67.42 81.99-63L81.99-43.17L62.15-43.17C57.73-43.17 54.15-39.59 54.15-35.17C54.15-30.75 57.73-27.17 62.15-27.17L81.99-27.17L81.99-7.33Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M124.7 47.74C113.85 52.45 102.26 54.8 89.96 54.8C77.65 54.8 66.07 52.45 55.21 47.74C44.35 43.1 34.78 36.62 26.47 28.31C18.23 20.01 11.76 10.42 7.05-0.44C2.35-11.3 0-22.89 0-35.2C0-47.51 2.35-59.1 7.05-69.96C11.76-80.83 18.23-90.38 26.47-98.63C34.78-106.93 44.33-113.44 55.12-118.14C65.98-122.85 77.56-125.2 89.87-125.2C102.24-125.2 113.85-122.85 124.7-118.14C135.56-113.44 145.14-106.93 153.44-98.63C161.74-90.38 168.24-80.83 172.95-69.96C177.65-59.1 180-47.51 180-35.2C180-22.89 177.65-11.3 172.95-0.44C168.24 10.42 161.74 20.01 153.44 28.31C145.14 36.62 135.56 43.1 124.7 47.74Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M81.99-7.33C81.99-2.91 85.57 0.67 89.99 0.67C94.41 0.67 97.99-2.91 97.99-7.33L97.99-27.17L117.82-27.17C122.24-27.17 125.82-30.75 125.82-35.17C125.82-39.59 122.24-43.17 117.82-43.17L97.99-43.17L97.99-63C97.99-67.42 94.41-71 89.99-71C85.57-71 81.99-67.42 81.99-63L81.99-43.17L62.15-43.17C57.73-43.17 54.15-39.59 54.15-35.17C54.15-30.75 57.73-27.17 62.15-27.17L81.99-27.17L81.99-7.33Z"/>
   </g>
   <g id="Semibold-L" transform="matrix(1 0 0 1 1953.27 1556)">
-   <path d="M124.7 47.44C113.85 52.15 102.26 54.5 89.96 54.5C77.65 54.5 66.07 52.15 55.21 47.44C44.35 42.8 34.78 36.32 26.47 28.01C18.23 19.71 11.76 10.12 7.05-0.74C2.35-11.6 0-23.19 0-35.5C0-47.81 2.35-59.4 7.05-70.26C11.76-81.12 18.23-90.68 26.47-98.93C34.78-107.23 44.33-113.74 55.12-118.44C65.98-123.15 77.56-125.5 89.87-125.5C102.24-125.5 113.85-123.15 124.7-118.44C135.56-113.74 145.14-107.23 153.44-98.93C161.74-90.68 168.24-81.12 172.95-70.26C177.65-59.4 180-47.81 180-35.5C180-23.19 177.65-11.6 172.95-0.74C168.24 10.12 161.74 19.71 153.44 28.01C145.14 36.32 135.56 42.8 124.7 47.44ZM83.34-7.63C83.34-4.04 86.25-1.13 89.84-1.13C93.43-1.13 96.34-4.04 96.34-7.63L96.34-28.97L117.67-28.97C121.26-28.97 124.17-31.88 124.17-35.47C124.17-39.06 121.26-41.97 117.67-41.97L96.34-41.97L96.34-63.3C96.34-66.89 93.43-69.8 89.84-69.8C86.25-69.8 83.34-66.89 83.34-63.3L83.34-41.97L62-41.97C58.41-41.97 55.5-39.06 55.5-35.47C55.5-31.88 58.41-28.97 62-28.97L83.34-28.97L83.34-7.63Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M124.7 47.44C113.85 52.15 102.26 54.5 89.96 54.5C77.65 54.5 66.07 52.15 55.21 47.44C44.35 42.8 34.78 36.32 26.47 28.01C18.23 19.71 11.76 10.12 7.05-0.74C2.35-11.6 0-23.19 0-35.5C0-47.81 2.35-59.4 7.05-70.26C11.76-81.12 18.23-90.68 26.47-98.93C34.78-107.23 44.33-113.74 55.12-118.44C65.98-123.15 77.56-125.5 89.87-125.5C102.24-125.5 113.85-123.15 124.7-118.44C135.56-113.74 145.14-107.23 153.44-98.93C161.74-90.68 168.24-81.12 172.95-70.26C177.65-59.4 180-47.81 180-35.5C180-23.19 177.65-11.6 172.95-0.74C168.24 10.12 161.74 19.71 153.44 28.01C145.14 36.32 135.56 42.8 124.7 47.44Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M83.34-7.63C83.34-4.04 86.25-1.13 89.84-1.13C93.43-1.13 96.34-4.04 96.34-7.63L96.34-28.97L117.67-28.97C121.26-28.97 124.17-31.88 124.17-35.47C124.17-39.06 121.26-41.97 117.67-41.97L96.34-41.97L96.34-63.3C96.34-66.89 93.43-69.8 89.84-69.8C86.25-69.8 83.34-66.89 83.34-63.3L83.34-41.97L62-41.97C58.41-41.97 55.5-39.06 55.5-35.47C55.5-31.88 58.41-28.97 62-28.97L83.34-28.97L83.34-7.63Z"/>
   </g>
   <g id="Medium-L" transform="matrix(1 0 0 1 1656.56 1556)">
-   <path d="M124.7 47.44C113.85 52.15 102.26 54.5 89.96 54.5C77.65 54.5 66.07 52.15 55.21 47.44C44.35 42.8 34.78 36.32 26.47 28.01C18.23 19.71 11.76 10.12 7.05-0.74C2.35-11.6 0-23.19 0-35.5C0-47.81 2.35-59.4 7.05-70.26C11.76-81.12 18.23-90.68 26.47-98.93C34.78-107.23 44.33-113.74 55.12-118.44C65.98-123.15 77.56-125.5 89.87-125.5C102.24-125.5 113.85-123.15 124.7-118.44C135.56-113.74 145.14-107.23 153.44-98.93C161.74-90.68 168.24-81.12 172.95-70.26C177.65-59.4 180-47.81 180-35.5C180-23.19 177.65-11.6 172.95-0.74C168.24 10.12 161.74 19.71 153.44 28.01C145.14 36.32 135.56 42.8 124.7 47.44ZM84.34-7.63C84.34-4.43 86.94-1.83 90.14-1.83C93.34-1.83 95.94-4.43 95.94-7.63L95.94-29.67L117.97-29.67C121.17-29.67 123.77-32.26 123.77-35.47C123.77-38.67 121.17-41.27 117.97-41.27L95.94-41.27L95.94-63.3C95.94-66.5 93.34-69.1 90.14-69.1C86.94-69.1 84.34-66.5 84.34-63.3L84.34-41.27L62.3-41.27C59.1-41.27 56.5-38.67 56.5-35.47C56.5-32.26 59.1-29.67 62.3-29.67L84.34-29.67L84.34-7.63Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M124.7 47.44C113.85 52.15 102.26 54.5 89.96 54.5C77.65 54.5 66.07 52.15 55.21 47.44C44.35 42.8 34.78 36.32 26.47 28.01C18.23 19.71 11.76 10.12 7.05-0.74C2.35-11.6 0-23.19 0-35.5C0-47.81 2.35-59.4 7.05-70.26C11.76-81.12 18.23-90.68 26.47-98.93C34.78-107.23 44.33-113.74 55.12-118.44C65.98-123.15 77.56-125.5 89.87-125.5C102.24-125.5 113.85-123.15 124.7-118.44C135.56-113.74 145.14-107.23 153.44-98.93C161.74-90.68 168.24-81.12 172.95-70.26C177.65-59.4 180-47.81 180-35.5C180-23.19 177.65-11.6 172.95-0.74C168.24 10.12 161.74 19.71 153.44 28.01C145.14 36.32 135.56 42.8 124.7 47.44Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M84.34-7.63C84.34-4.43 86.94-1.83 90.14-1.83C93.34-1.83 95.94-4.43 95.94-7.63L95.94-29.67L117.97-29.67C121.17-29.67 123.77-32.26 123.77-35.47C123.77-38.67 121.17-41.27 117.97-41.27L95.94-41.27L95.94-63.3C95.94-66.5 93.34-69.1 90.14-69.1C86.94-69.1 84.34-66.5 84.34-63.3L84.34-41.27L62.3-41.27C59.1-41.27 56.5-38.67 56.5-35.47C56.5-32.26 59.1-29.67 62.3-29.67L84.34-29.67L84.34-7.63Z"/>
   </g>
   <g id="Regular-L" transform="matrix(1 0 0 1 1359.84 1556)">
-   <path d="M124.7 47.74C113.85 52.45 102.26 54.8 89.96 54.8C77.65 54.8 66.07 52.45 55.21 47.74C44.35 43.1 34.77 36.62 26.47 28.31C18.23 20.01 11.76 10.43 7.05-0.44C2.35-11.3 0-22.89 0-35.2C0-47.51 2.35-59.1 7.05-69.96C11.76-80.82 18.23-90.38 26.47-98.63C34.77-106.93 44.32-113.44 55.12-118.14C65.98-122.85 77.56-125.2 89.87-125.2C102.23-125.2 113.85-122.85 124.7-118.14C135.56-113.44 145.14-106.93 153.44-98.63C161.74-90.38 168.24-80.82 172.95-69.96C177.65-59.1 180-47.51 180-35.2C180-22.89 177.65-11.3 172.95-0.44C168.24 10.43 161.74 20.01 153.44 28.31C145.14 36.62 135.56 43.1 124.7 47.74ZM85.34-7.38C85.34-4.7 87.51-2.53 90.19-2.53C92.87-2.53 95.04-4.7 95.04-7.38L95.04-30.15L117.67-30.15C120.35-30.15 122.52-32.32 122.52-35C122.52-37.68 120.35-39.85 117.67-39.85L95.04-39.85L95.04-63.05C95.04-65.73 92.87-67.9 90.19-67.9C87.51-67.9 85.34-65.73 85.34-63.05L85.34-39.85L62-39.85C59.32-39.85 57.15-37.68 57.15-35C57.15-32.32 59.32-30.15 62-30.15L85.34-30.15L85.34-7.38Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M124.7 47.74C113.85 52.45 102.26 54.8 89.96 54.8C77.65 54.8 66.07 52.45 55.21 47.74C44.35 43.1 34.77 36.62 26.47 28.31C18.23 20.01 11.76 10.43 7.05-0.44C2.35-11.3 0-22.89 0-35.2C0-47.51 2.35-59.1 7.05-69.96C11.76-80.82 18.23-90.38 26.47-98.63C34.77-106.93 44.32-113.44 55.12-118.14C65.98-122.85 77.56-125.2 89.87-125.2C102.23-125.2 113.85-122.85 124.7-118.14C135.56-113.44 145.14-106.93 153.44-98.63C161.74-90.38 168.24-80.82 172.95-69.96C177.65-59.1 180-47.51 180-35.2C180-22.89 177.65-11.3 172.95-0.44C168.24 10.43 161.74 20.01 153.44 28.31C145.14 36.62 135.56 43.1 124.7 47.74Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M85.34-7.38C85.34-4.7 87.51-2.53 90.19-2.53C92.87-2.53 95.04-4.7 95.04-7.38L95.04-30.15L117.67-30.15C120.35-30.15 122.52-32.32 122.52-35C122.52-37.68 120.35-39.85 117.67-39.85L95.04-39.85L95.04-63.05C95.04-65.73 92.87-67.9 90.19-67.9C87.51-67.9 85.34-65.73 85.34-63.05L85.34-39.85L62-39.85C59.32-39.85 57.15-37.68 57.15-35C57.15-32.32 59.32-30.15 62-30.15L85.34-30.15L85.34-7.38Z"/>
   </g>
   <g id="Light-L" transform="matrix(1 0 0 1 1063.13 1556)">
-   <path d="M124.7 46.94C113.85 51.65 102.26 54 89.96 54C77.65 54 66.07 51.65 55.21 46.94C44.35 42.3 34.78 35.82 26.47 27.51C18.23 19.21 11.76 9.62 7.05-1.24C2.35-12.1 0-23.69 0-36C0-48.31 2.35-59.9 7.05-70.76C11.76-81.62 18.23-91.18 26.47-99.43C34.78-107.73 44.33-114.24 55.12-118.94C65.98-123.65 77.56-126 89.87-126C102.24-126 113.85-123.65 124.7-118.94C135.56-114.24 145.14-107.73 153.44-99.43C161.74-91.18 168.24-81.62 172.95-70.76C177.65-59.9 180-48.31 180-36C180-23.69 177.65-12.1 172.95-1.24C168.24 9.62 161.74 19.21 153.44 27.51C145.14 35.82 135.56 42.3 124.7 46.94ZM86.84-8.03C86.84-6.21 88.32-4.73 90.14-4.73C91.96-4.73 93.44-6.21 93.44-8.03L93.44-32.57L117.97-32.57C119.79-32.57 121.27-34.05 121.27-35.87C121.27-37.69 119.79-39.17 117.97-39.17L93.44-39.17L93.44-63.7C93.44-65.52 91.96-67 90.14-67C88.32-67 86.84-65.52 86.84-63.7L86.84-39.17L62.3-39.17C60.48-39.17 59-37.69 59-35.87C59-34.05 60.48-32.57 62.3-32.57L86.84-32.57L86.84-8.03Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M124.7 46.94C113.85 51.65 102.26 54 89.96 54C77.65 54 66.07 51.65 55.21 46.94C44.35 42.3 34.78 35.82 26.47 27.51C18.23 19.21 11.76 9.62 7.05-1.24C2.35-12.1 0-23.69 0-36C0-48.31 2.35-59.9 7.05-70.76C11.76-81.62 18.23-91.18 26.47-99.43C34.78-107.73 44.33-114.24 55.12-118.94C65.98-123.65 77.56-126 89.87-126C102.24-126 113.85-123.65 124.7-118.94C135.56-114.24 145.14-107.73 153.44-99.43C161.74-91.18 168.24-81.62 172.95-70.76C177.65-59.9 180-48.31 180-36C180-23.69 177.65-12.1 172.95-1.24C168.24 9.62 161.74 19.21 153.44 27.51C145.14 35.82 135.56 42.3 124.7 46.94Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M86.84-8.03C86.84-6.21 88.32-4.73 90.14-4.73C91.96-4.73 93.44-6.21 93.44-8.03L93.44-32.57L117.97-32.57C119.79-32.57 121.27-34.05 121.27-35.87C121.27-37.69 119.79-39.17 117.97-39.17L93.44-39.17L93.44-63.7C93.44-65.52 91.96-67 90.14-67C88.32-67 86.84-65.52 86.84-63.7L86.84-39.17L62.3-39.17C60.48-39.17 59-37.69 59-35.87C59-34.05 60.48-32.57 62.3-32.57L86.84-32.57L86.84-8.03Z"/>
   </g>
   <g id="Thin-L" transform="matrix(1 0 0 1 766.422 1556)">
-   <path d="M124.702 45.34C113.846 50.05 102.264 52.4 89.956 52.4C77.649 52.4 66.067 50.05 55.21 45.34C44.354 40.7 34.775 34.22 26.473 25.91C18.229 17.61 11.756 8.02 7.054-2.84C2.351-13.7 0-25.29 0-37.6C0-49.91 2.351-61.5 7.054-72.36C11.756-83.22 18.229-92.78 26.473-101.03C34.775-109.33 44.325-115.84 55.123-120.54C65.98-125.25 77.562-127.6 89.869-127.6C102.235-127.6 113.846-125.25 124.702-120.54C135.559-115.84 145.138-109.33 153.44-101.03C161.742-92.78 168.244-83.22 172.946-72.36C177.649-61.5 180-49.91 180-37.6C180-25.29 177.649-13.7 172.946-2.84C168.244 8.02 161.742 17.61 153.44 25.91C145.138 34.22 135.559 40.7 124.702 45.34ZM87.64-9.78C87.64-8.68 88.535-7.78 89.64-7.78C90.744-7.78 91.64-8.68 91.64-9.78L91.64-35.62L117.47-35.62C118.574-35.62 119.47-36.51 119.47-37.62C119.47-38.72 118.574-39.62 117.47-39.62L91.64-39.62L91.64-65.45C91.64-66.56 90.744-67.45 89.64-67.45C88.535-67.45 87.64-66.56 87.64-65.45L87.64-39.62L61.8-39.62C60.695-39.62 59.8-38.72 59.8-37.62C59.8-36.51 60.695-35.62 61.8-35.62L87.64-35.62L87.64-9.78Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M124.702 45.34C113.846 50.05 102.264 52.4 89.956 52.4C77.649 52.4 66.067 50.05 55.21 45.34C44.354 40.7 34.775 34.22 26.473 25.91C18.229 17.61 11.756 8.02 7.054-2.84C2.351-13.7 0-25.29 0-37.6C0-49.91 2.351-61.5 7.054-72.36C11.756-83.22 18.229-92.78 26.473-101.03C34.775-109.33 44.325-115.84 55.123-120.54C65.98-125.25 77.562-127.6 89.869-127.6C102.235-127.6 113.846-125.25 124.702-120.54C135.559-115.84 145.138-109.33 153.44-101.03C161.742-92.78 168.244-83.22 172.946-72.36C177.649-61.5 180-49.91 180-37.6C180-25.29 177.649-13.7 172.946-2.84C168.244 8.02 161.742 17.61 153.44 25.91C145.138 34.22 135.559 40.7 124.702 45.34Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M87.64-9.78C87.64-8.68 88.535-7.78 89.64-7.78C90.744-7.78 91.64-8.68 91.64-9.78L91.64-35.62L117.47-35.62C118.574-35.62 119.47-36.51 119.47-37.62C119.47-38.72 118.574-39.62 117.47-39.62L91.64-39.62L91.64-65.45C91.64-66.56 90.744-67.45 89.64-67.45C88.535-67.45 87.64-66.56 87.64-65.45L87.64-39.62L61.8-39.62C60.695-39.62 59.8-38.72 59.8-37.62C59.8-36.51 60.695-35.62 61.8-35.62L87.64-35.62L87.64-9.78Z"/>
   </g>
   <g id="Ultralight-L" transform="matrix(1 0 0 1 469.711 1556)">
-   <path d="M124.702 47.94C113.846 52.65 102.264 55 89.956 55C77.649 55 66.067 52.65 55.21 47.94C44.354 43.3 34.775 36.82 26.473 28.51C18.229 20.21 11.756 10.62 7.054-0.24C2.351-11.1 0-22.69 0-35C0-47.31 2.351-58.9 7.054-69.76C11.756-80.62 18.229-90.18 26.473-98.43C34.775-106.73 44.325-113.24 55.123-117.94C65.98-122.65 77.562-125 89.869-125C102.235-125 113.846-122.65 124.702-117.94C135.559-113.24 145.138-106.73 153.44-98.43C161.742-90.18 168.244-80.62 172.946-69.76C177.649-58.9 180-47.31 180-35C180-22.69 177.649-11.1 172.946-0.24C168.244 10.62 161.742 20.21 153.44 28.51C145.138 36.82 135.559 43.3 124.702 47.94ZM88.875-7.46C88.875-6.84 89.379-6.33 90-6.33C90.621-6.33 91.125-6.84 91.125-7.46L91.125-34.17L117.83-34.17C118.451-34.17 118.955-34.68 118.955-35.3C118.955-35.92 118.451-36.42 117.83-36.42L91.125-36.42L91.125-63.13C91.125-63.75 90.621-64.25 90-64.25C89.379-64.25 88.875-63.75 88.875-63.13L88.875-36.42L62.16-36.42C61.539-36.42 61.035-35.92 61.035-35.3C61.035-34.68 61.539-34.17 62.16-34.17L88.875-34.17L88.875-7.46Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M124.702 47.94C113.846 52.65 102.264 55 89.956 55C77.649 55 66.067 52.65 55.21 47.94C44.354 43.3 34.775 36.82 26.473 28.51C18.229 20.21 11.756 10.62 7.054-0.24C2.351-11.1 0-22.69 0-35C0-47.31 2.351-58.9 7.054-69.76C11.756-80.62 18.229-90.18 26.473-98.43C34.775-106.73 44.325-113.24 55.123-117.94C65.98-122.65 77.562-125 89.869-125C102.235-125 113.846-122.65 124.702-117.94C135.559-113.24 145.138-106.73 153.44-98.43C161.742-90.18 168.244-80.62 172.946-69.76C177.649-58.9 180-47.31 180-35C180-22.69 177.649-11.1 172.946-0.24C168.244 10.62 161.742 20.21 153.44 28.51C145.138 36.82 135.559 43.3 124.702 47.94Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M88.875-7.46C88.875-6.84 89.379-6.33 90-6.33C90.621-6.33 91.125-6.84 91.125-7.46L91.125-34.17L117.83-34.17C118.451-34.17 118.955-34.68 118.955-35.3C118.955-35.92 118.451-36.42 117.83-36.42L91.125-36.42L91.125-63.13C91.125-63.75 90.621-64.25 90-64.25C89.379-64.25 88.875-63.75 88.875-63.13L88.875-36.42L62.16-36.42C61.539-36.42 61.035-35.92 61.035-35.3C61.035-34.68 61.539-34.17 62.16-34.17L88.875-34.17L88.875-7.46Z"/>
   </g>
   <g id="Black-M" transform="matrix(1 0 0 1 2858.4 1126)">
-   <path d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32ZM65.5-6.96C65.5-1.71 69.75 2.54 75 2.54C80.25 2.54 84.5-1.71 84.5-6.96L84.5-25.3L102.83-25.3C108.08-25.3 112.33-29.55 112.33-34.8C112.33-40.05 108.08-44.3 102.83-44.3L84.5-44.3L84.5-62.63C84.5-67.88 80.25-72.13 75-72.13C69.75-72.13 65.5-67.88 65.5-62.63L65.5-44.3L47.16-44.3C41.91-44.3 37.66-40.05 37.66-34.8C37.66-29.55 41.91-25.3 47.16-25.3L65.5-25.3L65.5-6.96Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M65.5-6.96C65.5-1.71 69.75 2.54 75 2.54C80.25 2.54 84.5-1.71 84.5-6.96L84.5-25.3L102.83-25.3C108.08-25.3 112.33-29.55 112.33-34.8C112.33-40.05 108.08-44.3 102.83-44.3L84.5-44.3L84.5-62.63C84.5-67.88 80.25-72.13 75-72.13C69.75-72.13 65.5-67.88 65.5-62.63L65.5-44.3L47.16-44.3C41.91-44.3 37.66-40.05 37.66-34.8C37.66-29.55 41.91-25.3 47.16-25.3L65.5-25.3L65.5-6.96Z"/>
   </g>
   <g id="Heavy-M" transform="matrix(1 0 0 1 2561.69 1126)">
-   <path d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32ZM66.5-6.96C66.5-2.27 70.31 1.54 75 1.54C79.69 1.54 83.5-2.27 83.5-6.96L83.5-26.3L102.83-26.3C107.52-26.3 111.33-30.1 111.33-34.8C111.33-39.49 107.52-43.3 102.83-43.3L83.5-43.3L83.5-62.63C83.5-67.33 79.69-71.13 75-71.13C70.31-71.13 66.5-67.33 66.5-62.63L66.5-43.3L47.16-43.3C42.47-43.3 38.66-39.49 38.66-34.8C38.66-30.1 42.47-26.3 47.16-26.3L66.5-26.3L66.5-6.96Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M66.5-6.96C66.5-2.27 70.31 1.54 75 1.54C79.69 1.54 83.5-2.27 83.5-6.96L83.5-26.3L102.83-26.3C107.52-26.3 111.33-30.1 111.33-34.8C111.33-39.49 107.52-43.3 102.83-43.3L83.5-43.3L83.5-62.63C83.5-67.33 79.69-71.13 75-71.13C70.31-71.13 66.5-67.33 66.5-62.63L66.5-43.3L47.16-43.3C42.47-43.3 38.66-39.49 38.66-34.8C38.66-30.1 42.47-26.3 47.16-26.3L66.5-26.3L66.5-6.96Z"/>
   </g>
   <g id="Bold-M" transform="matrix(1 0 0 1 2264.98 1126)">
-   <path d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32ZM68-6.96C68-3.09 71.13 0.04 75 0.04C78.87 0.04 82-3.09 82-6.96L82-27.8L102.83-27.8C106.7-27.8 109.83-30.93 109.83-34.8C109.83-38.66 106.7-41.8 102.83-41.8L82-41.8L82-62.63C82-66.5 78.87-69.63 75-69.63C71.13-69.63 68-66.5 68-62.63L68-41.8L47.16-41.8C43.29-41.8 40.16-38.66 40.16-34.8C40.16-30.93 43.29-27.8 47.16-27.8L68-27.8L68-6.96Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M68-6.96C68-3.09 71.13 0.04 75 0.04C78.87 0.04 82-3.09 82-6.96L82-27.8L102.83-27.8C106.7-27.8 109.83-30.93 109.83-34.8C109.83-38.66 106.7-41.8 102.83-41.8L82-41.8L82-62.63C82-66.5 78.87-69.63 75-69.63C71.13-69.63 68-66.5 68-62.63L68-41.8L47.16-41.8C43.29-41.8 40.16-38.66 40.16-34.8C40.16-30.93 43.29-27.8 47.16-27.8L68-27.8L68-6.96Z"/>
   </g>
   <g id="Semibold-M" transform="matrix(1 0 0 1 1968.27 1126)">
-   <path d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32ZM69-6.96C69-3.65 71.69-0.96 75-0.96C78.31-0.96 81-3.65 81-6.96L81-28.8L102.83-28.8C106.14-28.8 108.83-31.49 108.83-34.8C108.83-38.11 106.14-40.8 102.83-40.8L81-40.8L81-62.63C81-65.94 78.31-68.63 75-68.63C71.69-68.63 69-65.94 69-62.63L69-40.8L47.16-40.8C43.85-40.8 41.16-38.11 41.16-34.8C41.16-31.49 43.85-28.8 47.16-28.8L69-28.8L69-6.96Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M69-6.96C69-3.65 71.69-0.96 75-0.96C78.31-0.96 81-3.65 81-6.96L81-28.8L102.83-28.8C106.14-28.8 108.83-31.49 108.83-34.8C108.83-38.11 106.14-40.8 102.83-40.8L81-40.8L81-62.63C81-65.94 78.31-68.63 75-68.63C71.69-68.63 69-65.94 69-62.63L69-40.8L47.16-40.8C43.85-40.8 41.16-38.11 41.16-34.8C41.16-31.49 43.85-28.8 47.16-28.8L69-28.8L69-6.96Z"/>
   </g>
   <g id="Medium-M" transform="matrix(1 0 0 1 1671.56 1126)">
-   <path d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32ZM69.7-6.96C69.7-4.03 72.07-1.66 75-1.66C77.93-1.66 80.3-4.03 80.3-6.96L80.3-29.5L102.83-29.5C105.76-29.5 108.13-31.87 108.13-34.8C108.13-37.73 105.76-40.1 102.83-40.1L80.3-40.1L80.3-62.63C80.3-65.56 77.93-67.93 75-67.93C72.07-67.93 69.7-65.56 69.7-62.63L69.7-40.1L47.16-40.1C44.23-40.1 41.86-37.73 41.86-34.8C41.86-31.87 44.23-29.5 47.16-29.5L69.7-29.5L69.7-6.96Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M69.7-6.96C69.7-4.03 72.07-1.66 75-1.66C77.93-1.66 80.3-4.03 80.3-6.96L80.3-29.5L102.83-29.5C105.76-29.5 108.13-31.87 108.13-34.8C108.13-37.73 105.76-40.1 102.83-40.1L80.3-40.1L80.3-62.63C80.3-65.56 77.93-67.93 75-67.93C72.07-67.93 69.7-65.56 69.7-62.63L69.7-40.1L47.16-40.1C44.23-40.1 41.86-37.73 41.86-34.8C41.86-31.87 44.23-29.5 47.16-29.5L69.7-29.5L69.7-6.96Z"/>
   </g>
   <g id="Regular-M" transform="matrix(1 0 0 1 1374.84 1126)">
-   <path d="M103.92 33.82C94.87 37.74 85.22 39.7 74.96 39.7C64.71 39.7 55.06 37.74 46.01 33.82C36.96 29.95 28.98 24.55 22.06 17.63C15.19 10.71 9.8 2.72 5.88-6.33C1.96-15.38 0-25.04 0-35.3C0-45.56 1.96-55.22 5.88-64.27C9.8-73.32 15.19-81.28 22.06-88.15C28.98-95.08 36.94-100.5 45.94-104.42C54.98-108.34 64.63-110.3 74.89-110.3C85.2-110.3 94.87-108.34 103.92-104.42C112.97-100.5 120.95-95.08 127.87-88.15C134.78-81.28 140.2-73.32 144.12-64.27C148.04-55.22 150-45.56 150-35.3C150-25.04 148.04-15.38 144.12-6.33C140.2 2.72 134.78 10.71 127.87 17.63C120.95 24.55 112.97 29.95 103.92 33.82ZM70.65-7.46C70.65-5.06 72.6-3.11 75-3.11C77.4-3.11 79.35-5.06 79.35-7.46L79.35-30.95L102.83-30.95C105.23-30.95 107.18-32.9 107.18-35.3C107.18-37.7 105.23-39.65 102.83-39.65L79.35-39.65L79.35-63.13C79.35-65.54 77.4-67.48 75-67.48C72.6-67.48 70.65-65.54 70.65-63.13L70.65-39.65L47.16-39.65C44.76-39.65 42.81-37.7 42.81-35.3C42.81-32.9 44.76-30.95 47.16-30.95L70.65-30.95L70.65-7.46Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.92 33.82C94.87 37.74 85.22 39.7 74.96 39.7C64.71 39.7 55.06 37.74 46.01 33.82C36.96 29.95 28.98 24.55 22.06 17.63C15.19 10.71 9.8 2.72 5.88-6.33C1.96-15.38 0-25.04 0-35.3C0-45.56 1.96-55.22 5.88-64.27C9.8-73.32 15.19-81.28 22.06-88.15C28.98-95.08 36.94-100.5 45.94-104.42C54.98-108.34 64.63-110.3 74.89-110.3C85.2-110.3 94.87-108.34 103.92-104.42C112.97-100.5 120.95-95.08 127.87-88.15C134.78-81.28 140.2-73.32 144.12-64.27C148.04-55.22 150-45.56 150-35.3C150-25.04 148.04-15.38 144.12-6.33C140.2 2.72 134.78 10.71 127.87 17.63C120.95 24.55 112.97 29.95 103.92 33.82Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M70.65-7.46C70.65-5.06 72.6-3.11 75-3.11C77.4-3.11 79.35-5.06 79.35-7.46L79.35-30.95L102.83-30.95C105.23-30.95 107.18-32.9 107.18-35.3C107.18-37.7 105.23-39.65 102.83-39.65L79.35-39.65L79.35-63.13C79.35-65.54 77.4-67.48 75-67.48C72.6-67.48 70.65-65.54 70.65-63.13L70.65-39.65L47.16-39.65C44.76-39.65 42.81-37.7 42.81-35.3C42.81-32.9 44.76-30.95 47.16-30.95L70.65-30.95L70.65-7.46Z"/>
   </g>
   <g id="Light-M" transform="matrix(1 0 0 1 1078.13 1126)">
-   <path d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32ZM71.7-6.96C71.7-5.14 73.18-3.66 75-3.66C76.82-3.66 78.3-5.14 78.3-6.96L78.3-31.5L102.83-31.5C104.65-31.5 106.13-32.98 106.13-34.8C106.13-36.62 104.65-38.1 102.83-38.1L78.3-38.1L78.3-62.63C78.3-64.46 76.82-65.93 75-65.93C73.18-65.93 71.7-64.46 71.7-62.63L71.7-38.1L47.16-38.1C45.34-38.1 43.86-36.62 43.86-34.8C43.86-32.98 45.34-31.5 47.16-31.5L71.7-31.5L71.7-6.96Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.92 34.32C94.87 38.24 85.22 40.2 74.96 40.2C64.71 40.2 55.06 38.24 46.01 34.32C36.96 30.45 28.98 25.05 22.06 18.13C15.19 11.21 9.8 3.22 5.88-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.72 5.88-63.77C9.8-72.82 15.19-80.78 22.06-87.65C28.98-94.58 36.94-100 45.94-103.92C54.98-107.84 64.63-109.8 74.89-109.8C85.2-109.8 94.87-107.84 103.92-103.92C112.97-100 120.95-94.58 127.87-87.65C134.78-80.78 140.2-72.82 144.12-63.77C148.04-54.72 150-45.06 150-34.8C150-24.54 148.04-14.88 144.12-5.83C140.2 3.22 134.78 11.21 127.87 18.13C120.95 25.05 112.97 30.45 103.92 34.32Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M71.7-6.96C71.7-5.14 73.18-3.66 75-3.66C76.82-3.66 78.3-5.14 78.3-6.96L78.3-31.5L102.83-31.5C104.65-31.5 106.13-32.98 106.13-34.8C106.13-36.62 104.65-38.1 102.83-38.1L78.3-38.1L78.3-62.63C78.3-64.46 76.82-65.93 75-65.93C73.18-65.93 71.7-64.46 71.7-62.63L71.7-38.1L47.16-38.1C45.34-38.1 43.86-36.62 43.86-34.8C43.86-32.98 45.34-31.5 47.16-31.5L71.7-31.5L71.7-6.96Z"/>
   </g>
   <g id="Thin-M" transform="matrix(1 0 0 1 781.422 1126)">
-   <path d="M103.919 34.32C94.872 38.24 85.221 40.2 74.964 40.2C64.708 40.2 55.056 38.24 46.009 34.32C36.962 30.45 28.98 25.05 22.061 18.13C15.192 11.21 9.797 3.22 5.878-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.71 5.878-63.77C9.797-72.82 15.192-80.78 22.061-87.65C28.98-94.57 36.938-100 45.937-103.92C54.983-107.84 64.635-109.8 74.892-109.8C85.196-109.8 94.872-107.84 103.919-103.92C112.966-100 120.949-94.57 127.867-87.65C134.785-80.78 140.204-72.82 144.122-63.77C148.041-54.71 150-45.06 150-34.8C150-24.54 148.041-14.88 144.122-5.83C140.204 3.22 134.785 11.21 127.867 18.13C120.949 25.05 112.966 30.45 103.919 34.32ZM73.201-6.96C73.201-5.96 74.006-5.16 75.001-5.16C75.995-5.16 76.801-5.96 76.801-6.96L76.801-33L102.831-33C103.825-33 104.631-33.8 104.631-34.8C104.631-35.79 103.825-36.6 102.831-36.6L76.801-36.6L76.801-62.63C76.801-63.62 75.995-64.43 75.001-64.43C74.006-64.43 73.201-63.62 73.201-62.63L73.201-36.6L47.161-36.6C46.167-36.6 45.361-35.79 45.361-34.8C45.361-33.8 46.167-33 47.161-33L73.201-33L73.201-6.96Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.919 34.32C94.872 38.24 85.221 40.2 74.964 40.2C64.708 40.2 55.056 38.24 46.009 34.32C36.962 30.45 28.98 25.05 22.061 18.13C15.192 11.21 9.797 3.22 5.878-5.83C1.96-14.88 0-24.54 0-34.8C0-45.06 1.96-54.71 5.878-63.77C9.797-72.82 15.192-80.78 22.061-87.65C28.98-94.57 36.938-100 45.937-103.92C54.983-107.84 64.635-109.8 74.892-109.8C85.196-109.8 94.872-107.84 103.919-103.92C112.966-100 120.949-94.57 127.867-87.65C134.785-80.78 140.204-72.82 144.122-63.77C148.041-54.71 150-45.06 150-34.8C150-24.54 148.041-14.88 144.122-5.83C140.204 3.22 134.785 11.21 127.867 18.13C120.949 25.05 112.966 30.45 103.919 34.32Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M73.201-6.96C73.201-5.96 74.006-5.16 75.001-5.16C75.995-5.16 76.801-5.96 76.801-6.96L76.801-33L102.831-33C103.825-33 104.631-33.8 104.631-34.8C104.631-35.79 103.825-36.6 102.831-36.6L76.801-36.6L76.801-62.63C76.801-63.62 75.995-64.43 75.001-64.43C74.006-64.43 73.201-63.62 73.201-62.63L73.201-36.6L47.161-36.6C46.167-36.6 45.361-35.79 45.361-34.8C45.361-33.8 46.167-33 47.161-33L73.201-33L73.201-6.96Z"/>
   </g>
   <g id="Ultralight-M" transform="matrix(1 0 0 1 484.711 1126)">
-   <path d="M103.919 34.32C94.872 38.24 85.22 40.2 74.964 40.2C64.707 40.2 55.056 38.24 46.009 34.32C36.962 30.45 28.979 25.05 22.061 18.13C15.191 11.21 9.797 3.22 5.878-5.83C1.959-14.88 0-24.54 0-34.8C0-45.06 1.959-54.72 5.878-63.77C9.797-72.82 15.191-80.78 22.061-87.65C28.979-94.58 36.938-100 45.936-103.92C54.983-107.84 64.635-109.8 74.891-109.8C85.196-109.8 94.872-107.84 103.919-103.92C112.966-100 120.948-94.58 127.866-87.65C134.785-80.78 140.203-72.82 144.122-63.77C148.041-54.72 150-45.06 150-34.8C150-24.54 148.041-14.88 144.122-5.83C140.203 3.22 134.785 11.21 127.866 18.13C120.948 25.05 112.966 30.45 103.919 34.32ZM73.875-6.96C73.875-6.34 74.379-5.83 75-5.83C75.621-5.83 76.125-6.34 76.125-6.96L76.125-33.67L102.83-33.67C103.451-33.67 103.955-34.18 103.955-34.8C103.955-35.42 103.451-35.92 102.83-35.92L76.125-35.92L76.125-62.63C76.125-63.25 75.621-63.75 75-63.75C74.379-63.75 73.875-63.25 73.875-62.63L73.875-35.92L47.16-35.92C46.539-35.92 46.035-35.42 46.035-34.8C46.035-34.18 46.539-33.67 47.16-33.67L73.875-33.67L73.875-6.96Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M103.919 34.32C94.872 38.24 85.22 40.2 74.964 40.2C64.707 40.2 55.056 38.24 46.009 34.32C36.962 30.45 28.979 25.05 22.061 18.13C15.191 11.21 9.797 3.22 5.878-5.83C1.959-14.88 0-24.54 0-34.8C0-45.06 1.959-54.72 5.878-63.77C9.797-72.82 15.191-80.78 22.061-87.65C28.979-94.58 36.938-100 45.936-103.92C54.983-107.84 64.635-109.8 74.891-109.8C85.196-109.8 94.872-107.84 103.919-103.92C112.966-100 120.948-94.58 127.866-87.65C134.785-80.78 140.203-72.82 144.122-63.77C148.041-54.72 150-45.06 150-34.8C150-24.54 148.041-14.88 144.122-5.83C140.203 3.22 134.785 11.21 127.866 18.13C120.948 25.05 112.966 30.45 103.919 34.32Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M73.875-6.96C73.875-6.34 74.379-5.83 75-5.83C75.621-5.83 76.125-6.34 76.125-6.96L76.125-33.67L102.83-33.67C103.451-33.67 103.955-34.18 103.955-34.8C103.955-35.42 103.451-35.92 102.83-35.92L76.125-35.92L76.125-62.63C76.125-63.25 75.621-63.75 75-63.75C74.379-63.75 73.875-63.25 73.875-62.63L73.875-35.92L47.16-35.92C46.539-35.92 46.035-35.42 46.035-34.8C46.035-34.18 46.539-33.67 47.16-33.67L73.875-33.67L73.875-6.96Z"/>
   </g>
   <g id="Black-S" transform="matrix(1 0 0 1 2879.4 696)">
-   <path d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967ZM44.84-7.83C44.84-2.583 49.09 1.67 54.34 1.67C59.59 1.67 63.84-2.583 63.84-7.83L63.84-26.168L82.17-26.168C87.42-26.168 91.67-30.421 91.67-35.668C91.67-40.915 87.42-45.168 82.17-45.168L63.84-45.168L63.84-63.5C63.84-68.747 59.59-73 54.34-73C49.09-73 44.84-68.747 44.84-63.5L44.84-45.168L26.5-45.168C21.25-45.168 17-40.915 17-35.668C17-30.421 21.25-26.168 26.5-26.168L44.84-26.168L44.84-7.83Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M44.84-7.83C44.84-2.583 49.09 1.67 54.34 1.67C59.59 1.67 63.84-2.583 63.84-7.83L63.84-26.168L82.17-26.168C87.42-26.168 91.67-30.421 91.67-35.668C91.67-40.915 87.42-45.168 82.17-45.168L63.84-45.168L63.84-63.5C63.84-68.747 59.59-73 54.34-73C49.09-73 44.84-68.747 44.84-63.5L44.84-45.168L26.5-45.168C21.25-45.168 17-40.915 17-35.668C17-30.421 21.25-26.168 26.5-26.168L44.84-26.168L44.84-7.83Z"/>
   </g>
   <g id="Heavy-S" transform="matrix(1 0 0 1 2582.69 696)">
-   <path d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967ZM45.34-8.33C45.34-3.636 49.15 0.17 53.84 0.17C58.53 0.17 62.34-3.636 62.34-8.33L62.34-27.668L81.67-27.668C86.36-27.668 90.17-31.473 90.17-36.168C90.17-40.862 86.36-44.668 81.67-44.668L62.34-44.668L62.34-64C62.34-68.694 58.53-72.5 53.84-72.5C49.15-72.5 45.34-68.694 45.34-64L45.34-44.668L26-44.668C21.31-44.668 17.5-40.862 17.5-36.168C17.5-31.473 21.31-27.668 26-27.668L45.34-27.668L45.34-8.33Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M45.34-8.33C45.34-3.636 49.15 0.17 53.84 0.17C58.53 0.17 62.34-3.636 62.34-8.33L62.34-27.668L81.67-27.668C86.36-27.668 90.17-31.473 90.17-36.168C90.17-40.862 86.36-44.668 81.67-44.668L62.34-44.668L62.34-64C62.34-68.694 58.53-72.5 53.84-72.5C49.15-72.5 45.34-68.694 45.34-64L45.34-44.668L26-44.668C21.31-44.668 17.5-40.862 17.5-36.168C17.5-31.473 21.31-27.668 26-27.668L45.34-27.668L45.34-8.33Z"/>
   </g>
   <g id="Bold-S" transform="matrix(1 0 0 1 2285.98 696)">
-   <path d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967ZM46.84-8.33C46.84-4.464 49.97-1.33 53.84-1.33C57.71-1.33 60.84-4.464 60.84-8.33L60.84-29.168L81.67-29.168C85.54-29.168 88.67-32.302 88.67-36.168C88.67-40.034 85.54-43.168 81.67-43.168L60.84-43.168L60.84-64C60.84-67.866 57.71-71 53.84-71C49.97-71 46.84-67.866 46.84-64L46.84-43.168L26-43.168C22.13-43.168 19-40.034 19-36.168C19-32.302 22.13-29.168 26-29.168L46.84-29.168L46.84-8.33Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M46.84-8.33C46.84-4.464 49.97-1.33 53.84-1.33C57.71-1.33 60.84-4.464 60.84-8.33L60.84-29.168L81.67-29.168C85.54-29.168 88.67-32.302 88.67-36.168C88.67-40.034 85.54-43.168 81.67-43.168L60.84-43.168L60.84-64C60.84-67.866 57.71-71 53.84-71C49.97-71 46.84-67.866 46.84-64L46.84-43.168L26-43.168C22.13-43.168 19-40.034 19-36.168C19-32.302 22.13-29.168 26-29.168L46.84-29.168L46.84-8.33Z"/>
   </g>
   <g id="Semibold-S" transform="matrix(1 0 0 1 1989.27 696)">
-   <path d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967ZM47.84-8.33C47.84-5.016 50.53-2.33 53.84-2.33C57.15-2.33 59.84-5.016 59.84-8.33L59.84-30.168L81.67-30.168C84.98-30.168 87.67-32.854 87.67-36.168C87.67-39.482 84.98-42.168 81.67-42.168L59.84-42.168L59.84-64C59.84-67.314 57.15-70 53.84-70C50.53-70 47.84-67.314 47.84-64L47.84-42.168L26-42.168C22.69-42.168 20-39.482 20-36.168C20-32.854 22.69-30.168 26-30.168L47.84-30.168L47.84-8.33Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M47.84-8.33C47.84-5.016 50.53-2.33 53.84-2.33C57.15-2.33 59.84-5.016 59.84-8.33L59.84-30.168L81.67-30.168C84.98-30.168 87.67-32.854 87.67-36.168C87.67-39.482 84.98-42.168 81.67-42.168L59.84-42.168L59.84-64C59.84-67.314 57.15-70 53.84-70C50.53-70 47.84-67.314 47.84-64L47.84-42.168L26-42.168C22.69-42.168 20-39.482 20-36.168C20-32.854 22.69-30.168 26-30.168L47.84-30.168L47.84-8.33Z"/>
   </g>
   <g id="Medium-S" transform="matrix(1 0 0 1 1692.56 696)">
-   <path d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967ZM48.84-8.03C48.84-5.103 51.21-2.73 54.14-2.73C57.07-2.73 59.44-5.103 59.44-8.03L59.44-30.568L81.97-30.568C84.9-30.568 87.27-32.941 87.27-35.868C87.27-38.795 84.9-41.168 81.97-41.168L59.44-41.168L59.44-63.7C59.44-66.627 57.07-69 54.14-69C51.21-69 48.84-66.627 48.84-63.7L48.84-41.168L26.3-41.168C23.37-41.168 21-38.795 21-35.868C21-32.941 23.37-30.568 26.3-30.568L48.84-30.568L48.84-8.03Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M48.84-8.03C48.84-5.103 51.21-2.73 54.14-2.73C57.07-2.73 59.44-5.103 59.44-8.03L59.44-30.568L81.97-30.568C84.9-30.568 87.27-32.941 87.27-35.868C87.27-38.795 84.9-41.168 81.97-41.168L59.44-41.168L59.44-63.7C59.44-66.627 57.07-69 54.14-69C51.21-69 48.84-66.627 48.84-63.7L48.84-41.168L26.3-41.168C23.37-41.168 21-38.795 21-35.868C21-32.941 23.37-30.568 26.3-30.568L48.84-30.568L48.84-8.03Z"/>
   </g>
   <g id="Regular-S" transform="matrix(1 0 0 1 1395.84 696)">
-   <path d="M74.82 13.965C68.31 16.788 61.36 18.199 53.97 18.199C46.59 18.199 39.64 16.788 33.13 13.965C26.61 11.177 20.87 7.291 15.88 2.308C10.94-2.676 7.05-8.426 4.23-14.943C1.41-21.46 0-28.413 0-35.801C0-43.189 1.41-50.142 4.23-56.658C7.05-63.175 10.94-68.908 15.88-73.857C20.87-78.84 26.6-82.744 33.07-85.567C39.59-88.389 46.54-89.801 53.92-89.801C61.34-89.801 68.31-88.389 74.82-85.567C81.34-82.744 87.08-78.84 92.06-73.857C97.04-68.908 100.95-63.175 103.77-56.658C106.59-50.142 108-43.189 108-35.801C108-28.413 106.59-21.46 103.77-14.943C100.95-8.426 97.04-2.676 92.06 2.308C87.08 7.291 81.34 11.177 74.82 13.965ZM49.84-7.98C49.84-5.578 51.79-3.63 54.19-3.63C56.59-3.63 58.54-5.578 58.54-7.98L58.54-31.468L82.02-31.468C84.42-31.468 86.37-33.415 86.37-35.818C86.37-38.22 84.42-40.168 82.02-40.168L58.54-40.168L58.54-63.65C58.54-66.052 56.59-68 54.19-68C51.79-68 49.84-66.052 49.84-63.65L49.84-40.168L26.35-40.168C23.95-40.168 22-38.22 22-35.818C22-33.415 23.95-31.468 26.35-31.468L49.84-31.468L49.84-7.98Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.82 13.965C68.31 16.788 61.36 18.199 53.97 18.199C46.59 18.199 39.64 16.788 33.13 13.965C26.61 11.177 20.87 7.291 15.88 2.308C10.94-2.676 7.05-8.426 4.23-14.943C1.41-21.46 0-28.413 0-35.801C0-43.189 1.41-50.142 4.23-56.658C7.05-63.175 10.94-68.908 15.88-73.857C20.87-78.84 26.6-82.744 33.07-85.567C39.59-88.389 46.54-89.801 53.92-89.801C61.34-89.801 68.31-88.389 74.82-85.567C81.34-82.744 87.08-78.84 92.06-73.857C97.04-68.908 100.95-63.175 103.77-56.658C106.59-50.142 108-43.189 108-35.801C108-28.413 106.59-21.46 103.77-14.943C100.95-8.426 97.04-2.676 92.06 2.308C87.08 7.291 81.34 11.177 74.82 13.965Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M49.84-7.98C49.84-5.578 51.79-3.63 54.19-3.63C56.59-3.63 58.54-5.578 58.54-7.98L58.54-31.468L82.02-31.468C84.42-31.468 86.37-33.415 86.37-35.818C86.37-38.22 84.42-40.168 82.02-40.168L58.54-40.168L58.54-63.65C58.54-66.052 56.59-68 54.19-68C51.79-68 49.84-66.052 49.84-63.65L49.84-40.168L26.35-40.168C23.95-40.168 22-38.22 22-35.818C22-33.415 23.95-31.468 26.35-31.468L49.84-31.468L49.84-7.98Z"/>
   </g>
   <g id="Light-S" transform="matrix(1 0 0 1 1099.13 696)">
-   <path d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967ZM50.84-8.03C50.84-6.207 52.32-4.73 54.14-4.73C55.96-4.73 57.44-6.207 57.44-8.03L57.44-32.568L81.97-32.568C83.79-32.568 85.27-34.045 85.27-35.868C85.27-37.69 83.79-39.168 81.97-39.168L57.44-39.168L57.44-63.7C57.44-65.523 55.96-67 54.14-67C52.32-67 50.84-65.523 50.84-63.7L50.84-39.168L26.3-39.168C24.48-39.168 23-37.69 23-35.868C23-34.045 24.48-32.568 26.3-32.568L50.84-32.568L50.84-8.03Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.82 13.967C68.31 16.79 61.36 18.201 53.97 18.201C46.59 18.201 39.64 16.79 33.13 13.967C26.61 11.179 20.87 7.293 15.88 2.31C10.94-2.674 7.05-8.424 4.23-14.941C1.41-21.458 0-28.411 0-35.799C0-43.187 1.41-50.14 4.23-56.657C7.05-63.173 10.94-68.906 15.88-73.855C20.87-78.839 26.6-82.742 33.07-85.565C39.59-88.387 46.54-89.799 53.92-89.799C61.34-89.799 68.31-88.387 74.82-85.565C81.34-82.742 87.08-78.839 92.06-73.855C97.05-68.906 100.95-63.173 103.77-56.657C106.59-50.14 108-43.187 108-35.799C108-28.411 106.59-21.458 103.77-14.941C100.95-8.424 97.05-2.674 92.06 2.31C87.08 7.293 81.34 11.179 74.82 13.967Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M50.84-8.03C50.84-6.207 52.32-4.73 54.14-4.73C55.96-4.73 57.44-6.207 57.44-8.03L57.44-32.568L81.97-32.568C83.79-32.568 85.27-34.045 85.27-35.868C85.27-37.69 83.79-39.168 81.97-39.168L57.44-39.168L57.44-63.7C57.44-65.523 55.96-67 54.14-67C52.32-67 50.84-65.523 50.84-63.7L50.84-39.168L26.3-39.168C24.48-39.168 23-37.69 23-35.868C23-34.045 24.48-32.568 26.3-32.568L50.84-32.568L50.84-8.03Z"/>
   </g>
   <g id="Thin-S" transform="matrix(1 0 0 1 802.422 696)">
-   <path d="M74.821 13.967C68.308 16.79 61.358 18.201 53.974 18.201C46.589 18.201 39.64 16.79 33.126 13.967C26.612 11.179 20.865 7.293 15.884 2.31C10.938-2.674 7.054-8.424 4.232-14.941C1.411-21.458 0-28.411 0-35.799C0-43.187 1.411-50.14 4.232-56.657C7.054-63.173 10.938-68.906 15.884-73.855C20.865-78.839 26.595-82.742 33.074-85.565C39.588-88.387 46.537-89.799 53.922-89.799C61.341-89.799 68.308-88.387 74.821-85.565C81.335-82.742 87.083-78.839 92.064-73.855C97.045-68.906 100.946-63.173 103.768-56.657C106.589-50.14 108-43.187 108-35.799C108-28.411 106.589-21.458 103.768-14.941C100.946-8.424 97.045-2.674 92.064 2.31C87.083 7.293 81.335 11.179 74.821 13.967ZM52.04-8.331C52.04-7.337 52.846-6.531 53.84-6.531C54.834-6.531 55.64-7.337 55.64-8.331L55.64-34.369L81.67-34.369C82.664-34.369 83.47-35.175 83.47-36.169C83.47-37.163 82.664-37.969 81.67-37.969L55.64-37.969L55.64-64.001C55.64-64.995 54.834-65.801 53.84-65.801C52.846-65.801 52.04-64.995 52.04-64.001L52.04-37.969L26-37.969C25.006-37.969 24.2-37.163 24.2-36.169C24.2-35.175 25.006-34.369 26-34.369L52.04-34.369L52.04-8.331Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.821 13.967C68.308 16.79 61.358 18.201 53.974 18.201C46.589 18.201 39.64 16.79 33.126 13.967C26.612 11.179 20.865 7.293 15.884 2.31C10.938-2.674 7.054-8.424 4.232-14.941C1.411-21.458 0-28.411 0-35.799C0-43.187 1.411-50.14 4.232-56.657C7.054-63.173 10.938-68.906 15.884-73.855C20.865-78.839 26.595-82.742 33.074-85.565C39.588-88.387 46.537-89.799 53.922-89.799C61.341-89.799 68.308-88.387 74.821-85.565C81.335-82.742 87.083-78.839 92.064-73.855C97.045-68.906 100.946-63.173 103.768-56.657C106.589-50.14 108-43.187 108-35.799C108-28.411 106.589-21.458 103.768-14.941C100.946-8.424 97.045-2.674 92.064 2.31C87.083 7.293 81.335 11.179 74.821 13.967Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M52.04-8.331C52.04-7.337 52.846-6.531 53.84-6.531C54.834-6.531 55.64-7.337 55.64-8.331L55.64-34.369L81.67-34.369C82.664-34.369 83.47-35.175 83.47-36.169C83.47-37.163 82.664-37.969 81.67-37.969L55.64-37.969L55.64-64.001C55.64-64.995 54.834-65.801 53.84-65.801C52.846-65.801 52.04-64.995 52.04-64.001L52.04-37.969L26-37.969C25.006-37.969 24.2-37.163 24.2-36.169C24.2-35.175 25.006-34.369 26-34.369L52.04-34.369L52.04-8.331Z"/>
   </g>
   <g id="Ultralight-S" transform="matrix(1 0 0 1 505.711 696)">
-   <path d="M74.821 13.967C68.308 16.79 61.358 18.201 53.974 18.201C46.589 18.201 39.64 16.79 33.126 13.967C26.612 11.179 20.865 7.293 15.884 2.31C10.938-2.674 7.054-8.424 4.232-14.941C1.411-21.458 0-28.411 0-35.799C0-43.187 1.411-50.14 4.232-56.657C7.054-63.173 10.938-68.906 15.884-73.855C20.865-78.839 26.595-82.742 33.074-85.565C39.588-88.387 46.537-89.799 53.922-89.799C61.341-89.799 68.308-88.387 74.821-85.565C81.335-82.742 87.083-78.839 92.064-73.855C97.045-68.906 100.946-63.173 103.768-56.657C106.589-50.14 108-43.187 108-35.799C108-28.411 106.589-21.458 103.768-14.941C100.946-8.424 97.045-2.674 92.064 2.31C87.083 7.293 81.335 11.179 74.821 13.967ZM52.84-8.205C52.84-7.584 53.344-7.08 53.965-7.08C54.586-7.08 55.09-7.584 55.09-8.205L55.09-34.918L81.795-34.918C82.416-34.918 82.92-35.422 82.92-36.043C82.92-36.664 82.416-37.168 81.795-37.168L55.09-37.168L55.09-63.875C55.09-64.496 54.586-65 53.965-65C53.344-65 52.84-64.496 52.84-63.875L52.84-37.168L26.125-37.168C25.504-37.168 25-36.664 25-36.043C25-35.422 25.504-34.918 26.125-34.918L52.84-34.918L52.84-8.205Z"/>
+   <path class="hierarchical-0:secondary SFSymbolsPreview4D4D4D" d="M74.821 13.967C68.308 16.79 61.358 18.201 53.974 18.201C46.589 18.201 39.64 16.79 33.126 13.967C26.612 11.179 20.865 7.293 15.884 2.31C10.938-2.674 7.054-8.424 4.232-14.941C1.411-21.458 0-28.411 0-35.799C0-43.187 1.411-50.14 4.232-56.657C7.054-63.173 10.938-68.906 15.884-73.855C20.865-78.839 26.595-82.742 33.074-85.565C39.588-88.387 46.537-89.799 53.922-89.799C61.341-89.799 68.308-88.387 74.821-85.565C81.335-82.742 87.083-78.839 92.064-73.855C97.045-68.906 100.946-63.173 103.768-56.657C106.589-50.14 108-43.187 108-35.799C108-28.411 106.589-21.458 103.768-14.941C100.946-8.424 97.045-2.674 92.064 2.31C87.083 7.293 81.335 11.179 74.821 13.967Z"/>
+   <path class="hierarchical-1:primary SFSymbolsPreview212121" d="M52.84-8.205C52.84-7.584 53.344-7.08 53.965-7.08C54.586-7.08 55.09-7.584 55.09-8.205L55.09-34.918L81.795-34.918C82.416-34.918 82.92-35.422 82.92-36.043C82.92-36.664 82.416-37.168 81.795-37.168L55.09-37.168L55.09-63.875C55.09-64.496 54.586-65 53.965-65C53.344-65 52.84-64.496 52.84-63.875L52.84-37.168L26.125-37.168C25.504-37.168 25-36.664 25-36.043C25-35.422 25.504-34.918 26.125-34.918L52.84-34.918L52.84-8.205Z"/>
   </g>
  </g>
 </svg>
diff --git a/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/Contents.json b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/Contents.json
new file mode 100644
index 0000000..04b1c148
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/Contents.json
@@ -0,0 +1,40 @@
+{
+    "images": [
+        {
+            "idiom": "universal",
+            "scale": "2x",
+            "filename": "plus_circle_fill_ios14@2x.png"
+        },
+        {
+            "appearances" : [
+                {
+                    "appearance" : "luminosity",
+                    "value" : "dark"
+                }
+            ],
+            "filename" : "plus_circle_fill_ios14_dark@2x.png",
+            "idiom" : "universal",
+            "scale" : "2x"
+        },
+        {
+            "idiom": "universal",
+            "scale": "3x",
+            "filename": "plus_circle_fill_ios14@3x.png"
+        },
+        {
+            "appearances" : [
+                {
+                    "appearance" : "luminosity",
+                    "value" : "dark"
+                }
+            ],
+            "filename" : "plus_circle_fill_ios14_dark@3x.png",
+            "idiom" : "universal",
+            "scale" : "3x"
+        }
+    ],
+    "info": {
+        "version": 1,
+        "author": "xcode"
+    }
+}
diff --git a/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14@2x.png b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14@2x.png
new file mode 100644
index 0000000..b98d8db
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14@2x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14@3x.png b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14@3x.png
new file mode 100644
index 0000000..f8ae1b8
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14@3x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14_dark@2x.png b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14_dark@2x.png
new file mode 100644
index 0000000..f54b6d58
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14_dark@2x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14_dark@3x.png b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14_dark@3x.png
new file mode 100644
index 0000000..05814dae
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/plus_circle_fill_ios14.imageset/plus_circle_fill_ios14_dark@3x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/Contents.json b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/Contents.json
new file mode 100644
index 0000000..befe273
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+    "images": [
+        {
+            "idiom": "universal",
+            "scale": "2x",
+            "filename": "tab_grid_new_tab_button_incognito_ios14@2x.png"
+        },
+        {
+            "idiom": "universal",
+            "scale": "3x",
+            "filename": "tab_grid_new_tab_button_incognito_ios14@3x.png"
+        }
+    ],
+    "info": {
+        "version": 1,
+        "author": "xcode"
+    }
+}
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/tab_grid_new_tab_button_incognito_ios14@2x.png b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/tab_grid_new_tab_button_incognito_ios14@2x.png
new file mode 100644
index 0000000..5846b3d
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/tab_grid_new_tab_button_incognito_ios14@2x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/tab_grid_new_tab_button_incognito_ios14@3x.png b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/tab_grid_new_tab_button_incognito_ios14@3x.png
new file mode 100644
index 0000000..e1514e83
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_incognito_ios14.imageset/tab_grid_new_tab_button_incognito_ios14@3x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/Contents.json b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/Contents.json
new file mode 100644
index 0000000..b40dd30
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+    "images": [
+        {
+            "idiom": "universal",
+            "scale": "2x",
+            "filename": "tab_grid_new_tab_button_ios14@2x.png"
+        },
+        {
+            "idiom": "universal",
+            "scale": "3x",
+            "filename": "tab_grid_new_tab_button_ios14@3x.png"
+        }
+    ],
+    "info": {
+        "version": 1,
+        "author": "xcode"
+    }
+}
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/tab_grid_new_tab_button_ios14@2x.png b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/tab_grid_new_tab_button_ios14@2x.png
new file mode 100644
index 0000000..9607dd3
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/tab_grid_new_tab_button_ios14@2x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/tab_grid_new_tab_button_ios14@3x.png b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/tab_grid_new_tab_button_ios14@3x.png
new file mode 100644
index 0000000..d0295cd
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_button_ios14.imageset/tab_grid_new_tab_button_ios14@3x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/Contents.json b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/Contents.json
new file mode 100644
index 0000000..000a8b2
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+    "images": [
+        {
+            "idiom": "universal",
+            "scale": "2x",
+            "filename": "tab_grid_new_tab_floating_button_incognito_ios14@2x.png"
+        },
+        {
+            "idiom": "universal",
+            "scale": "3x",
+            "filename": "tab_grid_new_tab_floating_button_incognito_ios14@3x.png"
+        }
+    ],
+    "info": {
+        "version": 1,
+        "author": "xcode"
+    }
+}
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/tab_grid_new_tab_floating_button_incognito_ios14@2x.png b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/tab_grid_new_tab_floating_button_incognito_ios14@2x.png
new file mode 100644
index 0000000..cfaa5f0
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/tab_grid_new_tab_floating_button_incognito_ios14@2x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/tab_grid_new_tab_floating_button_incognito_ios14@3x.png b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/tab_grid_new_tab_floating_button_incognito_ios14@3x.png
new file mode 100644
index 0000000..725698a
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_incognito_ios14.imageset/tab_grid_new_tab_floating_button_incognito_ios14@3x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/Contents.json b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/Contents.json
new file mode 100644
index 0000000..8f7872f
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+    "images": [
+        {
+            "idiom": "universal",
+            "scale": "2x",
+            "filename": "tab_grid_new_tab_floating_button_ios14@2x.png"
+        },
+        {
+            "idiom": "universal",
+            "scale": "3x",
+            "filename": "tab_grid_new_tab_floating_button_ios14@3x.png"
+        }
+    ],
+    "info": {
+        "version": 1,
+        "author": "xcode"
+    }
+}
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/tab_grid_new_tab_floating_button_ios14@2x.png b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/tab_grid_new_tab_floating_button_ios14@2x.png
new file mode 100644
index 0000000..b04b6d3
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/tab_grid_new_tab_floating_button_ios14@2x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/tab_grid_new_tab_floating_button_ios14@3x.png b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/tab_grid_new_tab_floating_button_ios14@3x.png
new file mode 100644
index 0000000..0646639a
--- /dev/null
+++ b/ios/chrome/browser/ui/icons/resources/tab_grid_new_tab_floating_button_ios14.imageset/tab_grid_new_tab_floating_button_ios14@3x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/icons/symbol_names.h b/ios/chrome/browser/ui/icons/symbol_names.h
index 66636a0..d1a0d69 100644
--- a/ios/chrome/browser/ui/icons/symbol_names.h
+++ b/ios/chrome/browser/ui/icons/symbol_names.h
@@ -42,8 +42,10 @@
 extern NSString* const kShieldSymbol;
 extern NSString* const kIncognitoSymbol;
 
-// Custom symbol names which can be configured with a color palette.
+// Custom symbol names which can be configured with a color palette. iOS 15+
+// only.
 extern NSString* const kIncognitoCircleFillSymbol;
+extern NSString* const kNewTabSymbol;
 
 // Custom symbol to replace "palette" symbols on iOS 14. Cannot be used with a
 // palette.
diff --git a/ios/chrome/browser/ui/icons/symbol_names.mm b/ios/chrome/browser/ui/icons/symbol_names.mm
index f144369..b75d0b626 100644
--- a/ios/chrome/browser/ui/icons/symbol_names.mm
+++ b/ios/chrome/browser/ui/icons/symbol_names.mm
@@ -42,6 +42,7 @@
 
 // Custom symbol names which can be configured with a color palette.
 NSString* const kIncognitoCircleFillSymbol = @"incognito_circle_fill";
+NSString* const kNewTabSymbol = @"plus_circle_fill";
 
 // Default symbol names.
 NSString* const kSyncEnabledSymbol = @"arrow.triangle.2.circlepath";
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm b/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
index 24290e4..489acd00d 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
@@ -200,6 +200,8 @@
   BadgeButtonFactory* buttonFactory = [[BadgeButtonFactory alloc] init];
   self.badgeViewController =
       [[BadgeViewController alloc] initWithButtonFactory:buttonFactory];
+  self.badgeViewController.layoutGuideCenter =
+      LayoutGuideCenterForBrowser(self.browser);
   [self.viewController addChildViewController:self.badgeViewController];
   [self.viewController setBadgeView:self.badgeViewController.view];
   [self.badgeViewController didMoveToParentViewController:self.viewController];
diff --git a/ios/chrome/browser/ui/omnibox/popup/BUILD.gn b/ios/chrome/browser/ui/omnibox/popup/BUILD.gn
index 2c0a294..306e394 100644
--- a/ios/chrome/browser/ui/omnibox/popup/BUILD.gn
+++ b/ios/chrome/browser/ui/omnibox/popup/BUILD.gn
@@ -91,8 +91,10 @@
     "//ios/chrome/browser/history",
     "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/net:crurl",
+    "//ios/chrome/browser/policy:policy_util",
     "//ios/chrome/browser/search_engines",
     "//ios/chrome/browser/ui:feature_flags",
+    "//ios/chrome/browser/ui/activity_services",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/default_promo",
@@ -113,6 +115,7 @@
     "//ios/chrome/browser/ui/omnibox/resources:pedal_payments",
     "//ios/chrome/browser/ui/omnibox/resources:pedal_safety_check",
     "//ios/chrome/browser/ui/omnibox/resources:pedal_settings",
+    "//ios/chrome/browser/ui/sharing",
     "//ios/chrome/browser/ui/toolbar/buttons",
     "//ios/chrome/browser/ui/toolbar/public",
     "//ios/chrome/browser/ui/util",
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_coordinator.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_coordinator.mm
index 506432b..64fef73 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_coordinator.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_coordinator.mm
@@ -18,7 +18,9 @@
 #import "ios/chrome/browser/history/top_sites_factory.h"
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/net/crurl.h"
+#import "ios/chrome/browser/policy/policy_util.h"
 #import "ios/chrome/browser/search_engines/template_url_service_factory.h"
+#import "ios/chrome/browser/ui/activity_services/activity_params.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
 #import "ios/chrome/browser/ui/commands/omnibox_commands.h"
@@ -40,6 +42,7 @@
 #import "ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.h"
 #import "ios/chrome/browser/ui/omnibox/popup/pedal_section_extractor.h"
 #import "ios/chrome/browser/ui/omnibox/popup/popup_swift.h"
+#import "ios/chrome/browser/ui/sharing/sharing_coordinator.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
 #import "ios/chrome/browser/web_state_list/web_state_list.h"
 #import "services/network/public/cpp/shared_url_loader_factory.h"
@@ -49,7 +52,8 @@
 #error "This file requires ARC support."
 #endif
 
-@interface OmniboxPopupCoordinator () <OmniboxPopupMediatorProtocolProvider> {
+@interface OmniboxPopupCoordinator () <OmniboxPopupMediatorProtocolProvider,
+                                       OmniboxPopupMediatorSharingDelegate> {
   std::unique_ptr<OmniboxPopupViewIOS> _popupView;
 }
 
@@ -57,6 +61,7 @@
 @property(nonatomic, strong) OmniboxPopupMediator* mediator;
 @property(nonatomic, strong) PopupModel* model;
 @property(nonatomic, strong) PopupUIConfiguration* uiConfiguration;
+@property(nonatomic, strong) SharingCoordinator* sharingCoordinator;
 
 @end
 
@@ -104,6 +109,7 @@
       templateURLService->GetDefaultSearchProvider()->GetEngineType(
           templateURLService->search_terms_data()) == SEARCH_ENGINE_GOOGLE;
   self.mediator.protocolProvider = self;
+  self.mediator.sharingDelegate = self;
   BrowserActionFactory* actionFactory = [[BrowserActionFactory alloc]
       initWithBrowser:self.browser
              scenario:MenuScenario::kOmniboxMostVisitedEntry];
@@ -131,6 +137,8 @@
         self.popupMatchPreviewDelegate;
     self.popupViewController.acceptReturnDelegate = self.acceptReturnDelegate;
     self.mediator.carouselItemConsumer = self.popupViewController;
+    self.mediator.allowIncognitoActions =
+        IsIncognitoModeDisabled(self.browser->GetBrowserState()->GetPrefs());
   }
 
   if (IsOmniboxActionsEnabled()) {
@@ -156,6 +164,7 @@
 }
 
 - (void)stop {
+  [self.sharingCoordinator stop];
   _popupView.reset();
 }
 
@@ -181,4 +190,24 @@
                             SnackbarCommands);
 }
 
+#pragma mark - OmniboxPopupMediatorSharingDelegate
+
+// Triggers the URL sharing flow for the given `URL` and `title`, with the
+// origin `view` representing the UI component for that URL.
+- (void)popupMediator:(OmniboxPopupMediator*)mediator
+             shareURL:(GURL)URL
+                title:(NSString*)title
+           originView:(UIView*)originView {
+  ActivityParams* params =
+      [[ActivityParams alloc] initWithURL:URL
+                                    title:title
+                                 scenario:ActivityScenario::MostVisitedEntry];
+  self.sharingCoordinator = [[SharingCoordinator alloc]
+      initWithBaseViewController:self.popupViewController
+                         browser:self.browser
+                          params:params
+                      originView:originView];
+  [self.sharingCoordinator start];
+}
+
 @end
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.h b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.h
index b50219a..a06c371 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.h
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.h
@@ -24,6 +24,7 @@
 @class DefaultBrowserPromoNonModalScheduler;
 class FaviconLoader;
 @class OmniboxPedalAnnotator;
+@class OmniboxPopupMediator;
 @class OmniboxPopupPresenter;
 @class PopupModel;
 @protocol SnackbarCommands;
@@ -56,6 +57,17 @@
 
 @end
 
+// Delegate for share purposes, such as sharing URLs from the popup.
+@protocol OmniboxPopupMediatorSharingDelegate
+
+// Called by `popupMediator` to share `URL` with `title`, originating from
+// `originView`.
+- (void)popupMediator:(OmniboxPopupMediator*)mediator
+             shareURL:(GURL)URL
+                title:(NSString*)title
+           originView:(UIView*)originView;
+@end
+
 @interface OmniboxPopupMediator : NSObject <AutocompleteResultConsumerDelegate,
                                             AutocompleteResultDataSource,
                                             CarouselItemMenuProvider,
@@ -90,7 +102,13 @@
 @property(nonatomic, weak) PopupModel* model;
 // The annotator to create pedals for ths mediator.
 @property(nonatomic) OmniboxPedalAnnotator* pedalAnnotator;
+// Flag that marks that incognito actions are available. Those can be disabled
+// by an enterprise policy.
+@property(nonatomic, assign) BOOL allowIncognitoActions;
 
+// Delegate for sharing popup content.
+@property(nonatomic, weak) id<OmniboxPopupMediatorSharingDelegate>
+    sharingDelegate;
 @property(nonatomic, weak) id<OmniboxPopupMediatorProtocolProvider>
     protocolProvider;
 @property(nonatomic, strong) BrowserActionFactory* mostVisitedActionFactory;
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.mm
index 35869351..3298537 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.mm
@@ -5,6 +5,7 @@
 #import "ios/chrome/browser/ui/omnibox/popup/omnibox_popup_mediator.h"
 
 #import "base/feature_list.h"
+#import "base/ios/ios_util.h"
 #import "base/metrics/histogram_functions.h"
 #import "base/metrics/user_metrics.h"
 #import "base/metrics/user_metrics_action.h"
@@ -509,6 +510,40 @@
         NSMutableArray<UIMenuElement*>* menuElements =
             [[NSMutableArray alloc] init];
 
+        [menuElements
+            addObject:[actionFactory actionToOpenInNewTabWithURL:copyURL
+                                                      completion:nil]];
+
+        UIAction* incognitoAction =
+            [actionFactory actionToOpenInNewIncognitoTabWithURL:copyURL
+                                                     completion:nil];
+
+        if (self.allowIncognitoActions) {
+          // Disable the "Open in Incognito" option if the incognito mode is
+          // disabled.
+          incognitoAction.attributes = UIMenuElementAttributesDisabled;
+        }
+
+        [menuElements addObject:incognitoAction];
+
+        if (base::ios::IsMultipleScenesSupported()) {
+          UIAction* newWindowAction = [actionFactory
+              actionToOpenInNewWindowWithURL:copyURL
+                              activityOrigin:
+                                  WindowActivityContentSuggestionsOrigin];
+          [menuElements addObject:newWindowAction];
+        }
+
+        [menuElements addObject:[actionFactory actionToCopyURL:copyURL]];
+
+        [menuElements addObject:[actionFactory actionToShareWithBlock:^{
+                        [weakSelf.sharingDelegate
+                            popupMediator:weakSelf
+                                 shareURL:copyURL
+                                    title:carouselItem.title
+                               originView:view];
+                      }]];
+
         [menuElements addObject:[actionFactory actionToRemoveWithBlock:^{
                         [weakSelf removeMostVisitedForURL:copyURL
                                          withCarouselItem:weakItem];
@@ -540,7 +575,7 @@
     return;
   }
   base::RecordAction(
-      base::UserMetricsAction("MostVisited_UrlBlacklisted_Omnibox"));
+      base::UserMetricsAction("MostVisited_UrlBlocklisted_Omnibox"));
   [self blockMostVisitedURL:URL];
   [self.carouselItemConsumer deleteCarouselItem:carouselItem];
 }
diff --git a/ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.h b/ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.h
index bcf3e5d..17936a8 100644
--- a/ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.h
+++ b/ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.h
@@ -9,6 +9,7 @@
 
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter_delegate.h"
 #import "ios/chrome/browser/ui/presenters/contained_presenter.h"
+// TODO(crbug.com/1382336): Remove the use of NamedGuide.
 #import "ios/chrome/browser/ui/util/named_guide.h"
 
 // Presenter for the popup menu. It handles showing/dismissing a popup menu.
@@ -18,7 +19,12 @@
 // parent class property.
 @property(nonatomic, weak) id<PopupMenuPresenterDelegate> delegate;
 
+// Layout guide used for the presentation.
+@property(nonatomic, strong) UILayoutGuide* layoutGuide;
+
 // Guide name used for the presentation.
+// DEPRECATED - Do not use in new code. Use layoutGuide instead.
+// http://crbug.com/1382336
 @property(nonatomic, strong) GuideName* guideName;
 
 @end
diff --git a/ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.mm b/ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.mm
index 75ffe646..354bd36 100644
--- a/ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.mm
+++ b/ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.mm
@@ -8,6 +8,7 @@
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter_delegate.h"
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_view_controller.h"
 #import "ios/chrome/browser/ui/popup_menu/public/popup_menu_view_controller_delegate.h"
+// TODO(crbug.com/1382336): Remove the use of NamedGuide.
 #import "ios/chrome/browser/ui/util/named_guide.h"
 #import "ios/chrome/common/material_timing.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
@@ -111,12 +112,17 @@
                                               constant:-kMinWidthDifference]
       .active = YES;
 
-  UILayoutGuide* namedGuide =
-      [NamedGuide guideWithName:self.guideName
-                           view:self.baseViewController.view];
+  UILayoutGuide* layoutGuide;
+  if (self.guideName) {
+    // TODO(crbug.com/1382336): Remove the use of NamedGuide.
+    layoutGuide = [NamedGuide guideWithName:self.guideName
+                                       view:self.baseViewController.view];
+  } else {
+    layoutGuide = self.layoutGuide;
+  }
   self.initialConstraints = @[
-    [popup.centerXAnchor constraintEqualToAnchor:namedGuide.centerXAnchor],
-    [popup.centerYAnchor constraintEqualToAnchor:namedGuide.centerYAnchor],
+    [popup.centerXAnchor constraintEqualToAnchor:layoutGuide.centerXAnchor],
+    [popup.centerYAnchor constraintEqualToAnchor:layoutGuide.centerYAnchor],
   ];
   [self setUpPresentedConstraints];
 
@@ -201,26 +207,32 @@
   UIView* parentView = self.baseViewController.view;
   UIView* container = self.popupViewController.contentContainer;
 
-  UILayoutGuide* namedGuide = [NamedGuide guideWithName:self.guideName
-                                                   view:parentView];
+  UILayoutGuide* layoutGuide;
+  if (self.guideName) {
+    // TODO(crbug.com/1382336): Remove the use of NamedGuide.
+    layoutGuide = [NamedGuide guideWithName:self.guideName
+                                       view:self.baseViewController.view];
+  } else {
+    layoutGuide = self.layoutGuide;
+  }
   CGRect guideFrame =
-      [self.popupViewController.view convertRect:namedGuide.layoutFrame
-                                        fromView:namedGuide.owningView];
+      [self.popupViewController.view convertRect:layoutGuide.layoutFrame
+                                        fromView:layoutGuide.owningView];
 
   NSLayoutConstraint* verticalPositioning = nil;
   if (CGRectGetMaxY(guideFrame) + kMinHeight >
       CGRectGetHeight(parentView.frame)) {
     // Display above.
     verticalPositioning =
-        [container.bottomAnchor constraintEqualToAnchor:namedGuide.topAnchor];
+        [container.bottomAnchor constraintEqualToAnchor:layoutGuide.topAnchor];
   } else {
     // Display below.
     verticalPositioning =
-        [container.topAnchor constraintEqualToAnchor:namedGuide.bottomAnchor];
+        [container.topAnchor constraintEqualToAnchor:layoutGuide.bottomAnchor];
   }
 
   NSLayoutConstraint* center = [container.centerXAnchor
-      constraintEqualToAnchor:namedGuide.centerXAnchor];
+      constraintEqualToAnchor:layoutGuide.centerXAnchor];
   center.priority = UILayoutPriorityDefaultHigh;
 
   id<LayoutGuideProvider> safeArea = parentView.safeAreaLayoutGuide;
diff --git a/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn b/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn
index 5ca2e36..98e08ba 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn
@@ -77,6 +77,7 @@
     "//ios/chrome/browser/ui/icons:symbols",
     "//ios/chrome/browser/ui/infobars/resources:infobar_hide_password_icon",
     "//ios/chrome/browser/ui/infobars/resources:infobar_reveal_password_icon",
+    "//ios/chrome/browser/ui/keyboard",
     "//ios/chrome/browser/ui/settings:settings_root",
     "//ios/chrome/browser/ui/settings/autofill",
     "//ios/chrome/browser/ui/settings/cells",
diff --git a/ios/chrome/browser/ui/settings/password/password_details/add_password_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_details/add_password_view_controller.mm
index 6a56fdb..dc54f45 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/add_password_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/password/password_details/add_password_view_controller.mm
@@ -8,10 +8,13 @@
 #import "base/mac/foundation_util.h"
 #import "base/metrics/histogram_functions.h"
 #import "base/metrics/histogram_macros.h"
+#import "base/metrics/user_metrics.h"
+#import "base/metrics/user_metrics_action.h"
 #import "base/strings/sys_string_conversions.h"
 #import "components/password_manager/core/browser/password_manager_metrics_util.h"
 #import "components/password_manager/core/common/password_manager_features.h"
 #import "ios/chrome/browser/ui/icons/symbols.h"
+#import "ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h"
 #import "ios/chrome/browser/ui/settings/cells/settings_image_detail_text_item.h"
 #import "ios/chrome/browser/ui/settings/password/password_details/add_password_handler.h"
 #import "ios/chrome/browser/ui/settings/password/password_details/add_password_view_controller_delegate.h"
@@ -771,12 +774,6 @@
   [self presentViewController:errorInfoPopover animated:YES completion:nil];
 }
 
-#pragma mark - UIResponder
-
-- (BOOL)canBecomeFirstResponder {
-  return YES;
-}
-
 #pragma mark - Metrics
 
 // Logs metrics for the given reauthentication `result` (success, failure or
@@ -808,4 +805,21 @@
                             : kMaskedPassword;
 }
 
+#pragma mark - UIResponder
+
+// To always be able to register key commands via -keyCommands, the VC must be
+// able to become first responder.
+- (BOOL)canBecomeFirstResponder {
+  return YES;
+}
+
+- (NSArray*)keyCommands {
+  return @[ UIKeyCommand.cr_close ];
+}
+
+- (void)keyCommand_close {
+  base::RecordAction(base::UserMetricsAction("MobileKeyCommandClose"));
+  [self didTapCancelButton:nil];
+}
+
 @end
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
index 0e2f94a6..c9d0363 100644
--- a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
@@ -731,7 +731,13 @@
 
 #pragma mark - UIResponder
 
-- (NSArray*)keyCommands {
+// To always be able to register key commands via -keyCommands, the VC must be
+// able to become first responder.
+- (BOOL)canBecomeFirstResponder {
+  return YES;
+}
+
+- (NSArray<UIKeyCommand*>*)keyCommands {
   if ([self presentedViewController]) {
     return nil;
   }
@@ -837,10 +843,4 @@
   [self showSafeBrowsing];
 }
 
-#pragma mark - UIResponder
-
-- (BOOL)canBecomeFirstResponder {
-  return YES;
-}
-
 @end
diff --git a/ios/chrome/browser/ui/tab_switcher/pinned_tabs/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/BUILD.gn
index 240aeb43..51a46f5 100644
--- a/ios/chrome/browser/ui/tab_switcher/pinned_tabs/BUILD.gn
+++ b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/BUILD.gn
@@ -2,6 +2,21 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+source_set("pinned_tabs_ui") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "pinned_tabs_constants.h",
+    "pinned_tabs_constants.mm",
+    "pinned_tabs_view_controller.h",
+    "pinned_tabs_view_controller.mm",
+  ]
+  deps = [
+    ":features",
+    "//ios/chrome/browser/ui/tab_switcher",
+    "//ios/chrome/common/ui/colors",
+  ]
+}
+
 source_set("features") {
   configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
diff --git a/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.h b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.h
new file mode 100644
index 0000000..1fb4e963
--- /dev/null
+++ b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.h
@@ -0,0 +1,23 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_TAB_SWITCHER_PINNED_TABS_PINNED_TABS_CONSTANTS_H_
+#define IOS_CHROME_BROWSER_UI_TAB_SWITCHER_PINNED_TABS_PINNED_TABS_CONSTANTS_H_
+
+#import <UIKit/UIKit.h>
+
+// Pinned view dimensions.
+extern const CGFloat kPinnedViewDragEnabledHeight;
+extern const CGFloat kPinnedViewDefaultHeight;
+extern const CGFloat kPinnedViewCornerRadius;
+
+// Pinned view constraints.
+extern const CGFloat kPinnedViewHorizontalPadding;
+extern const CGFloat kPinnedViewBottomPadding;
+extern const CGFloat kPinnedViewTopPadding;
+
+// Pinned view animations.
+extern const NSTimeInterval kPinnedViewFadeInTime;
+
+#endif  // IOS_CHROME_BROWSER_UI_TAB_SWITCHER_PINNED_TABS_PINNED_TABS_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.mm b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.mm
new file mode 100644
index 0000000..8ea9bad
--- /dev/null
+++ b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.mm
@@ -0,0 +1,19 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+const CGFloat kPinnedViewDragEnabledHeight = 94.0f;
+const CGFloat kPinnedViewDefaultHeight = 68.0f;
+const CGFloat kPinnedViewCornerRadius = 15.0f;
+
+const CGFloat kPinnedViewHorizontalPadding = 6.0f;
+const CGFloat kPinnedViewBottomPadding = 8.0f;
+const CGFloat kPinnedViewTopPadding = 24.0f;
+
+const NSTimeInterval kPinnedViewFadeInTime = 0.2;
diff --git a/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_view_controller.h b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_view_controller.h
new file mode 100644
index 0000000..c97ac02
--- /dev/null
+++ b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_view_controller.h
@@ -0,0 +1,19 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_TAB_SWITCHER_PINNED_TABS_PINNED_TABS_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_UI_TAB_SWITCHER_PINNED_TABS_PINNED_TABS_VIEW_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+
+// UIViewController used to display pinned tabs.
+@interface PinnedTabsViewController : UIViewController
+
+// Makes the pinned tabs view available. The pinned view should only be
+// available when the regular tabs grid is displayed.
+- (void)pinnedTabsAvailable:(BOOL)available;
+
+@end
+
+#endif  // IOS_CHROME_BROWSER_UI_TAB_SWITCHER_PINNED_TABS_PINNED_TABS_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_view_controller.mm
new file mode 100644
index 0000000..e63f0930
--- /dev/null
+++ b/ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_view_controller.mm
@@ -0,0 +1,71 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_view_controller.h"
+
+#import "ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.h"
+#import "ios/chrome/browser/ui/tab_switcher/tab_switcher_item.h"
+#import "ios/chrome/common/ui/colors/semantic_color_names.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface PinnedTabsViewController ()
+
+// UICollectionView of pinned tabs.
+@property(nonatomic, weak) UICollectionView* collectionView;
+
+// Constraints used to update the view during drag and drop actions.
+@property(nonatomic, strong) NSLayoutConstraint* dragEnabledConstraint;
+@property(nonatomic, strong) NSLayoutConstraint* defaultConstraint;
+
+// Tracks if the view is available. It does not track if the view is visible.
+@property(nonatomic, assign, getter=isAvailable) BOOL available;
+
+@end
+
+@implementation PinnedTabsViewController
+
+#pragma mark - UIViewController
+
+- (void)loadView {
+  self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
+  self.available = YES;
+
+  UICollectionView* collectionView = [[UICollectionView alloc]
+             initWithFrame:CGRectZero
+      collectionViewLayout:[[UICollectionViewLayout alloc] init]];
+  collectionView.backgroundColor = [UIColor colorNamed:kBackgroundColor];
+  collectionView.layer.cornerRadius = kPinnedViewCornerRadius;
+  collectionView.translatesAutoresizingMaskIntoConstraints = NO;
+
+  self.collectionView = collectionView;
+  self.view = collectionView;
+
+  self.dragEnabledConstraint = [collectionView.heightAnchor
+      constraintEqualToConstant:kPinnedViewDragEnabledHeight];
+  self.defaultConstraint = [collectionView.heightAnchor
+      constraintEqualToConstant:kPinnedViewDefaultHeight];
+  self.defaultConstraint.active = YES;
+}
+
+#pragma mark - Public
+
+- (void)pinnedTabsAvailable:(BOOL)available {
+  if (available == self.isAvailable)
+    return;
+
+  __weak __typeof(self) weakSelf = self;
+  [UIView animateWithDuration:kPinnedViewFadeInTime
+      animations:^{
+        self.view.alpha = available ? 1.0 : 0.0;
+      }
+      completion:^(BOOL finished) {
+        weakSelf.view.hidden = !available;
+        weakSelf.available = available;
+      }];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
index bdc0c748..f5f50c1 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
@@ -151,6 +151,8 @@
     "//ios/chrome/browser/ui/keyboard:features",
     "//ios/chrome/browser/ui/menu",
     "//ios/chrome/browser/ui/recent_tabs:recent_tabs_ui",
+    "//ios/chrome/browser/ui/tab_switcher/pinned_tabs:features",
+    "//ios/chrome/browser/ui/tab_switcher/pinned_tabs:pinned_tabs_ui",
     "//ios/chrome/browser/ui/tab_switcher/tab_grid/suggested_actions",
     "//ios/chrome/browser/ui/tab_switcher/tab_grid/transitions",
     "//ios/chrome/browser/ui/table_view:styler",
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_bottom_toolbar.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_bottom_toolbar.mm
index 231830c2..f8f8dc9 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_bottom_toolbar.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_bottom_toolbar.mm
@@ -227,8 +227,17 @@
   // zero rect frame. An arbitrary non-zero frame fixes this issue.
   _toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
   _toolbar.translatesAutoresizingMaskIntoConstraints = NO;
-  _toolbar.barStyle = UIBarStyleBlack;
-  _toolbar.translucent = YES;
+  if (UseSymbols()) {
+    UIToolbarAppearance* appearance = [[UIToolbarAppearance alloc] init];
+    appearance.backgroundColor =
+        [UIColor colorWithWhite:0 alpha:kToolbarBackgroundAlpha];
+    appearance.backgroundEffect = [UIBlurEffect
+        effectWithStyle:UIBlurEffectStyleSystemUltraThinMaterialLight];
+    _toolbar.standardAppearance = appearance;
+  } else {
+    _toolbar.barStyle = UIBarStyleBlack;
+    _toolbar.translucent = YES;
+  }
   // Remove the border of UIToolbar.
   [_toolbar setShadowImage:[[UIImage alloc] init]
         forToolbarPosition:UIBarPositionAny];
@@ -249,7 +258,16 @@
                            action:nil];
 
   if (UseSymbols()) {
-    _smallNewTabButton = [[TabGridNewTabButton alloc] init];
+    if (@available(iOS 15, *)) {
+      _smallNewTabButton = [[TabGridNewTabButton alloc] initWithLargeSize:NO];
+    } else {
+      _smallNewTabButton = [[TabGridNewTabButton alloc]
+          initWithRegularImage:[UIImage
+                                   imageNamed:@"tab_grid_new_tab_button_ios14"]
+                incognitoImage:
+                    [UIImage
+                        imageNamed:@"tab_grid_new_tab_button_incognito_ios14"]];
+    }
   } else {
     _smallNewTabButton = [[TabGridNewTabButton alloc]
         initWithRegularImage:[UIImage imageNamed:@"new_tab_toolbar_button"]
@@ -295,7 +313,28 @@
 
   // For other layout, display a floating new tab button.
   if (UseSymbols()) {
-    _largeNewTabButton = [[TabGridNewTabButton alloc] init];
+    if (@available(iOS 15, *)) {
+      _largeNewTabButton = [[TabGridNewTabButton alloc] initWithLargeSize:YES];
+
+      // When a11y font size is used, long press on UIBarButtonItem will show a
+      // built-in a11y modal panel with image and title if set. The size is not
+      // taken into account.
+      _newTabButtonItem.image =
+          CustomSymbolWithPointSize(kPlusCircleFillSymbol, 0);
+    } else {
+      UIImage* regularImage =
+          [UIImage imageNamed:@"tab_grid_new_tab_floating_button_ios14"];
+      UIImage* incognitoImage = [UIImage
+          imageNamed:@"tab_grid_new_tab_floating_button_incognito_ios14"];
+      _largeNewTabButton =
+          [[TabGridNewTabButton alloc] initWithRegularImage:regularImage
+                                             incognitoImage:incognitoImage];
+
+      // When a11y font size is used, long press on UIBarButtonItem will show a
+      // built-in a11y modal panel with image and title if set. The size is not
+      // taken into account.
+      _newTabButtonItem.image = DefaultSymbolWithPointSize(kPlusSymbol, 0);
+    }
   } else {
     UIImage* incognitoImage =
         [UIImage imageNamed:@"new_tab_floating_button_incognito"];
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_constants.h b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_constants.h
index d4fe9c7..5adf479 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_constants.h
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_constants.h
@@ -76,4 +76,7 @@
 // slide-out animation of the transition from Peeked to Revealed state.
 extern const CGFloat kThumbStripPlusSignButtonSlideOutDistance;
 
+// Alpha of the background color of the toolbar.
+extern const CGFloat kToolbarBackgroundAlpha;
+
 #endif  // IOS_CHROME_BROWSER_UI_TAB_SWITCHER_TAB_GRID_TAB_GRID_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_constants.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_constants.mm
index 0f0cebf..ae6ddfd 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_constants.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_constants.mm
@@ -84,3 +84,6 @@
 // The distance travelled by the thumb strip's plus sign button during the
 // slide-out animation of the transition from Peeked to Revealed state.
 const CGFloat kThumbStripPlusSignButtonSlideOutDistance = 400.0f;
+
+// Alpha of the background color of the toolbar.
+const CGFloat kToolbarBackgroundAlpha = 0.75;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_new_tab_button.h b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_new_tab_button.h
index c8d0ccc..5868b60 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_new_tab_button.h
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_new_tab_button.h
@@ -13,11 +13,19 @@
 
 @property(nonatomic, assign) TabGridPage page;
 
+// Init with a large/small symbol.
+- (instancetype)initWithLargeSize:(BOOL)largeSize
+    API_AVAILABLE(ios(15))NS_DESIGNATED_INITIALIZER;
 // Init with image for regular/incognito page.
 - (instancetype)initWithRegularImage:(UIImage*)regularImage
-                      incognitoImage:(UIImage*)incognitoImage;
+                      incognitoImage:(UIImage*)incognitoImage
+    NS_DESIGNATED_INITIALIZER;
+
+- (instancetype)init NS_UNAVAILABLE;
 - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
 - (instancetype)initWithCoder:(NSCoder*)coder NS_UNAVAILABLE;
+- (instancetype)initWithFrame:(CGRect)frame
+                primaryAction:(UIAction*)primaryAction NS_UNAVAILABLE;
 
 @end
 
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_new_tab_button.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_new_tab_button.mm
index c539506..1d953bc 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_new_tab_button.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_new_tab_button.mm
@@ -19,8 +19,10 @@
 
 namespace {
 
-// The size of the symbol image.
-const CGFloat kSymbolNewTabPointSize = 24;
+// The size of the small symbol image.
+const CGFloat kSmallSymbolSize = 24;
+// The size of the large symbol image.
+const CGFloat kLargeSymbolSize = 37;
 
 }  // namespace
 
@@ -30,25 +32,21 @@
 @property(nonatomic, strong) UIImage* regularImage;
 @property(nonatomic, strong) UIImage* incognitoImage;
 
-// Image for the open new tab button.
-@property(nonatomic, strong) UIImage* tabGridNewTabImage;
-
-// View used as a background for the open new tab button.
-@property(nonatomic, strong) UIView* circleBackgroundView;
+@property(nonatomic, strong) UIImage* symbol;
 
 @end
 
 @implementation TabGridNewTabButton
 
-- (instancetype)init {
+- (instancetype)initWithLargeSize:(BOOL)largeSize {
   self = [super initWithFrame:CGRectZero];
   if (self) {
     DCHECK(UseSymbols());
-    _tabGridNewTabImage = CustomSymbolWithPointSize(kPlusCircleFillSymbol,
-                                                    kSymbolNewTabPointSize);
+    CGFloat symbolSize = largeSize ? kLargeSymbolSize : kSmallSymbolSize;
+    _symbol = CustomSymbolWithPointSize(kPlusCircleFillSymbol, symbolSize);
+    [self setImage:_symbol forState:UIControlStateNormal];
     self.pointerInteractionEnabled = YES;
     self.pointerStyleProvider = CreateLiftEffectCirclePointerStyleProvider();
-    [self configureCircleBackgroundView];
   }
   return self;
 }
@@ -57,7 +55,6 @@
                       incognitoImage:(UIImage*)incognitoImage {
   self = [super initWithFrame:CGRectZero];
   if (self) {
-    DCHECK(!UseSymbols());
     _regularImage = regularImage;
     _incognitoImage = incognitoImage;
 
@@ -70,32 +67,19 @@
 #pragma mark - Public
 
 - (void)setPage:(TabGridPage)page {
-  UseSymbols() ? [self setSymbolPage:page] : [self setIconPage:page];
+  if (@available(iOS 15, *)) {
+    if (UseSymbols()) {
+      [self setSymbolPage:page];
+    } else {
+      [self setIconPage:page];
+    }
+  } else {
+    [self setIconPage:page];
+  }
 }
 
 #pragma mark - Private
 
-// Adds a circle background view below the image.
-- (void)configureCircleBackgroundView {
-  UIView* circleBackgroundView = [[UIView alloc] init];
-  circleBackgroundView.translatesAutoresizingMaskIntoConstraints = NO;
-  circleBackgroundView.userInteractionEnabled = NO;
-  circleBackgroundView.layer.cornerRadius =
-      self.tabGridNewTabImage.size.width / 2;
-
-  // Make sure that the circleBackgroundView is below the image.
-  [self insertSubview:circleBackgroundView belowSubview:self.imageView];
-  AddSameCenterConstraints(self.imageView, circleBackgroundView);
-  [NSLayoutConstraint activateConstraints:@[
-    [circleBackgroundView.widthAnchor
-        constraintEqualToAnchor:self.imageView.widthAnchor],
-    [circleBackgroundView.heightAnchor
-        constraintEqualToAnchor:self.imageView.heightAnchor],
-  ]];
-
-  self.circleBackgroundView = circleBackgroundView;
-}
-
 // Sets page using icon images.
 - (void)setIconPage:(TabGridPage)page {
   // self.page is inited to 0 (i.e. TabGridPageIncognito) so do not early return
@@ -123,25 +107,30 @@
 }
 
 // Sets page using a symbol image.
-- (void)setSymbolPage:(TabGridPage)page {
+- (void)setSymbolPage:(TabGridPage)page API_AVAILABLE(ios(15)) {
   switch (page) {
     case TabGridPageIncognitoTabs:
       self.accessibilityLabel =
           l10n_util::GetNSString(IDS_IOS_TAB_GRID_CREATE_NEW_INCOGNITO_TAB);
-      self.tintColor = UIColor.whiteColor;
-      self.circleBackgroundView.backgroundColor = UIColor.clearColor;
+      [self
+          setImage:SymbolWithPalette(
+                       self.symbol, @[ UIColor.blackColor, UIColor.whiteColor ])
+          forState:UIControlStateNormal];
       break;
     case TabGridPageRegularTabs:
       self.accessibilityLabel =
           l10n_util::GetNSString(IDS_IOS_TAB_GRID_CREATE_NEW_TAB);
-      self.tintColor = [UIColor colorNamed:kBlueColor];
-      self.circleBackgroundView.backgroundColor = UIColor.whiteColor;
+      [self setImage:SymbolWithPalette(self.symbol,
+                                       @[
+                                         UIColor.blackColor,
+                                         [UIColor colorNamed:kBlue400Color]
+                                       ])
+            forState:UIControlStateNormal];
       break;
     case TabGridPageRemoteTabs:
       break;
   }
   _page = page;
-  [self setImage:self.tabGridNewTabImage forState:UIControlStateNormal];
 }
 
 @end
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_top_toolbar.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_top_toolbar.mm
index 42b36c5..0a271f9 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_top_toolbar.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_top_toolbar.mm
@@ -360,8 +360,17 @@
 
 - (void)setupViews {
   self.translatesAutoresizingMaskIntoConstraints = NO;
-  self.barStyle = UIBarStyleBlack;
-  self.translucent = YES;
+  if (UseSymbols()) {
+    UIToolbarAppearance* appearance = [[UIToolbarAppearance alloc] init];
+    appearance.backgroundColor =
+        [UIColor colorWithWhite:0 alpha:kToolbarBackgroundAlpha];
+    appearance.backgroundEffect = [UIBlurEffect
+        effectWithStyle:UIBlurEffectStyleSystemUltraThinMaterialLight];
+    self.standardAppearance = appearance;
+  } else {
+    self.barStyle = UIBarStyleBlack;
+    self.translucent = YES;
+  }
   self.delegate = self;
   [self setShadowImage:[[UIImage alloc] init]
       forToolbarPosition:UIBarPositionAny];
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm
index 6ec3ac08..a6ca4aaa 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm
@@ -23,6 +23,9 @@
 #import "ios/chrome/browser/ui/keyboard/features.h"
 #import "ios/chrome/browser/ui/menu/action_factory.h"
 #import "ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.h"
+#import "ios/chrome/browser/ui/tab_switcher/pinned_tabs/features.h"
+#import "ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_constants.h"
+#import "ios/chrome/browser/ui/tab_switcher/pinned_tabs/pinned_tabs_view_controller.h"
 #import "ios/chrome/browser/ui/tab_switcher/tab_grid/disabled_tab_view_controller.h"
 #import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_commands.h"
 #import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_constants.h"
@@ -140,6 +143,8 @@
 // Child view controllers.
 @property(nonatomic, strong) GridViewController* regularTabsViewController;
 @property(nonatomic, strong) GridViewController* incognitoTabsViewController;
+@property(nonatomic, strong) PinnedTabsViewController* pinnedTabsViewController;
+
 // Disabled tab view controllers shown when a certain browser mode is disabled.
 @property(nonatomic, strong)
     DisabledTabViewController* incognitoDisabledTabViewController;
@@ -241,6 +246,7 @@
         ];
         break;
     }
+    _pinnedTabsViewController = [[PinnedTabsViewController alloc] init];
   }
   return self;
 }
@@ -275,6 +281,10 @@
   [self setupBottomToolbar];
   [self setupEditButton];
 
+  if (IsPinnedTabsEnabled()) {
+    [self setupPinnedTabsViewController];
+  }
+
   // Hide the toolbars and the floating button, so they can fade in the first
   // time there's a transition into this view controller.
   [self hideToolbars];
@@ -1055,6 +1065,12 @@
     UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification,
                                     nil);
   }
+  if (IsPinnedTabsEnabled()) {
+    BOOL isTabGridPageRegularTabs =
+        currentPage == TabGridPage::TabGridPageRegularTabs;
+    [self.pinnedTabsViewController
+        pinnedTabsAvailable:isTabGridPageRegularTabs];
+  }
 }
 
 // Sets the value of `currentPage`, adjusting the position of the scroll view
@@ -1457,6 +1473,39 @@
   AddSameConstraints(foregroundView, self.view);
 }
 
+// Adds the PinnedTabsViewController and sets constraints.
+- (void)setupPinnedTabsViewController {
+  PinnedTabsViewController* pinnedTabsViewController =
+      self.pinnedTabsViewController;
+  [self.view addSubview:pinnedTabsViewController.view];
+
+  NSMutableArray* pinnedTabsConstraints =
+      [[NSMutableArray alloc] initWithArray:@[
+        [pinnedTabsViewController.view.leadingAnchor
+            constraintEqualToAnchor:self.view.leadingAnchor
+                           constant:kPinnedViewHorizontalPadding],
+        [pinnedTabsViewController.view.trailingAnchor
+            constraintEqualToAnchor:self.view.trailingAnchor
+                           constant:-kPinnedViewHorizontalPadding],
+      ]];
+  switch (GetPinnedTabsPosition()) {
+    case PinnedTabsTopPosition::kBottomPosition:
+      [pinnedTabsConstraints
+          addObject:[pinnedTabsViewController.view.bottomAnchor
+                        constraintEqualToAnchor:self.bottomToolbar.topAnchor
+                                       constant:-kPinnedViewBottomPadding]];
+      break;
+
+    case PinnedTabsTopPosition::kTopPosition:
+      [pinnedTabsConstraints
+          addObject:[pinnedTabsViewController.view.topAnchor
+                        constraintEqualToAnchor:self.topToolbar.bottomAnchor
+                                       constant:kPinnedViewTopPadding]];
+      break;
+  }
+  [NSLayoutConstraint activateConstraints:pinnedTabsConstraints];
+}
+
 // Adds the thumb strip's plus sign button, which is visible when the plus sign
 // cell isn't.
 - (void)setupThumbStripPlusSignButton {
@@ -2515,6 +2564,12 @@
 
 #pragma mark - UIResponder
 
+// To always be able to register key commands via -keyCommands, the VC must be
+// able to become first responder.
+- (BOOL)canBecomeFirstResponder {
+  return YES;
+}
+
 - (NSArray<UIKeyCommand*>*)keyCommands {
   if (IsKeyboardShortcutsMenuEnabled()) {
     // Other key commands are already declared in the menu.
diff --git a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm
index e429cfa..2a192bde 100644
--- a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm
+++ b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.mm
@@ -181,12 +181,25 @@
 }
 
 - (ToolbarButton*)openNewTabButton {
-  UIImage* newTabImage =
-      UseSymbols()
-          ? DefaultSymbolWithPointSize(kPlusSymbol, kSymbolToolbarPointSize)
-          : [UIImage imageNamed:@"toolbar_new_tab_page"];
-  ToolbarNewTabButton* newTabButton =
-      [ToolbarNewTabButton toolbarButtonWithImage:newTabImage];
+  ToolbarButton* newTabButton;
+  if (UseSymbols()) {
+    if (@available(iOS 15, *)) {
+      UIImage* image = SymbolWithPalette(
+          CustomSymbolWithPointSize(kNewTabSymbol, kSymbolToolbarPointSize), @[
+            [UIColor colorNamed:kGrey600Color],
+            [UIColor colorNamed:kGrey200Color]
+          ]);
+      newTabButton = [ToolbarButton toolbarButtonWithImage:image];
+    } else {
+      newTabButton = [ToolbarButton
+          toolbarButtonWithImage:
+              [[UIImage imageNamed:@"plus_circle_fill_ios14"]
+                  imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+    }
+  } else {
+    newTabButton = [ToolbarNewTabButton
+        toolbarButtonWithImage:[UIImage imageNamed:@"toolbar_new_tab_page"]];
+  }
 
   [newTabButton addTarget:self.actionHandler
                    action:@selector(newTabAction:)
@@ -202,7 +215,7 @@
   newTabButton.accessibilityIdentifier = kToolbarNewTabButtonIdentifier;
 
   newTabButton.visibilityMask =
-      self.visibilityConfiguration.searchButtonVisibility;
+      self.visibilityConfiguration.newTabButtonVisibility;
   return newTabButton;
 }
 
diff --git a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.h b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.h
index 32347322..5f446c2 100644
--- a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.h
+++ b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.h
@@ -40,7 +40,7 @@
 @property(nonatomic, readonly)
     ToolbarComponentVisibility contractButtonVisibility;
 @property(nonatomic, readonly)
-    ToolbarComponentVisibility searchButtonVisibility;
+    ToolbarComponentVisibility newTabButtonVisibility;
 @property(nonatomic, readonly)
     ToolbarComponentVisibility locationBarLeadingButtonVisibility;
 
diff --git a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.mm b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.mm
index 3afc0eb3..ee41ede 100644
--- a/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.mm
+++ b/ios/chrome/browser/ui/toolbar/buttons/toolbar_button_visibility_configuration.mm
@@ -109,7 +109,7 @@
   }
 }
 
-- (ToolbarComponentVisibility)searchButtonVisibility {
+- (ToolbarComponentVisibility)newTabButtonVisibility {
   switch (self.type) {
     case PRIMARY:
       return ToolbarComponentVisibilityNone;
diff --git a/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm
index 11f217fb..60a8ff2 100644
--- a/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm
+++ b/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm
@@ -204,6 +204,12 @@
 
 #pragma mark - UIResponder
 
+// To always be able to register key commands via -keyCommands, the VC must be
+// able to become first responder.
+- (BOOL)canBecomeFirstResponder {
+  return YES;
+}
+
 - (NSArray<UIKeyCommand*>*)keyCommands {
   return @[ UIKeyCommand.cr_close ];
 }
diff --git a/ios/chrome/common/ui/colors/resources/BUILD.gn b/ios/chrome/common/ui/colors/resources/BUILD.gn
index 364a891..f01f4acf 100644
--- a/ios/chrome/common/ui/colors/resources/BUILD.gn
+++ b/ios/chrome/common/ui/colors/resources/BUILD.gn
@@ -7,6 +7,7 @@
 group("resources") {
   deps = [
     ":background_color",
+    ":blue_400_color",
     ":blue_500_color",
     ":blue_600_color",
     ":blue_700_color",
@@ -79,6 +80,10 @@
   sources = [ "blue_halo_color.colorset/Contents.json" ]
 }
 
+colorset("blue_400_color") {
+  sources = [ "blue_400_color.colorset/Contents.json" ]
+}
+
 colorset("blue_500_color") {
   sources = [ "blue_500_color.colorset/Contents.json" ]
 }
diff --git a/ios/chrome/common/ui/colors/resources/blue_400_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/blue_400_color.colorset/Contents.json
new file mode 100644
index 0000000..46b87b0e
--- /dev/null
+++ b/ios/chrome/common/ui/colors/resources/blue_400_color.colorset/Contents.json
@@ -0,0 +1,38 @@
+{
+  "info": {
+    "version": 1,
+    "author": "xcode"
+  },
+  "colors": [
+    {
+      "idiom": "universal",
+      "color": {
+        "color-space": "display-p3",
+        "components": {
+          "alpha": "1.000",
+          "red": "0x66",
+          "green": "0x9D",
+          "blue": "0xF6"
+        }
+      }
+    },
+    {
+      "idiom" : "universal",
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "color-space" : "display-p3",
+        "components" : {
+          "alpha" : "1.000",
+          "red" : "0x42",
+          "green" : "0x85",
+          "blue" : "0xF4"
+        }
+      }
+    }
+  ]
+}
diff --git a/ios/chrome/common/ui/colors/semantic_color_names.h b/ios/chrome/common/ui/colors/semantic_color_names.h
index 5bf5a8a..0861d12f 100644
--- a/ios/chrome/common/ui/colors/semantic_color_names.h
+++ b/ios/chrome/common/ui/colors/semantic_color_names.h
@@ -63,6 +63,7 @@
 extern NSString* const kBlueHaloColor;
 
 // Blue palette
+extern NSString* const kBlue400Color;
 extern NSString* const kBlue500Color;
 extern NSString* const kBlue600Color;
 extern NSString* const kBlue700Color;
diff --git a/ios/chrome/common/ui/colors/semantic_color_names.mm b/ios/chrome/common/ui/colors/semantic_color_names.mm
index 4b71939..4723518 100644
--- a/ios/chrome/common/ui/colors/semantic_color_names.mm
+++ b/ios/chrome/common/ui/colors/semantic_color_names.mm
@@ -47,6 +47,7 @@
 #pragma mark - Standard Colors
 NSString* const kBlueColor = @"blue_color";
 NSString* const kBlueHaloColor = @"blue_halo_color";
+NSString* const kBlue400Color = @"blue_400_color";
 NSString* const kBlue500Color = @"blue_500_color";
 NSString* const kBlue600Color = @"blue_600_color";
 NSString* const kBlue700Color = @"blue_700_color";
diff --git a/ios/showcase/badges/sc_badge_container_view_controller.mm b/ios/showcase/badges/sc_badge_container_view_controller.mm
index 681569fb..d1b703d 100644
--- a/ios/showcase/badges/sc_badge_container_view_controller.mm
+++ b/ios/showcase/badges/sc_badge_container_view_controller.mm
@@ -11,8 +11,6 @@
 #import "ios/chrome/browser/ui/badges/badge_static_item.h"
 #import "ios/chrome/browser/ui/badges/badge_tappable_item.h"
 #import "ios/chrome/browser/ui/badges/badge_type.h"
-#import "ios/chrome/browser/ui/util/named_guide.h"
-#import "ios/chrome/browser/ui/util/named_guide_util.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
 #import "ios/showcase/badges/sc_badge_constants.h"
 
@@ -188,7 +186,6 @@
   [self didMoveToParentViewController:self.badgeViewController];
   self.consumer = self.badgeViewController;
 
-  AddNamedGuidesToView(@[ kBadgeOverflowMenuGuide ], self.view);
   BadgeStaticItem* incognitoItem =
       [[BadgeStaticItem alloc] initWithBadgeType:kBadgeTypeIncognito];
   BadgeTappableItem* passwordBadgeItem =
diff --git a/ios/web/shell/test/BUILD.gn b/ios/web/shell/test/BUILD.gn
index 745a2e1..b78f54e21 100644
--- a/ios/web/shell/test/BUILD.gn
+++ b/ios/web/shell/test/BUILD.gn
@@ -128,6 +128,13 @@
     ":eg_app_support+eg2",
     "//ios/testing/earl_grey:eg_app_support+eg2",
   ]
+
+  if (ios_use_shared_bundle_id_for_test_apps) {
+    bundle_identifier = shared_bundle_id_for_test_apps
+  } else {
+    bundle_identifier = "$ios_app_bundle_id_prefix.chrome." +
+                        string_replace(_output_name, "_", "-")
+  }
 }
 
 ios_eg2_test("ios_web_shell_eg2tests_module") {
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index c83c142..aba123f 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2022-11-15 12:55 UTC
+# Last updated: 2022-11-16 12:54 UTC
 PinsListTimestamp
-1668516909
+1668603290
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/rlz/chromeos/lib/rlz_value_store_chromeos.cc b/rlz/chromeos/lib/rlz_value_store_chromeos.cc
index 1c6fac5..cecb7a1 100644
--- a/rlz/chromeos/lib/rlz_value_store_chromeos.cc
+++ b/rlz/chromeos/lib/rlz_value_store_chromeos.cc
@@ -379,9 +379,9 @@
   if (strcmp(event_rlz, "CAF") == 0) {
     chromeos::system::StatisticsProvider* stats =
         chromeos::system::StatisticsProvider::GetInstance();
-    std::string should_send_rlz_ping_value;
-    if (stats->GetMachineStatistic(chromeos::system::kShouldSendRlzPingKey,
-                                   &should_send_rlz_ping_value)) {
+    if (const absl::optional<base::StringPiece> should_send_rlz_ping_value =
+            stats->GetMachineStatistic(
+                chromeos::system::kShouldSendRlzPingKey)) {
       if (should_send_rlz_ping_value ==
           chromeos::system::kShouldSendRlzPingValueFalse) {
         return true;
@@ -389,7 +389,7 @@
                  chromeos::system::kShouldSendRlzPingValueTrue) {
         LOG(WARNING) << chromeos::system::kShouldSendRlzPingKey
                      << " has an unexpected value: "
-                     << should_send_rlz_ping_value << ". Treat it as "
+                     << should_send_rlz_ping_value.value() << ". Treat it as "
                      << chromeos::system::kShouldSendRlzPingValueFalse
                      << " to avoid sending duplicate rlz ping.";
         return true;
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index 059f9e0f..a048699 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -6675,37 +6675,6 @@
       },
       {
         "args": [
-          "--browser-ui-tests-verify-pixels",
-          "--enable-pixel-output-in-tests",
-          "--test-launcher-filter-file=../../testing/buildbot/filters/pixel_tests.filter",
-          "--git-revision=${got_revision}"
-        ],
-        "isolate_profile_data": true,
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "name": "pixel_browser_tests",
-        "precommit_args": [
-          "--gerrit-issue=${patch_issue}",
-          "--gerrit-patchset=${patch_set}",
-          "--buildbucket-id=${buildbucket_build_id}"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "os": "Windows-11-22000"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "browser_tests",
-        "test_id_prefix": "ninja://chrome/test:browser_tests/"
-      },
-      {
-        "args": [
           "--gtest_filter=-*UsingRealWebcam*"
         ],
         "isolate_profile_data": true,
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index c831899..dc29cec 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -3061,6 +3061,16 @@
       },
     },
   },
+  'pixel_browser_tests': {
+    # This target should be removed from any CI only builders. Developers can
+    # intentionally make UI changes. Without running pixel tests on CQ, those
+    # cls will get wrongly reverted by sheriffs.
+    # When we switch CQ builders(e.g. use Win11 to replace Win10), we also
+    # need to update this field.
+    'remove_from': [
+      'Win11 Tests x64',
+    ],
+  },
   'pixel_skia_gold_passthrough_test': {
     'modifications': {
       'Android FYI Release (Pixel 4)': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index cb43a80..c46e309 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -380,13 +380,17 @@
             ],
             "experiments": [
                 {
-                    "name": "Holdback_20221013",
+                    "name": "Holdback_20221115",
                     "enable_features": [
                         "AndroidBatteryMetricsReportOnUIThread"
                     ],
                     "disable_features": [
                         "AndroidScrollOptimizations",
-                        "ToolbarPhoneOptimizations"
+                        "CacheSiteIsolationMemoryThreshold",
+                        "MojoAvoidRandomPipeId",
+                        "NewSigninRequestHeaderCheckOrder",
+                        "ToolbarPhoneOptimizations",
+                        "UseGetrandomForRandBytes"
                     ]
                 }
             ]
@@ -4642,6 +4646,28 @@
             ]
         }
     ],
+    "ExtensionTelemetryStudyPersistence": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "params": {
+                        "NumberOfWritesInInterval": "1"
+                    },
+                    "enable_features": [
+                        "SafeBrowsingExtensionTelemetryPersistence"
+                    ]
+                }
+            ]
+        }
+    ],
     "FastPairPowerConsumption": [
         {
             "platforms": [
@@ -7745,21 +7771,6 @@
             ]
         }
     ],
-    "OmniboxRemoveExcessiveRecycledViewClearCalls": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "OmniboxRemoveExcessiveRecycledViewClearCalls"
-                    ]
-                }
-            ]
-        }
-    ],
     "OmniboxZeroSuggestPrefetchingWithInMemoryCaching": [
         {
             "platforms": [
@@ -11571,21 +11582,6 @@
             ]
         }
     ],
-    "UseGetrandomForRandBytes": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "UseGetrandomForRandBytes"
-                    ]
-                }
-            ]
-        }
-    ],
     "UseSnappyForParkableStrings": [
         {
             "platforms": [
@@ -12318,6 +12314,36 @@
             ]
         }
     ],
+    "WebApkManifestUniqueId": [
+        {
+            "platforms": [
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "WebApkUniqueId"
+                    ]
+                }
+            ]
+        }
+    ],
+    "WebApkSkipServiceWorkerForInstallPrompt": [
+        {
+            "platforms": [
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "SkipServiceWorkerForInstallPromot"
+                    ]
+                }
+            ]
+        }
+    ],
     "WebFeedsMVP": [
         {
             "platforms": [
diff --git a/third_party/blink/common/fetch/OWNERS b/third_party/blink/common/fetch/OWNERS
index fd7b644..d5fefd8 100644
--- a/third_party/blink/common/fetch/OWNERS
+++ b/third_party/blink/common/fetch/OWNERS
@@ -1,4 +1,2 @@
-file://third_party/blink/renderer/core/fetch/OWNERS
-
 per-file *_mojom_traits*.*=set noparent
 per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/public/common/fetch/OWNERS b/third_party/blink/public/common/fetch/OWNERS
index fd7b644..d5fefd8 100644
--- a/third_party/blink/public/common/fetch/OWNERS
+++ b/third_party/blink/public/common/fetch/OWNERS
@@ -1,4 +1,2 @@
-file://third_party/blink/renderer/core/fetch/OWNERS
-
 per-file *_mojom_traits*.*=set noparent
 per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/public/mojom/fetch/OWNERS b/third_party/blink/public/mojom/fetch/OWNERS
index f6aa2bd..08850f4 100644
--- a/third_party/blink/public/mojom/fetch/OWNERS
+++ b/third_party/blink/public/mojom/fetch/OWNERS
@@ -1,4 +1,2 @@
-file://third_party/blink/renderer/core/fetch/OWNERS
-
 per-file *.mojom=set noparent
 per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/public/mojom/prerender/OWNERS b/third_party/blink/public/mojom/prerender/OWNERS
index 7f561c4..8e53d5f 100644
--- a/third_party/blink/public/mojom/prerender/OWNERS
+++ b/third_party/blink/public/mojom/prerender/OWNERS
@@ -1,4 +1,4 @@
-file://chrome/browser/prefetch/no_state_prefetch/OWNERS
+file://chrome/browser/preloading/prefetch/no_state_prefetch/OWNERS
 file://content/browser/preloading/prerender/OWNERS
 
 per-file *.mojom=set noparent
diff --git a/third_party/blink/renderer/bindings/generated_in_modules.gni b/third_party/blink/renderer/bindings/generated_in_modules.gni
index 110e8f9..9a0c2cc 100644
--- a/third_party/blink/renderer/bindings/generated_in_modules.gni
+++ b/third_party/blink/renderer/bindings/generated_in_modules.gni
@@ -1021,6 +1021,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_input_sources_change_event_init.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_light_probe_init.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_light_probe_init.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_projection_layer_init.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_projection_layer_init.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_ray_direction_init.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_ray_direction_init.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_reference_space_event_init.cc",
@@ -1470,6 +1472,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_image_tracking_state.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_interaction_mode.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_interaction_mode.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_layer_layout.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_layer_layout.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_plane_orientation.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_plane_orientation.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_reference_space_type.cc",
@@ -1480,6 +1484,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_session_mode.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_target_ray_mode.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_target_ray_mode.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_texture_type.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_texture_type.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_visibility_state.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_visibility_state.h",
 ]
@@ -2529,6 +2535,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_bounded_reference_space.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_camera.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_camera.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_composition_layer.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_composition_layer.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_cpu_depth_information.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_cpu_depth_information.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_depth_information.cc",
@@ -2569,6 +2577,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_plane_set.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_pose.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_pose.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_projection_layer.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_projection_layer.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_ray.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_ray.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_reference_space.cc",
@@ -2585,6 +2595,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_session_event.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_space.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_space.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_sub_image.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_sub_image.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_system.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_system.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_transient_input_hit_test_result.cc",
@@ -2603,6 +2615,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_webgl_depth_information.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_webgl_layer.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_webgl_layer.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_webgl_sub_image.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_xr_webgl_sub_image.h",
 ]
 
 generated_namespace_sources_in_modules = [
diff --git a/third_party/blink/renderer/bindings/idl_in_modules.gni b/third_party/blink/renderer/bindings/idl_in_modules.gni
index d9fc15c..9f5ea94 100644
--- a/third_party/blink/renderer/bindings/idl_in_modules.gni
+++ b/third_party/blink/renderer/bindings/idl_in_modules.gni
@@ -1119,6 +1119,7 @@
           "//third_party/blink/renderer/modules/xr/xr_anchor_set.idl",
           "//third_party/blink/renderer/modules/xr/xr_bounded_reference_space.idl",
           "//third_party/blink/renderer/modules/xr/xr_camera.idl",
+          "//third_party/blink/renderer/modules/xr/xr_composition_layer.idl",
           "//third_party/blink/renderer/modules/xr/xr_cpu_depth_information.idl",
           "//third_party/blink/renderer/modules/xr/xr_depth_information.idl",
           "//third_party/blink/renderer/modules/xr/xr_depth_state_init.idl",
@@ -1146,6 +1147,7 @@
           "//third_party/blink/renderer/modules/xr/xr_plane.idl",
           "//third_party/blink/renderer/modules/xr/xr_plane_set.idl",
           "//third_party/blink/renderer/modules/xr/xr_pose.idl",
+          "//third_party/blink/renderer/modules/xr/xr_projection_layer.idl",
           "//third_party/blink/renderer/modules/xr/xr_ray.idl",
           "//third_party/blink/renderer/modules/xr/xr_ray_direction_init.idl",
           "//third_party/blink/renderer/modules/xr/xr_reference_space.idl",
@@ -1159,6 +1161,7 @@
           "//third_party/blink/renderer/modules/xr/xr_session_event_init.idl",
           "//third_party/blink/renderer/modules/xr/xr_session_init.idl",
           "//third_party/blink/renderer/modules/xr/xr_space.idl",
+          "//third_party/blink/renderer/modules/xr/xr_sub_image.idl",
           "//third_party/blink/renderer/modules/xr/xr_system.idl",
           "//third_party/blink/renderer/modules/xr/xr_tracked_image_init.idl",
           "//third_party/blink/renderer/modules/xr/xr_transient_input_hit_test_options_init.idl",
@@ -1172,6 +1175,7 @@
           "//third_party/blink/renderer/modules/xr/xr_webgl_depth_information.idl",
           "//third_party/blink/renderer/modules/xr/xr_webgl_layer.idl",
           "//third_party/blink/renderer/modules/xr/xr_webgl_layer_init.idl",
+          "//third_party/blink/renderer/modules/xr/xr_webgl_sub_image.idl",
         ],
         "abspath")
 
diff --git a/third_party/blink/renderer/build/scripts/core/css/css_properties.py b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
index e82d848..acea01e 100755
--- a/third_party/blink/renderer/build/scripts/core/css/css_properties.py
+++ b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
@@ -112,6 +112,30 @@
     return file_paths[index]
 
 
+class PropertyBase(object):
+    """Base class for the generated 'Property' class.
+
+    This class provides utility functions on top of 'Property', which is
+    generated by 'generate_property_class'. PropertyBase is not intended to
+    be instantiated directly, and expects all 'parameters' [1] to exist on
+    'self'.
+
+    [1] See 'parameters' dictionary in css_properties.json5.
+    """
+
+    def __init__(self):
+        super(PropertyBase, self).__init__()
+
+    @property
+    def is_internal(self):
+        return self.name.original.startswith('-internal-')
+
+    @property
+    def known_exposed(self):
+        """True if the property is unconditionally web-exposed."""
+        return not self.is_internal and not self.runtime_flag
+
+
 def generate_property_field(default):
     # Must use 'default_factory' rather than 'default' for list/dict.
     # https://docs.python.org/3/library/dataclasses.html#dataclasses.field
@@ -144,7 +168,8 @@
     fields += additional.items()
 
     return dataclasses.make_dataclass('Property', \
-        [(name, typing.Any, generate_property_field(default)) for name, default in fields])
+        [(name, typing.Any, generate_property_field(default)) for name, default in fields], \
+        bases=(PropertyBase,))
 
 
 class CSSProperties(object):
@@ -323,12 +348,14 @@
 
         The 'Property' class (of which 'property_' is an instance) contains an
         attribute for every "parameter" [1] specified in css_properties.json5.
-        However, these attributes are not always sufficient or ergonimic to use
-        in template files. For example, any property whose name starts with the
-        string "-internal-" are not web-exposed, and therefore needs special
-        treatment in a few places. Checking for this prefix repeatedly is
-        error-prone and unergonomic, so we set a 'is_internal' attribute in this
-        function.
+        However, these attributes are not always sufficient or ergonomic to use
+        in template files. For example, the 'field_template' parameter is
+        shortcut for specifying a bunch of other parameters, and that expansion
+        happens here.
+
+        For trivial derived attributes, such as an 'is_internal' attribute which
+        just checks if the name starts with "-internal-", prefer an @property
+        on PropertyBase instead.
 
         [1] See "parameters" dictionary in css_properties.json5.
         """
@@ -341,7 +368,6 @@
         name = property_.name
         property_.property_id = id_for_css_property(name)
         property_.enum_key = enum_key_for_css_property(name)
-        property_.is_internal = name.original.startswith('-internal-')
         property_.is_shorthand = \
                 property_.is_property and bool(property_.longhands)
         property_.is_longhand = \
@@ -451,11 +477,6 @@
         self.set_derived_visited_attributes(property_)
         self.set_derived_surrogate_attributes(property_)
 
-        # Known-exposed properties are those that are unconditionally
-        # exposed to authors.
-        property_.known_exposed = not property_.is_internal \
-            and not property_.runtime_flag \
-
     @property
     def default_parameters(self):
         return self._default_parameters
diff --git a/third_party/blink/renderer/build/scripts/core/css/properties/make_logical_group_properties.py b/third_party/blink/renderer/build/scripts/core/css/properties/make_logical_group_properties.py
new file mode 100755
index 0000000..2f57115
--- /dev/null
+++ b/third_party/blink/renderer/build/scripts/core/css/properties/make_logical_group_properties.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+# Copyright 2022 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from core.css import css_properties
+import json5_generator
+import template_expander
+
+
+class LogicalPropertiesWriter(json5_generator.Writer):
+    def __init__(self, json5_file_paths, output_dir):
+        super(LogicalPropertiesWriter, self).__init__([], output_dir)
+
+        self._input_files = json5_file_paths
+        properties = (css_properties.CSSProperties(json5_file_paths)
+                      ).properties_including_aliases
+
+        self._logical_group_properties = [
+            p.enum_key for p in properties if p.logical_property_group
+            and p.logical_property_group['is_logical']
+        ]
+
+        self._outputs = {
+            'logical_group_properties.cc': self.generate_list,
+        }
+
+    @template_expander.use_jinja(
+        'core/css/properties/templates/logical_group_properties.cc.tmpl')
+    def generate_list(self):
+        return {
+            'input_files': self._input_files,
+            'logical_group_properties': self._logical_group_properties,
+        }
+
+
+if __name__ == '__main__':
+    json5_generator.Maker(LogicalPropertiesWriter).main()
diff --git a/third_party/blink/renderer/build/scripts/core/css/properties/templates/logical_group_properties.cc.tmpl b/third_party/blink/renderer/build/scripts/core/css/properties/templates/logical_group_properties.cc.tmpl
new file mode 100644
index 0000000..5daa4a201
--- /dev/null
+++ b/third_party/blink/renderer/build/scripts/core/css/properties/templates/logical_group_properties.cc.tmpl
@@ -0,0 +1,21 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+{% from 'templates/macros.tmpl' import source_files_for_generated_file %}
+{{source_files_for_generated_file(template_file, input_files)}}
+
+#include "third_party/blink/renderer/core/css/logical_group_properties.h"
+
+#include "third_party/blink/renderer/core/css/properties/css_bitset.h"
+#include <array>
+
+namespace blink {
+
+const CSSBitset kLogicalGroupProperties{ {
+  {% for property in logical_group_properties %}
+    CSSPropertyID::{{ property }},
+  {% endfor %}
+} };
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
index 597d519..3e54b1b2 100644
--- a/third_party/blink/renderer/core/BUILD.gn
+++ b/third_party/blink/renderer/core/BUILD.gn
@@ -788,6 +788,13 @@
   outputs = [ "$blink_core_output_dir/known_exposed_properties.cc" ]
 }
 
+css_properties("make_core_generated_logical_group_properties") {
+  script =
+      "../build/scripts/core/css/properties/make_logical_group_properties.py"
+  other_inputs = [ "../build/scripts/core/css/properties/templates/logical_group_properties.cc.tmpl" ]
+  outputs = [ "$blink_core_output_dir/logical_group_properties.cc" ]
+}
+
 code_generator("make_core_generated_css_value_keywords") {
   script = "../build/scripts/core/css/make_css_value_keywords.py"
   json_inputs = [ "css/css_value_keywords.json5" ]
@@ -1174,6 +1181,7 @@
   ":make_core_generated_input_type_names",
   ":make_core_generated_keywords",
   ":make_core_generated_known_exposed_properties",
+  ":make_core_generated_logical_group_properties",
   ":make_core_generated_mathml_element_type_helpers",
   ":make_core_generated_mathml_names",
   ":make_core_generated_media_feature_names",
diff --git a/third_party/blink/renderer/core/animation/animation_utils_test.cc b/third_party/blink/renderer/core/animation/animation_utils_test.cc
index c5bd6568..7226ace 100644
--- a/third_party/blink/renderer/core/animation/animation_utils_test.cc
+++ b/third_party/blink/renderer/core/animation/animation_utils_test.cc
@@ -118,7 +118,6 @@
 }
 
 TEST_F(AnimationUtilsTest, ForEachInterpolatedPropertyValueWithContainerQuery) {
-  ScopedCSSContainerQueriesForTest enable_cq(true);
   ScopedLayoutNGForTest enable_ng(true);
 
   SetBodyInnerHTML(R"HTML(
diff --git a/third_party/blink/renderer/core/animation/keyframe_effect_model_test.cc b/third_party/blink/renderer/core/animation/keyframe_effect_model_test.cc
index 2b1ed2f6..75008fe 100644
--- a/third_party/blink/renderer/core/animation/keyframe_effect_model_test.cc
+++ b/third_party/blink/renderer/core/animation/keyframe_effect_model_test.cc
@@ -128,10 +128,9 @@
   return keyframes;
 }
 
-StringKeyframeVector KeyframesAtZeroAndOne(
-    AtomicString property_name,
-    const String& zero_value,
-    const String& one_value) {
+StringKeyframeVector KeyframesAtZeroAndOne(AtomicString property_name,
+                                           const String& zero_value,
+                                           const String& one_value) {
   StringKeyframeVector keyframes(2);
   keyframes[0] = MakeGarbageCollected<StringKeyframe>();
   keyframes[0]->SetOffset(0.0);
@@ -800,7 +799,6 @@
 }
 
 TEST_F(AnimationKeyframeEffectModel, CompositorSnapshotContainerRelative) {
-  ScopedCSSContainerQueriesForTest container_queries(true);
   ScopedLayoutNGForTest layout_ng(true);
 
   SetBodyInnerHTML(R"HTML(
diff --git a/third_party/blink/renderer/core/css/container_query_evaluator_test.cc b/third_party/blink/renderer/core/css/container_query_evaluator_test.cc
index 32f3287..5303866b 100644
--- a/third_party/blink/renderer/core/css/container_query_evaluator_test.cc
+++ b/third_party/blink/renderer/core/css/container_query_evaluator_test.cc
@@ -31,11 +31,9 @@
 namespace blink {
 
 class ContainerQueryEvaluatorTest : public PageTestBase,
-                                    private ScopedCSSContainerQueriesForTest,
                                     private ScopedLayoutNGForTest {
  public:
-  ContainerQueryEvaluatorTest()
-      : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {}
+  ContainerQueryEvaluatorTest() : ScopedLayoutNGForTest(true) {}
 
   void SetUp() override {
     PageTestBase::SetUp();
diff --git a/third_party/blink/renderer/core/css/container_query_test.cc b/third_party/blink/renderer/core/css/container_query_test.cc
index 32b72f9..bf71903 100644
--- a/third_party/blink/renderer/core/css/container_query_test.cc
+++ b/third_party/blink/renderer/core/css/container_query_test.cc
@@ -25,12 +25,9 @@
 
 namespace blink {
 
-class ContainerQueryTest : public PageTestBase,
-                           private ScopedCSSContainerQueriesForTest,
-                           private ScopedLayoutNGForTest {
+class ContainerQueryTest : public PageTestBase, private ScopedLayoutNGForTest {
  public:
-  ContainerQueryTest()
-      : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {}
+  ContainerQueryTest() : ScopedLayoutNGForTest(true) {}
 
   bool HasUnknown(StyleRuleContainer* rule) {
     return rule && rule->GetContainerQuery().Query().HasUnknown();
@@ -469,8 +466,6 @@
 TEST_F(ContainerQueryTest, ContainerUnitsViewportFallback) {
   using css_test_helpers::RegisterProperty;
 
-  ScopedCSSContainerRelativeUnitsForTest feature(true);
-
   RegisterProperty(GetDocument(), "--cqw", "<length>", "0px", false);
   RegisterProperty(GetDocument(), "--cqi", "<length>", "0px", false);
   RegisterProperty(GetDocument(), "--cqh", "<length>", "0px", false);
@@ -1109,28 +1104,6 @@
          "is fine too.";
 }
 
-TEST_F(ContainerQueryTest, NoContainerQueryEvaluatorWhenDisabled) {
-  ScopedCSSContainerQueriesForTest scope(false);
-
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      #container {
-        container-type: size;
-      }
-      @container (min-width: 200px) {
-        span { color: pink; }
-      }
-    </style>
-    <div id="container">
-      <span></span>
-    </div>
-  )HTML");
-
-  UpdateAllLifecyclePhasesForTest();
-  EXPECT_FALSE(
-      GetDocument().getElementById("container")->GetContainerQueryEvaluator());
-}
-
 TEST_F(ContainerQueryTest, QueryViewportDependency) {
   ScopedCSSViewportUnits4ForTest viewport_units(true);
 
diff --git a/third_party/blink/renderer/core/css/css_container_rule.idl b/third_party/blink/renderer/core/css/css_container_rule.idl
index 23b15816..3f932be9 100644
--- a/third_party/blink/renderer/core/css/css_container_rule.idl
+++ b/third_party/blink/renderer/core/css/css_container_rule.idl
@@ -3,8 +3,7 @@
 // found in the LICENSE file.
 
 [
-    Exposed=Window,
-    RuntimeEnabled=CSSContainerQueries
+    Exposed=Window
 ] interface CSSContainerRule : CSSConditionRule {
     // TODO(crbug.com/1145970): Spec and implement.
 };
diff --git a/third_party/blink/renderer/core/css/css_gradient_value_test.cc b/third_party/blink/renderer/core/css/css_gradient_value_test.cc
index a256f21..c8bf6461 100644
--- a/third_party/blink/renderer/core/css/css_gradient_value_test.cc
+++ b/third_party/blink/renderer/core/css/css_gradient_value_test.cc
@@ -106,8 +106,6 @@
 }
 
 TEST(CSSGradientValueTest, IsUsingContainerRelativeUnits) {
-  ScopedCSSContainerQueriesForTest scoped_feature(true);
-
   EXPECT_TRUE(
       IsUsingContainerRelativeUnits("linear-gradient(green 5cqw, blue 10cqh)"));
   EXPECT_TRUE(
diff --git a/third_party/blink/renderer/core/css/css_math_expression_node.cc b/third_party/blink/renderer/core/css/css_math_expression_node.cc
index 0970777..ea6330d 100644
--- a/third_party/blink/renderer/core/css/css_math_expression_node.cc
+++ b/third_party/blink/renderer/core/css/css_math_expression_node.cc
@@ -99,9 +99,7 @@
     case CSSPrimitiveValue::UnitType::kContainerBlockSize:
     case CSSPrimitiveValue::UnitType::kContainerMin:
     case CSSPrimitiveValue::UnitType::kContainerMax:
-      return RuntimeEnabledFeatures::CSSContainerRelativeUnitsEnabled()
-                 ? kCalcLength
-                 : kCalcOther;
+      return kCalcLength;
     case CSSPrimitiveValue::UnitType::kIcs:
       return RuntimeEnabledFeatures::CSSIcUnitEnabled() ? kCalcLength
                                                         : kCalcOther;
diff --git a/third_party/blink/renderer/core/css/css_math_expression_node_test.cc b/third_party/blink/renderer/core/css/css_math_expression_node_test.cc
index ad3ace6b..34ea204 100644
--- a/third_party/blink/renderer/core/css/css_math_expression_node_test.cc
+++ b/third_party/blink/renderer/core/css/css_math_expression_node_test.cc
@@ -208,7 +208,6 @@
 
 TEST(CSSCalculationValue, CSSLengthArrayUnits) {
   ScopedCSSViewportUnits4ForTest scoped_viewport_units(true);
-  ScopedCSSContainerRelativeUnitsForTest scoped_container_units(true);
 
   CSSLengthArray unused;
 
diff --git a/third_party/blink/renderer/core/css/css_primitive_value_test.cc b/third_party/blink/renderer/core/css/css_primitive_value_test.cc
index 61414d7..752be71 100644
--- a/third_party/blink/renderer/core/css/css_primitive_value_test.cc
+++ b/third_party/blink/renderer/core/css/css_primitive_value_test.cc
@@ -241,8 +241,6 @@
 }
 
 TEST_F(CSSPrimitiveValueTest, HasContainerRelativeUnits) {
-  ScopedCSSContainerQueriesForTest scoped_feature(true);
-
   EXPECT_TRUE(HasContainerRelativeUnits("1cqw"));
   EXPECT_TRUE(HasContainerRelativeUnits("1cqh"));
   EXPECT_TRUE(HasContainerRelativeUnits("1cqi"));
diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5
index 10c57ae1..2484c99 100644
--- a/third_party/blink/renderer/core/css/css_properties.json5
+++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -2409,7 +2409,6 @@
       converter: "ConvertContainerName",
       keywords: ["none"],
       typedom_types: ["Keyword"],
-      runtime_flag: "CSSContainerQueries",
     },
     {
       name: "container-type",
@@ -2422,7 +2421,6 @@
       type_name: "unsigned",
       converter: "ConvertFlags<EContainerType, CSSValueID::kNormal>",
       typedom_types: ["Keyword"],
-      runtime_flag: "CSSContainerQueries",
     },
     {
       name: "content",
@@ -6677,7 +6675,6 @@
         "container-name", "container-type"
       ],
       property_methods: ["ParseShorthand", "CSSValueFromComputedStyleInternal"],
-      runtime_flag: "CSSContainerQueries",
     },
     {
       name: "flex",
diff --git a/third_party/blink/renderer/core/css/css_property_value_set.cc b/third_party/blink/renderer/core/css/css_property_value_set.cc
index 49c7279..2d9f162 100644
--- a/third_party/blink/renderer/core/css/css_property_value_set.cc
+++ b/third_party/blink/renderer/core/css/css_property_value_set.cc
@@ -25,6 +25,7 @@
 
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/css/css_identifier_value.h"
+#include "third_party/blink/renderer/core/css/logical_group_properties.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser.h"
 #include "third_party/blink/renderer/core/css/parser/css_parser_context.h"
 #include "third_party/blink/renderer/core/css/properties/css_property.h"
@@ -83,11 +84,8 @@
   property_vector_.ReserveInitialCapacity(length);
   for (unsigned i = 0; i < length; ++i) {
     property_vector_.UncheckedAppend(properties[i]);
-    if (!may_have_logical_properties_) {
-      const CSSProperty& prop = CSSProperty::Get(properties[i].Id());
-      may_have_logical_properties_ =
-          prop.IsInLogicalPropertyGroup() && prop.IsSurrogate();
-    }
+    may_have_logical_properties_ |=
+        kLogicalGroupProperties.Has(properties[i].Id());
   }
 }
 
@@ -189,11 +187,8 @@
       PropertyReference property = other.PropertyAt(i);
       property_vector_.UncheckedAppend(
           CSSPropertyValue(property.PropertyMetadata(), property.Value()));
-      if (!may_have_logical_properties_) {
-        const CSSProperty& prop = CSSProperty::Get(property.Id());
-        may_have_logical_properties_ =
-            prop.IsInLogicalPropertyGroup() && prop.IsSurrogate();
-      }
+      may_have_logical_properties_ |=
+          kLogicalGroupProperties.Has(property.Id());
     }
   }
 }
@@ -422,9 +417,21 @@
 void MutableCSSPropertyValueSet::SetProperty(const CSSPropertyName& name,
                                              const CSSValue& value,
                                              bool important) {
-  StylePropertyShorthand shorthand = shorthandForProperty(name.Id());
-  if (!shorthand.length()) {
+  if (name.Id() == CSSPropertyID::kVariable) {
     SetLonghandProperty(CSSPropertyValue(name, value, important));
+  } else {
+    SetProperty(name.Id(), value, important);
+  }
+}
+
+void MutableCSSPropertyValueSet::SetProperty(CSSPropertyID property_id,
+                                             const CSSValue& value,
+                                             bool important) {
+  DCHECK_NE(property_id, CSSPropertyID::kVariable);
+  StylePropertyShorthand shorthand = shorthandForProperty(property_id);
+  if (!shorthand.length()) {
+    SetLonghandProperty(
+        CSSPropertyValue(CSSPropertyName(property_id), value, important));
     return;
   }
 
@@ -437,52 +444,69 @@
   }
 }
 
-void MutableCSSPropertyValueSet::SetProperty(CSSPropertyID property_id,
-                                             const CSSValue& value,
-                                             bool important) {
-  DCHECK_NE(property_id, CSSPropertyID::kVariable);
-  SetProperty(CSSPropertyName(property_id), value, important);
-}
-
-MutableCSSPropertyValueSet::SetResult
-MutableCSSPropertyValueSet::SetLonghandProperty(
-    const CSSPropertyValue& property,
-    CSSPropertyValue* slot) {
-  DCHECK_EQ(shorthandForProperty(property.Id()).length(), 0u);
+ALWAYS_INLINE CSSPropertyValue*
+MutableCSSPropertyValueSet::FindInsertionPointForID(CSSPropertyID property_id) {
   CSSPropertyValue* to_replace =
-      slot ? slot : FindCSSPropertyWithName(property.Name());
-  if (to_replace) {
-    if (may_have_logical_properties_) {
-      const CSSProperty& prop = CSSProperty::Get(property.Id());
-      if (prop.IsInLogicalPropertyGroup()) {
-        DCHECK(property_vector_.Contains(*to_replace));
-        int to_replace_index =
-            static_cast<int>(to_replace - property_vector_.begin());
-        for (int n = property_vector_.size() - 1; n > to_replace_index; --n) {
-          if (prop.IsInSameLogicalPropertyGroupWithDifferentMappingLogic(
-                  PropertyAt(n).Id())) {
-            RemovePropertyAtIndex(to_replace_index, nullptr);
-            to_replace = nullptr;
-            break;
-          }
+      const_cast<CSSPropertyValue*>(FindPropertyPointer(property_id));
+  if (to_replace == nullptr) {
+    return nullptr;
+  }
+  if (may_have_logical_properties_) {
+    const CSSProperty& prop = CSSProperty::Get(property_id);
+    if (prop.IsInLogicalPropertyGroup()) {
+      DCHECK(property_vector_.Contains(*to_replace));
+      int to_replace_index =
+          static_cast<int>(to_replace - property_vector_.begin());
+      for (int n = property_vector_.size() - 1; n > to_replace_index; --n) {
+        if (prop.IsInSameLogicalPropertyGroupWithDifferentMappingLogic(
+                PropertyAt(n).Id())) {
+          RemovePropertyAtIndex(to_replace_index, nullptr);
+          return nullptr;
         }
       }
     }
-    if (to_replace) {
-      if (*to_replace == property)
-        return kUnchanged;
-      *to_replace = property;
-      return kModifiedExisting;
-    }
-  } else if (!may_have_logical_properties_) {
-    const CSSProperty& prop = CSSProperty::Get(property.Id());
-    may_have_logical_properties_ =
-        prop.IsInLogicalPropertyGroup() && prop.IsSurrogate();
   }
-  property_vector_.push_back(property);
+  return to_replace;
+}
+
+MutableCSSPropertyValueSet::SetResult
+MutableCSSPropertyValueSet::SetLonghandProperty(CSSPropertyValue property) {
+  const CSSPropertyID id = property.Id();
+  DCHECK_EQ(shorthandForProperty(id).length(), 0u)
+      << CSSProperty::Get(id).GetPropertyNameString() << " is a shorthand";
+  CSSPropertyValue* to_replace;
+  if (id == CSSPropertyID::kVariable) {
+    to_replace = const_cast<CSSPropertyValue*>(
+        FindPropertyPointer(property.Name().ToAtomicString()));
+  } else {
+    to_replace = FindInsertionPointForID(id);
+  }
+  if (to_replace) {
+    if (*to_replace == property)
+      return kUnchanged;
+    *to_replace = std::move(property);
+    return kModifiedExisting;
+  } else {
+    may_have_logical_properties_ |= kLogicalGroupProperties.Has(id);
+  }
+  property_vector_.push_back(std::move(property));
   return kChangedPropertySet;
 }
 
+void MutableCSSPropertyValueSet::SetLonghandProperty(CSSPropertyID property_id,
+                                                     const CSSValue& value) {
+  DCHECK_EQ(shorthandForProperty(property_id).length(), 0u)
+      << CSSProperty::Get(property_id).GetPropertyNameString()
+      << " is a shorthand";
+  CSSPropertyValue* to_replace = FindInsertionPointForID(property_id);
+  if (to_replace) {
+    *to_replace = CSSPropertyValue(CSSPropertyName(property_id), value);
+  } else {
+    may_have_logical_properties_ |= kLogicalGroupProperties.Has(property_id);
+    property_vector_.emplace_back(CSSPropertyName(property_id), value);
+  }
+}
+
 MutableCSSPropertyValueSet::SetResult
 MutableCSSPropertyValueSet::SetLonghandProperty(CSSPropertyID property_id,
                                                 CSSValueID identifier,
@@ -538,14 +562,8 @@
   unsigned size = other->PropertyCount();
   for (unsigned n = 0; n < size; ++n) {
     PropertyReference to_merge = other->PropertyAt(n);
-    CSSPropertyValue* old = FindCSSPropertyWithName(to_merge.Name());
-    if (old) {
-      SetLonghandProperty(
-          CSSPropertyValue(to_merge.PropertyMetadata(), to_merge.Value()), old);
-    } else {
-      property_vector_.push_back(
-          CSSPropertyValue(to_merge.PropertyMetadata(), to_merge.Value()));
-    }
+    SetLonghandProperty(
+        CSSPropertyValue(to_merge.PropertyMetadata(), to_merge.Value()));
   }
 }
 
@@ -599,12 +617,9 @@
 
 CSSPropertyValue* MutableCSSPropertyValueSet::FindCSSPropertyWithName(
     const CSSPropertyName& name) {
-  int found_property_index = name.IsCustomProperty()
-                                 ? FindPropertyIndex(name.ToAtomicString())
-                                 : FindPropertyIndex(name.Id());
-  if (found_property_index == -1)
-    return nullptr;
-  return &property_vector_.at(found_property_index);
+  return const_cast<CSSPropertyValue*>(
+      name.IsCustomProperty() ? FindPropertyPointer(name.ToAtomicString())
+                              : FindPropertyPointer(name.Id()));
 }
 
 bool CSSPropertyValueSet::PropertyMatches(
@@ -680,6 +695,18 @@
 template <typename T>
 int MutableCSSPropertyValueSet::FindPropertyIndex(const T& property) const {
   const CSSPropertyValue* begin = property_vector_.data();
+  const CSSPropertyValue* it = FindPropertyPointer(property);
+  return (it == nullptr) ? -1 : static_cast<int>(it - begin);
+}
+template CORE_EXPORT int MutableCSSPropertyValueSet::FindPropertyIndex(
+    const CSSPropertyID&) const;
+template CORE_EXPORT int MutableCSSPropertyValueSet::FindPropertyIndex(
+    const AtomicString&) const;
+
+template <typename T>
+const CSSPropertyValue* MutableCSSPropertyValueSet::FindPropertyPointer(
+    const T& property) const {
+  const CSSPropertyValue* begin = property_vector_.data();
   const CSSPropertyValue* end = begin + property_vector_.size();
 
   uint16_t id = GetConvertedCSSPropertyID(property);
@@ -688,13 +715,8 @@
       begin, end, [property, id](const CSSPropertyValue& css_property) -> bool {
         return IsPropertyMatch(css_property.Metadata(), id, property);
       });
-
-  return (it == end) ? -1 : static_cast<int>(it - begin);
+  return (it == end) ? nullptr : it;
 }
-template CORE_EXPORT int MutableCSSPropertyValueSet::FindPropertyIndex(
-    const CSSPropertyID&) const;
-template CORE_EXPORT int MutableCSSPropertyValueSet::FindPropertyIndex(
-    const AtomicString&) const;
 
 void MutableCSSPropertyValueSet::TraceAfterDispatch(
     blink::Visitor* visitor) const {
diff --git a/third_party/blink/renderer/core/css/css_property_value_set.h b/third_party/blink/renderer/core/css/css_property_value_set.h
index b1758f5..08709b0 100644
--- a/third_party/blink/renderer/core/css/css_property_value_set.h
+++ b/third_party/blink/renderer/core/css/css_property_value_set.h
@@ -278,13 +278,13 @@
   bool AddRespectingCascade(const CSSPropertyValue&);
 
   // Expands shorthand properties into multiple properties.
+  void SetProperty(CSSPropertyID, const CSSValue&, bool important = false);
+
+  // Convenience wrapper around the above that also supports custom properties.
   void SetProperty(const CSSPropertyName&,
                    const CSSValue&,
                    bool important = false);
 
-  // Convenience wrapper around the above.
-  void SetProperty(CSSPropertyID, const CSSValue&, bool important = false);
-
   // Also a convenience wrapper around SetProperty(), parsing the value from a
   // string before setting it. If the value is empty, the property is removed.
   // Only for non-custom properties.
@@ -306,12 +306,17 @@
                                       StyleSheetContents* context_style_sheet,
                                       bool is_animation_tainted);
 
-  // This one does not expand longhands, but is the most efficient form.
+  // This one does not expand longhands, but is the second-most efficient form
+  // save for the CSSPropertyID variant below.
   // All the other property setters eventually call down into this.
-  SetResult SetLonghandProperty(const CSSPropertyValue&,
-                                CSSPropertyValue* slot = nullptr);
+  SetResult SetLonghandProperty(CSSPropertyValue);
 
-  // Convenience form of the above.
+  // A streamlined version of the above, which can be used if you don't need
+  // custom properties and don't need the return value (which requires an extra
+  // comparison with the old property). This is the fastest form.
+  void SetLonghandProperty(CSSPropertyID, const CSSValue&);
+
+  // Convenience form of the CSSPropertyValue overload above.
   SetResult SetLonghandProperty(CSSPropertyID,
                                 CSSValueID identifier,
                                 bool important = false);
@@ -338,6 +343,17 @@
   void TraceAfterDispatch(blink::Visitor*) const;
 
  private:
+  template <typename T>  // CSSPropertyID or AtomicString
+  const CSSPropertyValue* FindPropertyPointer(const T& property) const;
+
+  // Returns nullptr if there is no property to be overwritten.
+  //
+  // If property_id is a logical property we've already seen a different
+  // property matching, this will remove the existing property (and return
+  // nullptr).
+  ALWAYS_INLINE CSSPropertyValue* FindInsertionPointForID(
+      CSSPropertyID property_id);
+
   bool RemovePropertyAtIndex(int, String* return_text);
 
   bool RemoveShorthandProperty(CSSPropertyID);
diff --git a/third_party/blink/renderer/core/css/css_selector_watch_test.cc b/third_party/blink/renderer/core/css/css_selector_watch_test.cc
index cb42a47..9a24d8bc 100644
--- a/third_party/blink/renderer/core/css/css_selector_watch_test.cc
+++ b/third_party/blink/renderer/core/css/css_selector_watch_test.cc
@@ -84,11 +84,9 @@
 }
 
 class CSSSelectorWatchCQTest : public CSSSelectorWatchTest,
-                               private ScopedCSSContainerQueriesForTest,
                                private ScopedLayoutNGForTest {
  protected:
-  CSSSelectorWatchCQTest()
-      : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {}
+  CSSSelectorWatchCQTest() : ScopedLayoutNGForTest(true) {}
 };
 
 TEST_F(CSSSelectorWatchCQTest, ContainerQueryDisplayNone) {
diff --git a/third_party/blink/renderer/core/css/cssom/css_unit_values.idl b/third_party/blink/renderer/core/css/cssom/css_unit_values.idl
index 43a9c20..4696edd 100644
--- a/third_party/blink/renderer/core/css/cssom/css_unit_values.idl
+++ b/third_party/blink/renderer/core/css/cssom/css_unit_values.idl
@@ -43,12 +43,12 @@
   [NewObject, RuntimeEnabled=CSSViewportUnits4] CSSUnitValue dvmin(double value);
   [NewObject, RuntimeEnabled=CSSViewportUnits4] CSSUnitValue dvmax(double value);
 
-  [NewObject, RuntimeEnabled=CSSContainerRelativeUnits] CSSUnitValue cqw(double value);
-  [NewObject, RuntimeEnabled=CSSContainerRelativeUnits] CSSUnitValue cqh(double value);
-  [NewObject, RuntimeEnabled=CSSContainerRelativeUnits] CSSUnitValue cqi(double value);
-  [NewObject, RuntimeEnabled=CSSContainerRelativeUnits] CSSUnitValue cqb(double value);
-  [NewObject, RuntimeEnabled=CSSContainerRelativeUnits] CSSUnitValue cqmin(double value);
-  [NewObject, RuntimeEnabled=CSSContainerRelativeUnits] CSSUnitValue cqmax(double value);
+  [NewObject] CSSUnitValue cqw(double value);
+  [NewObject] CSSUnitValue cqh(double value);
+  [NewObject] CSSUnitValue cqi(double value);
+  [NewObject] CSSUnitValue cqb(double value);
+  [NewObject] CSSUnitValue cqmin(double value);
+  [NewObject] CSSUnitValue cqmax(double value);
 
   [NewObject] CSSUnitValue cm(double value);
   [NewObject] CSSUnitValue mm(double value);
diff --git a/third_party/blink/renderer/core/css/logical_group_properties.h b/third_party/blink/renderer/core/css/logical_group_properties.h
new file mode 100644
index 0000000..fb983c7
--- /dev/null
+++ b/third_party/blink/renderer/core/css/logical_group_properties.h
@@ -0,0 +1,21 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_LOGICAL_GROUP_PROPERTIES_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_LOGICAL_GROUP_PROPERTIES_H_
+
+#include <bitset>
+#include "third_party/blink/renderer/core/css/properties/css_bitset.h"
+
+namespace blink {
+
+// Properties whose presence signals that we may have to go through
+// the logic of logical properties replacing other properties, if present.
+// Equivalent to checking prop.IsInLogicalPropertyGroup() && prop.IsSurrogate(),
+// but faster.
+extern const CSSBitset kLogicalGroupProperties;
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_LOGICAL_GROUP_PROPERTIES_H_
diff --git a/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc b/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc
index a32b0f0..8f0ef5a 100644
--- a/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc
+++ b/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc
@@ -42,11 +42,8 @@
   }
   if (EqualIgnoringASCIICase(name, "property"))
     return CSSAtRuleID::kCSSAtRuleProperty;
-  if (EqualIgnoringASCIICase(name, "container")) {
-    if (RuntimeEnabledFeatures::CSSContainerQueriesEnabled())
-      return CSSAtRuleID::kCSSAtRuleContainer;
-    return CSSAtRuleID::kCSSAtRuleInvalid;
-  }
+  if (EqualIgnoringASCIICase(name, "container"))
+    return CSSAtRuleID::kCSSAtRuleContainer;
   if (EqualIgnoringASCIICase(name, "counter-style"))
     return CSSAtRuleID::kCSSAtRuleCounterStyle;
   if (EqualIgnoringASCIICase(name, "scroll-timeline")) {
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl_test.cc b/third_party/blink/renderer/core/css/parser/css_parser_impl_test.cc
index 50c5581..b6ca190 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_impl_test.cc
+++ b/third_party/blink/renderer/core/css/parser/css_parser_impl_test.cc
@@ -181,8 +181,6 @@
 }
 
 TEST(CSSParserImplTest, AtContainerOffsets) {
-  ScopedCSSContainerQueriesForTest scoped_feature(true);
-
   String sheet_text = "@container (max-width: 100px) { }";
 
   auto* context = MakeGarbageCollected<CSSParserContext>(
@@ -200,23 +198,6 @@
   EXPECT_EQ(test_css_parser_observer.rule_body_end_, 32u);
 }
 
-TEST(CSSParserImplTest, AtContainerDisabled) {
-  ScopedNullExecutionContext execution_context;
-  String rule = "@container (max-width: 100px) { }";
-  {
-    ScopedCSSContainerQueriesForTest scoped_feature(true);
-    Document* document =
-        Document::CreateForTest(execution_context.GetExecutionContext());
-    EXPECT_TRUE(css_test_helpers::ParseRule(*document, rule));
-  }
-  {
-    ScopedCSSContainerQueriesForTest scoped_feature(false);
-    Document* document =
-        Document::CreateForTest(execution_context.GetExecutionContext());
-    EXPECT_FALSE(css_test_helpers::ParseRule(*document, rule));
-  }
-}
-
 TEST(CSSParserImplTest, DirectNesting) {
   ScopedCSSNestingForTest enabled(true);
   String sheet_text =
diff --git a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
index ce793ee..dd4e3cb 100644
--- a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
+++ b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
@@ -951,8 +951,6 @@
       case CSSPrimitiveValue::UnitType::kContainerBlockSize:
       case CSSPrimitiveValue::UnitType::kContainerMin:
       case CSSPrimitiveValue::UnitType::kContainerMax:
-        if (!RuntimeEnabledFeatures::CSSContainerRelativeUnitsEnabled())
-          return nullptr;
         break;
       case CSSPrimitiveValue::UnitType::kIcs:
         if (!RuntimeEnabledFeatures::CSSIcUnitEnabled())
diff --git a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
index 1f0c50b..1a0408b 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
+++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
@@ -1886,8 +1886,8 @@
   while (true) {
     id = range.Peek().Id();
     if ((id == CSSValueID::kSize ||
-         (RuntimeEnabledFeatures::CSSContainSize1DEnabled() &&
-          (id == CSSValueID::kInlineSize))) &&
+
+         id == CSSValueID::kInlineSize) &&
         !size) {
       size = css_parsing_utils::ConsumeIdent(range);
     } else if (id == CSSValueID::kLayout && !layout) {
diff --git a/third_party/blink/renderer/core/css/resolver/element_style_resources.cc b/third_party/blink/renderer/core/css/resolver/element_style_resources.cc
index 977a2ce..18738f4 100644
--- a/third_party/blink/renderer/core/css/resolver/element_style_resources.cc
+++ b/third_party/blink/renderer/core/css/resolver/element_style_resources.cc
@@ -160,7 +160,6 @@
 
 const PreCachedContainerSizes::ContainerSizes& PreCachedContainerSizes::Get()
     const {
-  DCHECK(RuntimeEnabledFeatures::CSSContainerRelativeUnitsEnabled());
   if (!cache_) {
     if (conversion_data_) {
       cache_ = conversion_data_->PreCachedContainerSizesCopy();
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
index 3f6b40f0..56d8c9ea 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
@@ -74,11 +74,9 @@
 };
 
 class StyleResolverTestCQ : public StyleResolverTest,
-                            public ScopedCSSContainerQueriesForTest,
                             public ScopedLayoutNGForTest {
  protected:
-  StyleResolverTestCQ()
-      : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {}
+  StyleResolverTestCQ() : ScopedLayoutNGForTest(true) {}
 };
 
 TEST_F(StyleResolverTest, StyleForTextInDisplayNone) {
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc
index 7f649e2..d9d2587 100644
--- a/third_party/blink/renderer/core/css/style_engine.cc
+++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -2759,9 +2759,6 @@
     Element& container) {
   DCHECK(InRebuildLayoutTree());
 
-  if (!RuntimeEnabledFeatures::CSSContainerQueriesEnabled())
-    return;
-
   // This method is called from AttachLayoutTree() when we are forced to use
   // legacy layout for a query container. At the time of RecalcStyle, it is not
   // necessarily known that some sibling tree may enforce us to have legacy
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc
index 3d4d654..95bfcd55 100644
--- a/third_party/blink/renderer/core/css/style_engine_test.cc
+++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -161,11 +161,9 @@
 };
 
 class StyleEngineContainerQueryTest : public StyleEngineTest,
-                                      private ScopedCSSContainerQueriesForTest,
                                       private ScopedLayoutNGForTest {
  public:
-  StyleEngineContainerQueryTest()
-      : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {}
+  StyleEngineContainerQueryTest() : ScopedLayoutNGForTest(true) {}
 };
 
 StyleEngineTest::RuleSetInvalidation
@@ -4212,38 +4210,6 @@
   EXPECT_FALSE(GetDocument().NeedsLayoutTreeUpdateForNode(*a));
 }
 
-TEST_F(StyleEngineTest, ContainerRelativeUnitsRuntimeFlag) {
-  String css = R"CSS(
-    top: 1cqw;
-    left: 1cqh;
-    bottom: 1cqi;
-    right: 1cqb;
-    padding-top: 1cqmin;
-    padding-right: 1cqmax;
-    padding-bottom: calc(1cqw);
-    margin-left: 1px;
-  )CSS";
-
-  {
-    ScopedCSSContainerQueriesForTest cq_feature(false);
-    ScopedCSSContainerRelativeUnitsForTest feature(false);
-    const CSSPropertyValueSet* set =
-        css_test_helpers::ParseDeclarationBlock(css);
-    ASSERT_TRUE(set);
-    EXPECT_EQ(1u, set->PropertyCount());
-    EXPECT_TRUE(set->HasProperty(CSSPropertyID::kMarginLeft));
-  }
-
-  {
-    ScopedCSSContainerQueriesForTest cq_feature(false);
-    ScopedCSSContainerRelativeUnitsForTest feature(true);
-    const CSSPropertyValueSet* set =
-        css_test_helpers::ParseDeclarationBlock(css);
-    ASSERT_TRUE(set);
-    EXPECT_EQ(8u, set->PropertyCount());
-  }
-}
-
 TEST_F(StyleEngineTest, CSSViewportUnits4RuntimeFlag) {
   Vector<String> units = {"vi",  "vb",    "svi",   "svb",   "svw",
                           "svh", "svmin", "svmax", "lvi",   "lvb",
@@ -4273,31 +4239,6 @@
   }
 }
 
-TEST_F(StyleEngineTest, ContainerPropertiesRuntimeFlag) {
-  Vector<String> declarations = {"container-type:inline-size",
-                                 "container-name:foo", "container:inline-size"};
-
-  {
-    ScopedCSSContainerQueriesForTest feature(false);
-
-    for (const String& decl : declarations) {
-      const auto* set = css_test_helpers::ParseDeclarationBlock(decl);
-      ASSERT_TRUE(set);
-      EXPECT_EQ(0u, set->PropertyCount());
-    }
-  }
-
-  {
-    ScopedCSSContainerQueriesForTest feature(true);
-
-    for (const String& decl : declarations) {
-      const auto* set = css_test_helpers::ParseDeclarationBlock(decl);
-      ASSERT_TRUE(set);
-      EXPECT_GT(set->PropertyCount(), 0u);
-    }
-  }
-}
-
 TEST_F(StyleEngineTest, VideoControlsReject) {
   GetDocument().body()->setInnerHTML(R"HTML(
     <video controls></video>
diff --git a/third_party/blink/renderer/core/css/style_recalc_change_test.cc b/third_party/blink/renderer/core/css/style_recalc_change_test.cc
index 5b3ac16..746ceb0 100644
--- a/third_party/blink/renderer/core/css/style_recalc_change_test.cc
+++ b/third_party/blink/renderer/core/css/style_recalc_change_test.cc
@@ -17,16 +17,10 @@
 
 class StyleRecalcChangeTest : public PageTestBase {};
 
-class StyleRecalcChangeTestCQ
-    : public StyleRecalcChangeTest,
-      private ScopedCSSContainerQueriesForTest,
-      private ScopedCSSContainerSkipStyleRecalcForTest,
-      private ScopedLayoutNGForTest {
+class StyleRecalcChangeTestCQ : public StyleRecalcChangeTest,
+                                private ScopedLayoutNGForTest {
  public:
-  StyleRecalcChangeTestCQ()
-      : ScopedCSSContainerQueriesForTest(true),
-        ScopedCSSContainerSkipStyleRecalcForTest(true),
-        ScopedLayoutNGForTest(true) {}
+  StyleRecalcChangeTestCQ() : ScopedLayoutNGForTest(true) {}
 };
 
 TEST_F(StyleRecalcChangeTest, SuppressRecalc) {
diff --git a/third_party/blink/renderer/core/css/style_recalc_context.cc b/third_party/blink/renderer/core/css/style_recalc_context.cc
index 419f801..89b3319b 100644
--- a/third_party/blink/renderer/core/css/style_recalc_context.cc
+++ b/third_party/blink/renderer/core/css/style_recalc_context.cc
@@ -26,16 +26,10 @@
 
 StyleRecalcContext StyleRecalcContext::FromInclusiveAncestors(
     Element& element) {
-  if (!RuntimeEnabledFeatures::CSSContainerQueriesEnabled())
-    return StyleRecalcContext();
-
   return StyleRecalcContext{ClosestInclusiveAncestorContainer(element)};
 }
 
 StyleRecalcContext StyleRecalcContext::FromAncestors(Element& element) {
-  if (!RuntimeEnabledFeatures::CSSContainerQueriesEnabled())
-    return StyleRecalcContext();
-
   // TODO(crbug.com/1145970): Avoid this work if we're not inside a container
   if (Element* shadow_including_parent = element.ParentOrShadowHostElement())
     return FromInclusiveAncestors(*shadow_including_parent);
@@ -49,8 +43,6 @@
   if (!container || container->GetTreeScope() != slot.GetTreeScope())
     return *this;
 
-  DCHECK(RuntimeEnabledFeatures::CSSContainerQueriesEnabled());
-
   // No assigned nodes means we will render the light tree children of the
   // slot as a fallback. Those children are in the same tree scope as the slot
   // which means the current container is the correct one.
@@ -67,9 +59,6 @@
 
 StyleRecalcContext StyleRecalcContext::ForSlottedRules(
     HTMLSlotElement& slot) const {
-  if (!RuntimeEnabledFeatures::CSSContainerQueriesEnabled())
-    return *this;
-
   // The current container is the shadow-including inclusive ancestors of the
   // host. When matching ::slotted rules, the closest container may be found in
   // the shadow-including inclusive ancestry of the slot. If we reach the host,
@@ -82,7 +71,7 @@
 }
 
 StyleRecalcContext StyleRecalcContext::ForPartRules(Element& host) const {
-  if (!container || !RuntimeEnabledFeatures::CSSContainerQueriesEnabled())
+  if (!container)
     return *this;
 
   // The closest container for matching ::part rules is the originating host.
diff --git a/third_party/blink/renderer/core/css/style_recalc_context_test.cc b/third_party/blink/renderer/core/css/style_recalc_context_test.cc
index 2d7ad8b..d284a61 100644
--- a/third_party/blink/renderer/core/css/style_recalc_context_test.cc
+++ b/third_party/blink/renderer/core/css/style_recalc_context_test.cc
@@ -15,11 +15,9 @@
 namespace blink {
 
 class StyleRecalcContextTest : public PageTestBase,
-                               private ScopedCSSContainerQueriesForTest,
                                private ScopedLayoutNGForTest {
  public:
-  StyleRecalcContextTest()
-      : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {}
+  StyleRecalcContextTest() : ScopedLayoutNGForTest(true) {}
 };
 
 TEST_F(StyleRecalcContextTest, FromAncestors) {
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_utilities_test.cc b/third_party/blink/renderer/core/display_lock/display_lock_utilities_test.cc
index 8d32b18..72f435c 100644
--- a/third_party/blink/renderer/core/display_lock/display_lock_utilities_test.cc
+++ b/third_party/blink/renderer/core/display_lock/display_lock_utilities_test.cc
@@ -327,8 +327,6 @@
 }
 
 TEST_F(DisplayLockUtilitiesTest, ContainerQueryCrash) {
-  ScopedCSSContainerQueriesForTest cq_enabled(true);
-
   SetHtmlInnerHTML(R"HTML(
     <style>
       #container {
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index 58a37fc..442d81d 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -7671,6 +7671,17 @@
 
   DCHECK(!top_layer_elements_.Contains(element));
   DCHECK(!before || top_layer_elements_.Contains(before));
+
+  // The view transition root pseudo-element should always be the last element
+  // in the top layer so it paints on top of all other top layer elements.
+  auto* transition_pseudo =
+      documentElement()->GetPseudoElement(kPseudoIdViewTransition);
+  if (transition_pseudo && element != transition_pseudo) {
+    DCHECK(transition_pseudo->IsInTopLayer());
+    DCHECK(top_layer_elements_.back() == *transition_pseudo);
+    top_layer_elements_.pop_back();
+  }
+
   if (before) {
     DCHECK(element->IsBackdropPseudoElement())
         << "If this invariant changes, we might need to revisit Container "
@@ -7680,6 +7691,10 @@
   } else {
     top_layer_elements_.push_back(element);
   }
+
+  if (transition_pseudo && element != transition_pseudo)
+    top_layer_elements_.push_back(transition_pseudo);
+
   element->SetIsInTopLayer(true);
   display_lock_document_state_->ElementAddedToTopLayer(element);
 
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 75c7bb27..c82bdae 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -3028,8 +3028,6 @@
 bool Element::SkipStyleRecalcForContainer(
     const ComputedStyle& style,
     const StyleRecalcChange& child_change) {
-  DCHECK(RuntimeEnabledFeatures::CSSContainerSkipStyleRecalcEnabled());
-
   if (!GetDocument().GetStyleEngine().SkipStyleRecalcAllowed())
     return false;
 
@@ -3193,33 +3191,29 @@
 
   StyleRecalcContext child_recalc_context = style_recalc_context;
 
-  if (RuntimeEnabledFeatures::CSSContainerQueriesEnabled()) {
-    if (const ComputedStyle* style = GetComputedStyle()) {
-      if (style->CanMatchSizeContainerQueries(*this)) {
-        if (RuntimeEnabledFeatures::CSSContainerSkipStyleRecalcEnabled()) {
-          if (change.IsSuppressed()) {
-            // IsSuppressed() means we are at the root of a container subtree
-            // called from UpdateStyleAndLayoutTreeForContainer(). If we skipped
-            // the subtree during style recalc, retrieve the StyleRecalcChange
-            // which was the current change for the skipped subtree and combine
-            // it with any current container flags.
-            auto* cq_data = GetContainerQueryData();
-            // Should be guaranteed to have ContainerQueryData here since we at
-            // least have a ContainerQueryEvaluator at this point.
-            DCHECK(cq_data);
-            if (cq_data->SkippedStyleRecalc()) {
-              child_change =
-                  cq_data->ClearAndReturnRecalcChangeForChildren().Combine(
-                      child_change);
-            }
-          } else if (SkipStyleRecalcForContainer(*style, child_change)) {
-            return sibling_change;
-          }
+  if (const ComputedStyle* style = GetComputedStyle()) {
+    if (style->CanMatchSizeContainerQueries(*this)) {
+      if (change.IsSuppressed()) {
+        // IsSuppressed() means we are at the root of a container subtree
+        // called from UpdateStyleAndLayoutTreeForContainer(). If we skipped
+        // the subtree during style recalc, retrieve the StyleRecalcChange
+        // which was the current change for the skipped subtree and combine
+        // it with any current container flags.
+        auto* cq_data = GetContainerQueryData();
+        // Should be guaranteed to have ContainerQueryData here since we at
+        // least have a ContainerQueryEvaluator at this point.
+        DCHECK(cq_data);
+        if (cq_data->SkippedStyleRecalc()) {
+          child_change =
+              cq_data->ClearAndReturnRecalcChangeForChildren().Combine(
+                  child_change);
         }
+      } else if (SkipStyleRecalcForContainer(*style, child_change)) {
+        return sibling_change;
       }
-      if (style->IsContainerForSizeContainerQueries())
-        child_recalc_context.container = this;
     }
+    if (style->IsContainerForSizeContainerQueries())
+      child_recalc_context.container = this;
   }
 
   if (child_change.TraversePseudoElements(*this)) {
@@ -3619,32 +3613,30 @@
       if (UpdateForceLegacyLayout(*new_style, old_style.get()))
         child_change = child_change.ForceReattachLayoutTree();
     }
-    if (RuntimeEnabledFeatures::CSSContainerQueriesEnabled()) {
-      auto* evaluator =
-          ComputeContainerQueryEvaluator(*this, old_style.get(), *new_style);
-      if (evaluator != GetContainerQueryEvaluator()) {
-        EnsureElementRareData()
-            .EnsureContainerQueryData()
-            .SetContainerQueryEvaluator(evaluator);
-      } else if (evaluator) {
-        DCHECK(old_style);
-        evaluator->MarkFontDirtyIfNeeded(*old_style, *new_style);
-        if (RuntimeEnabledFeatures::CSSStyleQueriesEnabled()) {
-          if (diff != ComputedStyle::Difference::kEqual &&
-              (!base::ValuesEquivalent(old_style->InheritedVariables(),
-                                       new_style->InheritedVariables()) ||
-               !base::ValuesEquivalent(old_style->NonInheritedVariables(),
-                                       new_style->NonInheritedVariables()))) {
-            switch (evaluator->StyleContainerChanged()) {
-              case ContainerQueryEvaluator::Change::kNone:
-                break;
-              case ContainerQueryEvaluator::Change::kNearestContainer:
-                child_change = change.ForceRecalcStyleContainerChildren();
-                break;
-              case ContainerQueryEvaluator::Change::kDescendantContainers:
-                child_change = change.ForceRecalcStyleContainerDescendants();
-                break;
-            }
+    auto* evaluator =
+        ComputeContainerQueryEvaluator(*this, old_style.get(), *new_style);
+    if (evaluator != GetContainerQueryEvaluator()) {
+      EnsureElementRareData()
+          .EnsureContainerQueryData()
+          .SetContainerQueryEvaluator(evaluator);
+    } else if (evaluator) {
+      DCHECK(old_style);
+      evaluator->MarkFontDirtyIfNeeded(*old_style, *new_style);
+      if (RuntimeEnabledFeatures::CSSStyleQueriesEnabled()) {
+        if (diff != ComputedStyle::Difference::kEqual &&
+            (!base::ValuesEquivalent(old_style->InheritedVariables(),
+                                     new_style->InheritedVariables()) ||
+             !base::ValuesEquivalent(old_style->NonInheritedVariables(),
+                                     new_style->NonInheritedVariables()))) {
+          switch (evaluator->StyleContainerChanged()) {
+            case ContainerQueryEvaluator::Change::kNone:
+              break;
+            case ContainerQueryEvaluator::Change::kNearestContainer:
+              child_change = change.ForceRecalcStyleContainerChildren();
+              break;
+            case ContainerQueryEvaluator::Change::kDescendantContainers:
+              child_change = change.ForceRecalcStyleContainerDescendants();
+              break;
           }
         }
       }
@@ -5727,8 +5719,6 @@
 }
 
 bool Element::SkippedContainerStyleRecalc() const {
-  if (!RuntimeEnabledFeatures::CSSContainerSkipStyleRecalcEnabled())
-    return false;
   if (const auto* cq_data = GetContainerQueryData())
     return cq_data->SkippedStyleRecalc();
   return false;
@@ -6077,8 +6067,7 @@
   style_request.pseudo_argument = pseudo_argument;
 
   StyleRecalcContext child_recalc_context = style_recalc_context;
-  if (RuntimeEnabledFeatures::CSSContainerQueriesEnabled() &&
-      element_style->IsContainerForSizeContainerQueries()) {
+  if (element_style->IsContainerForSizeContainerQueries()) {
     child_recalc_context.container = this;
   }
 
@@ -7508,7 +7497,8 @@
     CSSPropertyID property_id,
     CSSValueID identifier) {
   DCHECK(IsStyledElement());
-  style->SetProperty(property_id, *CSSIdentifierValue::Create(identifier));
+  style->SetLonghandProperty(property_id,
+                             *CSSIdentifierValue::Create(identifier));
 }
 
 void Element::AddPropertyToPresentationAttributeStyle(
@@ -7517,7 +7507,8 @@
     double value,
     CSSPrimitiveValue::UnitType unit) {
   DCHECK(IsStyledElement());
-  style->SetProperty(property_id, *CSSNumericLiteralValue::Create(value, unit));
+  style->SetLonghandProperty(property_id,
+                             *CSSNumericLiteralValue::Create(value, unit));
 }
 
 void Element::AddPropertyToPresentationAttributeStyle(
@@ -7537,7 +7528,7 @@
     CSSPropertyID property_id,
     const CSSValue& value) {
   DCHECK(IsStyledElement());
-  style->SetProperty(property_id, value);
+  style->SetLonghandProperty(property_id, value);
 }
 
 void Element::MapLanguageAttributeToLocale(const AtomicString& value,
diff --git a/third_party/blink/renderer/core/dom/element_rare_data.h b/third_party/blink/renderer/core/dom/element_rare_data.h
index 162106f..02aaac7 100644
--- a/third_party/blink/renderer/core/dom/element_rare_data.h
+++ b/third_party/blink/renderer/core/dom/element_rare_data.h
@@ -222,7 +222,6 @@
   }
 
   ContainerQueryData& EnsureContainerQueryData() override {
-    DCHECK(RuntimeEnabledFeatures::CSSContainerQueriesEnabled());
     if (!container_query_data_)
       container_query_data_ = MakeGarbageCollected<ContainerQueryData>();
     return *container_query_data_;
diff --git a/third_party/blink/renderer/core/html/html_element.cc b/third_party/blink/renderer/core/html/html_element.cc
index e508d73..c8e3543 100644
--- a/third_party/blink/renderer/core/html/html_element.cc
+++ b/third_party/blink/renderer/core/html/html_element.cc
@@ -274,11 +274,19 @@
 void HTMLElement::ApplyBorderAttributeToStyle(
     const AtomicString& value,
     MutableCSSPropertyValueSet* style) {
-  AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kBorderWidth,
-                                          ParseBorderWidthAttribute(value),
-                                          CSSPrimitiveValue::UnitType::kPixels);
-  AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kBorderStyle,
-                                          CSSValueID::kSolid);
+  unsigned width = ParseBorderWidthAttribute(value);
+  for (CSSPropertyID property_id :
+       {CSSPropertyID::kBorderTopWidth, CSSPropertyID::kBorderBottomWidth,
+        CSSPropertyID::kBorderLeftWidth, CSSPropertyID::kBorderRightWidth}) {
+    AddPropertyToPresentationAttributeStyle(
+        style, property_id, width, CSSPrimitiveValue::UnitType::kPixels);
+  }
+  for (CSSPropertyID property_id :
+       {CSSPropertyID::kBorderTopStyle, CSSPropertyID::kBorderBottomStyle,
+        CSSPropertyID::kBorderLeftStyle, CSSPropertyID::kBorderRightStyle}) {
+    AddPropertyToPresentationAttributeStyle(style, property_id,
+                                            CSSValueID::kSolid);
+  }
 }
 
 bool HTMLElement::IsPresentationAttribute(const QualifiedName& name) const {
diff --git a/third_party/blink/renderer/core/html/html_hr_element.cc b/third_party/blink/renderer/core/html/html_hr_element.cc
index fcb36835..745d5c5 100644
--- a/third_party/blink/renderer/core/html/html_hr_element.cc
+++ b/third_party/blink/renderer/core/html/html_hr_element.cc
@@ -77,14 +77,23 @@
       AddHTMLLengthToStyle(style, CSSPropertyID::kWidth, value);
     }
   } else if (name == html_names::kColorAttr) {
-    AddPropertyToPresentationAttributeStyle(style, CSSPropertyID::kBorderStyle,
-                                            CSSValueID::kSolid);
+    for (CSSPropertyID property_id :
+         {CSSPropertyID::kBorderTopStyle, CSSPropertyID::kBorderBottomStyle,
+          CSSPropertyID::kBorderLeftStyle, CSSPropertyID::kBorderRightStyle}) {
+      AddPropertyToPresentationAttributeStyle(style, property_id,
+                                              CSSValueID::kSolid);
+    }
     AddHTMLColorToStyle(style, CSSPropertyID::kBorderColor, value);
     AddHTMLColorToStyle(style, CSSPropertyID::kBackgroundColor, value);
   } else if (name == html_names::kNoshadeAttr) {
     if (!FastHasAttribute(html_names::kColorAttr)) {
-      AddPropertyToPresentationAttributeStyle(
-          style, CSSPropertyID::kBorderStyle, CSSValueID::kSolid);
+      for (CSSPropertyID property_id :
+           {CSSPropertyID::kBorderTopStyle, CSSPropertyID::kBorderBottomStyle,
+            CSSPropertyID::kBorderLeftStyle,
+            CSSPropertyID::kBorderRightStyle}) {
+        AddPropertyToPresentationAttributeStyle(style, property_id,
+                                                CSSValueID::kSolid);
+      }
 
       const cssvalue::CSSColor& dark_gray_value =
           *cssvalue::CSSColor::Create(Color::kDarkGray);
diff --git a/third_party/blink/renderer/core/html/html_iframe_element.cc b/third_party/blink/renderer/core/html/html_iframe_element.cc
index 89b287bf..ff57a345 100644
--- a/third_party/blink/renderer/core/html/html_iframe_element.cc
+++ b/third_party/blink/renderer/core/html/html_iframe_element.cc
@@ -154,9 +154,13 @@
     // off if set to zero.
     if (!value.ToInt()) {
       // Add a rule that nulls out our border width.
-      AddPropertyToPresentationAttributeStyle(
-          style, CSSPropertyID::kBorderWidth, 0,
-          CSSPrimitiveValue::UnitType::kPixels);
+      for (CSSPropertyID property_id :
+           {CSSPropertyID::kBorderTopWidth, CSSPropertyID::kBorderBottomWidth,
+            CSSPropertyID::kBorderLeftWidth,
+            CSSPropertyID::kBorderRightWidth}) {
+        AddPropertyToPresentationAttributeStyle(
+            style, property_id, 0, CSSPrimitiveValue::UnitType::kPixels);
+      }
     }
   } else {
     HTMLFrameElementBase::CollectStyleForPresentationAttribute(name, value,
diff --git a/third_party/blink/renderer/core/html/html_table_element.cc b/third_party/blink/renderer/core/html/html_table_element.cc
index 1149374e..7d812f2 100644
--- a/third_party/blink/renderer/core/html/html_table_element.cc
+++ b/third_party/blink/renderer/core/html/html_table_element.cc
@@ -315,8 +315,18 @@
   } else if (name == html_names::kHeightAttr) {
     AddHTMLLengthToStyle(style, CSSPropertyID::kHeight, value);
   } else if (name == html_names::kBorderAttr) {
+    unsigned width = ParseBorderWidthAttribute(value);
     AddPropertyToPresentationAttributeStyle(
-        style, CSSPropertyID::kBorderWidth, ParseBorderWidthAttribute(value),
+        style, CSSPropertyID::kBorderTopWidth, width,
+        CSSPrimitiveValue::UnitType::kPixels);
+    AddPropertyToPresentationAttributeStyle(
+        style, CSSPropertyID::kBorderBottomWidth, width,
+        CSSPrimitiveValue::UnitType::kPixels);
+    AddPropertyToPresentationAttributeStyle(
+        style, CSSPropertyID::kBorderLeftWidth, width,
+        CSSPrimitiveValue::UnitType::kPixels);
+    AddPropertyToPresentationAttributeStyle(
+        style, CSSPropertyID::kBorderRightWidth, width,
         CSSPrimitiveValue::UnitType::kPixels);
   } else if (name == html_names::kBordercolorAttr) {
     if (!value.empty())
@@ -341,8 +351,12 @@
     }
   } else if (name == html_names::kCellspacingAttr) {
     if (!value.empty()) {
-      AddHTMLLengthToStyle(style, CSSPropertyID::kBorderSpacing, value,
-                           kDontAllowPercentageValues);
+      for (CSSPropertyID property_id :
+           {CSSPropertyID::kWebkitBorderHorizontalSpacing,
+            CSSPropertyID::kWebkitBorderVerticalSpacing}) {
+        AddHTMLLengthToStyle(style, property_id, value,
+                             kDontAllowPercentageValues);
+      }
     }
   } else if (name == html_names::kAlignAttr) {
     if (!value.empty()) {
@@ -370,8 +384,13 @@
     bool border_left;
     if (GetBordersFromFrameAttributeValue(value, border_top, border_right,
                                           border_bottom, border_left)) {
-      AddPropertyToPresentationAttributeStyle(
-          style, CSSPropertyID::kBorderWidth, CSSValueID::kThin);
+      for (CSSPropertyID property_id :
+           {CSSPropertyID::kBorderTopWidth, CSSPropertyID::kBorderBottomWidth,
+            CSSPropertyID::kBorderLeftWidth,
+            CSSPropertyID::kBorderRightWidth}) {
+        AddPropertyToPresentationAttributeStyle(style, property_id,
+                                                CSSValueID::kThin);
+      }
       AddPropertyToPresentationAttributeStyle(
           style, CSSPropertyID::kBorderTopStyle,
           border_top ? CSSValueID::kSolid : CSSValueID::kHidden);
diff --git a/third_party/blink/renderer/core/inspector/inspector_css_agent.cc b/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
index f5a91fd..d2b49485 100644
--- a/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
@@ -2230,8 +2230,7 @@
   result->setScopes(std::move(scopes_list));
   std::reverse(layers_list.get()->begin(), layers_list.get()->end());
   result->setLayers(std::move(layers_list));
-  if (RuntimeEnabledFeatures::CSSContainerQueriesEnabled())
-    result->setContainerQueries(std::move(container_queries_list));
+  result->setContainerQueries(std::move(container_queries_list));
 }
 
 std::unique_ptr<protocol::CSS::CSSScope> InspectorCSSAgent::BuildScopeObject(
diff --git a/third_party/blink/renderer/core/inspector/inspector_highlight_test.cc b/third_party/blink/renderer/core/inspector/inspector_highlight_test.cc
index 8bd4c972..e3df0e6 100644
--- a/third_party/blink/renderer/core/inspector/inspector_highlight_test.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_highlight_test.cc
@@ -36,11 +36,9 @@
 }  // namespace
 
 class InspectorHighlightTest : public testing::Test,
-                               private ScopedCSSContainerQueriesForTest,
                                private ScopedLayoutNGForTest {
  public:
-  InspectorHighlightTest()
-      : ScopedCSSContainerQueriesForTest(true), ScopedLayoutNGForTest(true) {}
+  InspectorHighlightTest() : ScopedLayoutNGForTest(true) {}
 
  protected:
   void SetUp() override;
diff --git a/third_party/blink/renderer/core/layout/layout_embedded_content.cc b/third_party/blink/renderer/core/layout/layout_embedded_content.cc
index 88dba6e..1a44e6cc 100644
--- a/third_party/blink/renderer/core/layout/layout_embedded_content.cc
+++ b/third_party/blink/renderer/core/layout/layout_embedded_content.cc
@@ -152,6 +152,23 @@
   return kForcedPaintLayer;
 }
 
+bool LayoutEmbeddedContent::PointOverResizer(
+    const HitTestResult& result,
+    const HitTestLocation& location,
+    const PhysicalOffset& accumulated_offset) const {
+  NOT_DESTROYED();
+  if (const auto* scrollable_area = GetScrollableArea()) {
+    const HitTestRequest::HitTestRequestType hit_type =
+        result.GetHitTestRequest().GetType();
+    const blink::ResizerHitTestType resizer_type =
+        hit_type & HitTestRequest::kTouchEvent ? kResizerForTouch
+                                               : kResizerForPointer;
+    return scrollable_area->IsAbsolutePointInResizeControl(
+        ToRoundedPoint(location.Point() - accumulated_offset), resizer_type);
+  }
+  return false;
+}
+
 bool LayoutEmbeddedContent::NodeAtPointOverEmbeddedContentView(
     HitTestResult& result,
     const HitTestLocation& hit_test_location,
@@ -167,14 +184,8 @@
   if ((inside || hit_test_location.IsRectBasedTest()) && !had_result &&
       result.InnerNode() == GetNode()) {
     bool is_over_content_view =
-        PhysicalContentBoxRect().Contains(result.LocalPoint());
-    if (is_over_content_view) {
-      if (const auto* scrollable_area = GetScrollableArea()) {
-        if (scrollable_area->IsLocalPointInResizeControl(
-                ToRoundedPoint(result.LocalPoint()), kResizerForPointer))
-          is_over_content_view = false;
-      }
-    }
+        PhysicalContentBoxRect().Contains(result.LocalPoint()) &&
+        !result.IsOverResizer();
     result.SetIsOverEmbeddedContentView(is_over_content_view);
   }
   return inside;
@@ -187,8 +198,11 @@
     HitTestPhase phase) {
   NOT_DESTROYED();
   auto* local_frame_view = DynamicTo<LocalFrameView>(ChildFrameView());
-  bool skip_contents = (result.GetHitTestRequest().GetStopNode() == this ||
-                        !result.GetHitTestRequest().AllowsChildFrameContent());
+  bool skip_contents =
+      (result.GetHitTestRequest().GetStopNode() == this ||
+       !result.GetHitTestRequest().AllowsChildFrameContent() ||
+       PointOverResizer(result, hit_test_location, accumulated_offset));
+
   if (!local_frame_view || skip_contents) {
     return NodeAtPointOverEmbeddedContentView(result, hit_test_location,
                                               accumulated_offset, phase);
diff --git a/third_party/blink/renderer/core/layout/layout_embedded_content.h b/third_party/blink/renderer/core/layout/layout_embedded_content.h
index 5cc0c99..fda6003 100644
--- a/third_party/blink/renderer/core/layout/layout_embedded_content.h
+++ b/third_party/blink/renderer/core/layout/layout_embedded_content.h
@@ -112,6 +112,10 @@
       const HitTestLocation&,
       const PhysicalOffset& accumulated_offset,
       HitTestPhase);
+
+  bool PointOverResizer(const HitTestResult&,
+                        const HitTestLocation&,
+                        const PhysicalOffset& accumulated_offset) const;
 };
 
 template <>
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
index c7d21bf..229ee00 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
@@ -483,7 +483,7 @@
         CalculateInitialFragmentGeometry(constraint_space, *this, break_token);
   }
 
-  if (RuntimeEnabledFeatures::CSSContainerQueriesEnabled() &&
+  if (
       // Only consider the size of the first container fragment.
       !IsBreakInside(break_token) && CanMatchSizeContainerQueries()) {
     if (auto* element = DynamicTo<Element>(GetDOMNode())) {
diff --git a/third_party/blink/renderer/core/layout/subtree_layout_scope.cc b/third_party/blink/renderer/core/layout/subtree_layout_scope.cc
index 39d2695..3c04bd6 100644
--- a/third_party/blink/renderer/core/layout/subtree_layout_scope.cc
+++ b/third_party/blink/renderer/core/layout/subtree_layout_scope.cc
@@ -52,7 +52,6 @@
     // NOT_DESTROYED() triggers a DCHECK failure in AssertLaidOut() or
     // AssertFragmentTree().
     if (layout_object->is_destroyed_) {
-      DCHECK(RuntimeEnabledFeatures::CSSContainerQueriesEnabled());
       continue;
     }
     // There are situations where the object to layout was never laid out, such
diff --git a/third_party/blink/renderer/core/paint/box_painter_base.cc b/third_party/blink/renderer/core/paint/box_painter_base.cc
index 8504b72..b5372f7 100644
--- a/third_party/blink/renderer/core/paint/box_painter_base.cc
+++ b/third_party/blink/renderer/core/paint/box_painter_base.cc
@@ -473,10 +473,12 @@
   const bool has_rounded_border =
       style.HasBorderRadius() && !sides_to_include.IsEmpty();
   // BorderFillBox radius clipping is taken care of by
-  // BackgroundBleedClip{Only,Layer}
+  // BackgroundBleedClip{Only,Layer}.
   is_rounded_fill =
       has_rounded_border && !is_painting_background_in_contents_space &&
-      !(is_border_fill && BleedAvoidanceIsClipping(bleed_avoidance));
+      (is_clipped_with_local_scrolling ||
+       !(is_border_fill && BleedAvoidanceIsClipping(bleed_avoidance)));
+
   is_printing = doc.Printing();
 
   should_paint_image = image && image->CanRender();
@@ -955,7 +957,8 @@
   }
 
   if (info.is_border_fill &&
-      bleed_avoidance == kBackgroundBleedShrinkBackground) {
+      bleed_avoidance == kBackgroundBleedShrinkBackground &&
+      !info.is_clipped_with_local_scrolling) {
     border = BackgroundRoundedRectAdjustedForBleedAvoidance(
         style, rect, object_has_multiple_boxes, info.sides_to_include, border);
   }
@@ -966,7 +969,10 @@
   if (bg_layer.Clip() == EFillBox::kContent) {
     border = RoundedBorderGeometry::PixelSnappedRoundedBorderWithOutsets(
         style, border_rect, border_padding_insets, info.sides_to_include);
-  } else if (bg_layer.Clip() == EFillBox::kPadding) {
+    // Background of 'background-attachment: local' without visible/clip
+    // overflow also needs to use inner border which is equivalent to kPadding.
+  } else if (bg_layer.Clip() == EFillBox::kPadding ||
+             info.is_clipped_with_local_scrolling) {
     border = RoundedBorderGeometry::PixelSnappedRoundedInnerBorder(
         style, border_rect, info.sides_to_include);
   }
diff --git a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
index 967295e..4404384 100644
--- a/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
+++ b/third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.cc
@@ -447,7 +447,8 @@
     unsigned current_frame_index) {
   base::WeakPtr<ImageRecord> record = GetPendingImage(record_id);
   DCHECK(record);
-  if (!record->media_timing->GetFirstVideoFrameTime().is_null()) {
+  if (record->media_timing &&
+      !record->media_timing->GetFirstVideoFrameTime().is_null()) {
     // If this is a video record, then we can get the first frame time from the
     // MediaTiming object, and can use that to set the first frame time in the
     // ImageRecord object.
diff --git a/third_party/blink/renderer/core/svg/svg_element_test.cc b/third_party/blink/renderer/core/svg/svg_element_test.cc
index 142d0e19..75241ea 100644
--- a/third_party/blink/renderer/core/svg/svg_element_test.cc
+++ b/third_party/blink/renderer/core/svg/svg_element_test.cc
@@ -16,8 +16,6 @@
 class SVGElementTest : public PageTestBase {};
 
 TEST_F(SVGElementTest, BaseComputedStyleForSMILWithContainerQueries) {
-  ScopedCSSContainerQueriesForTest scoped_cq(true);
-  ScopedCSSContainerSkipStyleRecalcForTest scoped_skip(true);
   ScopedLayoutNGForTest scoped_ng(true);
 
   GetDocument().body()->setInnerHTML(R"HTML(
@@ -71,8 +69,6 @@
 }
 
 TEST_F(SVGElementTest, ContainerUnitContext) {
-  ScopedCSSContainerQueriesForTest scoped_cq(true);
-  ScopedCSSContainerSkipStyleRecalcForTest scoped_skip(true);
   ScopedLayoutNGForTest scoped_ng(true);
 
   SetBodyInnerHTML(R"HTML(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc b/third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc
index 2d6ef37..3c7751e 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_candidate.cc
@@ -149,6 +149,7 @@
   result.AddString("sdpMid", platform_candidate_->SdpMid());
   if (platform_candidate_->SdpMLineIndex())
     result.AddNumber("sdpMLineIndex", *platform_candidate_->SdpMLineIndex());
+  result.AddString("usernameFragment", platform_candidate_->UsernameFragment());
   return result.GetScriptValue();
 }
 
diff --git a/third_party/blink/renderer/modules/xr/BUILD.gn b/third_party/blink/renderer/modules/xr/BUILD.gn
index f6994faa..45558e4 100644
--- a/third_party/blink/renderer/modules/xr/BUILD.gn
+++ b/third_party/blink/renderer/modules/xr/BUILD.gn
@@ -19,6 +19,8 @@
     "xr_camera.h",
     "xr_canvas_input_provider.cc",
     "xr_canvas_input_provider.h",
+    "xr_composition_layer.cc",
+    "xr_composition_layer.h",
     "xr_cpu_depth_information.cc",
     "xr_cpu_depth_information.h",
     "xr_cube_map.cc",
@@ -76,6 +78,8 @@
     "xr_plane_set.h",
     "xr_pose.cc",
     "xr_pose.h",
+    "xr_projection_layer.cc",
+    "xr_projection_layer.h",
     "xr_ray.cc",
     "xr_ray.h",
     "xr_reference_space.cc",
@@ -95,6 +99,7 @@
     "xr_setlike.h",
     "xr_space.cc",
     "xr_space.h",
+    "xr_sub_image.h",
     "xr_system.cc",
     "xr_system.h",
     "xr_target_ray_space.cc",
@@ -116,6 +121,7 @@
     "xr_webgl_depth_information.h",
     "xr_webgl_layer.cc",
     "xr_webgl_layer.h",
+    "xr_webgl_sub_image.h",
   ]
 
   deps = [
diff --git a/third_party/blink/renderer/modules/xr/xr_composition_layer.cc b/third_party/blink/renderer/modules/xr/xr_composition_layer.cc
new file mode 100644
index 0000000..c5019e6
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_composition_layer.cc
@@ -0,0 +1,65 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/xr/xr_composition_layer.h"
+#include "third_party/blink/renderer/modules/xr/xr_session.h"
+
+namespace blink {
+
+XRCompositionLayer::XRCompositionLayer(XRSession* session) : XRLayer(session) {}
+
+const String& XRCompositionLayer::layout() const {
+  return layout_;
+}
+
+bool XRCompositionLayer::blendTextureSourceAlpha() const {
+  return blend_texture_source_alpha_;
+}
+
+void XRCompositionLayer::setBlendTextureSourceAlpha(bool value) {
+  blend_texture_source_alpha_ = value;
+}
+
+absl::optional<bool> XRCompositionLayer::chromaticAberrationCorrection() const {
+  return chromatic_aberration_correction_;
+}
+
+void XRCompositionLayer::setChromaticAberrationCorrection(
+    absl::optional<bool> value) {
+  chromatic_aberration_correction_ = value;
+}
+
+bool XRCompositionLayer::forceMonoPresentation() const {
+  return force_mono_presentation_;
+}
+
+void XRCompositionLayer::setForceMonoPresentation(bool value) {
+  force_mono_presentation_ = value;
+}
+
+float XRCompositionLayer::opacity() const {
+  return opacity_;
+}
+
+void XRCompositionLayer::setOpacity(float value) {
+  opacity_ = value;
+}
+
+uint16_t XRCompositionLayer::mipLevels() const {
+  return mip_levels_;
+}
+
+bool XRCompositionLayer::needsRedraw() const {
+  return needs_redraw_;
+}
+
+void XRCompositionLayer::destroy() const {
+  NOTIMPLEMENTED();
+}
+
+void XRCompositionLayer::Trace(Visitor* visitor) const {
+  XRLayer::Trace(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/xr/xr_composition_layer.h b/third_party/blink/renderer/modules/xr/xr_composition_layer.h
new file mode 100644
index 0000000..42e86e3
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_composition_layer.h
@@ -0,0 +1,50 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_COMPOSITION_LAYER_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_COMPOSITION_LAYER_H_
+
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/modules/xr/xr_layer.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+
+namespace blink {
+
+class XRSession;
+
+class XRCompositionLayer : public XRLayer {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  explicit XRCompositionLayer(XRSession* session);
+  ~XRCompositionLayer() override = default;
+
+  const String& layout() const;
+  bool blendTextureSourceAlpha() const;
+  void setBlendTextureSourceAlpha(bool value);
+  absl::optional<bool> chromaticAberrationCorrection() const;
+  void setChromaticAberrationCorrection(absl::optional<bool> value);
+  bool forceMonoPresentation() const;
+  void setForceMonoPresentation(bool value);
+  float opacity() const;
+  void setOpacity(float value);
+  uint16_t mipLevels() const;
+  bool needsRedraw() const;
+  void destroy() const;
+
+  void Trace(Visitor*) const override;
+
+ private:
+  const String layout_{"default"};
+  bool blend_texture_source_alpha_{false};
+  absl::optional<bool> chromatic_aberration_correction_{absl::nullopt};
+  bool force_mono_presentation_{false};
+  float opacity_{1.0};
+  uint16_t mip_levels_{1};
+  bool needs_redraw_{false};
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_COMPOSITION_LAYER_H_
diff --git a/third_party/blink/renderer/modules/xr/xr_composition_layer.idl b/third_party/blink/renderer/modules/xr/xr_composition_layer.idl
new file mode 100644
index 0000000..5532ee8
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_composition_layer.idl
@@ -0,0 +1,31 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.w3.org/TR/webxrlayers-1/#xrlayerlayouttype
+enum XRLayerLayout {
+  "default",
+  "mono",
+  "stereo",
+  "stereo-left-right",
+  "stereo-top-bottom"
+};
+
+// https://www.w3.org/TR/webxrlayers-1/#xrcompositionlayertype
+[
+  SecureContext,
+  Exposed=Window,
+  RuntimeEnabled=WebXRLayers
+] interface XRCompositionLayer : XRLayer {
+  readonly attribute XRLayerLayout layout;
+
+  attribute boolean blendTextureSourceAlpha;
+  attribute boolean? chromaticAberrationCorrection;
+  attribute boolean forceMonoPresentation;
+  attribute float opacity;
+  readonly attribute unsigned long mipLevels;
+
+  readonly attribute boolean needsRedraw;
+
+  undefined destroy();
+};
diff --git a/third_party/blink/renderer/modules/xr/xr_projection_layer.cc b/third_party/blink/renderer/modules/xr/xr_projection_layer.cc
new file mode 100644
index 0000000..7ac5c44
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_projection_layer.cc
@@ -0,0 +1,53 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/modules/xr/xr_projection_layer.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_xr_projection_layer_init.h"
+#include "third_party/blink/renderer/modules/xr/xr_rigid_transform.h"
+#include "third_party/blink/renderer/modules/xr/xr_session.h"
+
+namespace blink {
+
+XRProjectionLayer::XRProjectionLayer(XRSession* session,
+                                     const XRProjectionLayerInit* init)
+    : XRCompositionLayer(session) {}
+
+uint16_t XRProjectionLayer::textureWidth() const {
+  return texture_width_;
+}
+
+uint16_t XRProjectionLayer::textureHeight() const {
+  return texture_height_;
+}
+
+uint16_t XRProjectionLayer::textureArrayLength() const {
+  return texture_array_length_;
+}
+
+bool XRProjectionLayer::ignoreDepthValues() const {
+  return ignore_depth_values_;
+}
+
+absl::optional<float> XRProjectionLayer::fixedFoveation() const {
+  return fixed_foveation_;
+}
+
+void XRProjectionLayer::setFixedFoveation(absl::optional<float> value) {
+  fixed_foveation_ = value;
+}
+
+XRRigidTransform* XRProjectionLayer::deltaPose() const {
+  return delta_pose_.Get();
+}
+
+void XRProjectionLayer::setDeltaPose(XRRigidTransform* value) {
+  delta_pose_ = value;
+}
+
+void XRProjectionLayer::Trace(Visitor* visitor) const {
+  visitor->Trace(delta_pose_);
+  XRCompositionLayer::Trace(visitor);
+}
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/xr/xr_projection_layer.h b/third_party/blink/renderer/modules/xr/xr_projection_layer.h
new file mode 100644
index 0000000..dd2b07aaf
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_projection_layer.h
@@ -0,0 +1,47 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_PROJECTION_LAYER_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_PROJECTION_LAYER_H_
+
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/modules/xr/xr_composition_layer.h"
+
+namespace blink {
+
+class XRSession;
+class XRProjectionLayerInit;
+class XRRigidTransform;
+
+class XRProjectionLayer final : public XRCompositionLayer {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  XRProjectionLayer(XRSession* session, const XRProjectionLayerInit* init);
+  ~XRProjectionLayer() override = default;
+
+  uint16_t textureWidth() const;
+  uint16_t textureHeight() const;
+  uint16_t textureArrayLength() const;
+
+  bool ignoreDepthValues() const;
+  absl::optional<float> fixedFoveation() const;
+  void setFixedFoveation(absl::optional<float> value);
+  XRRigidTransform* deltaPose() const;
+  void setDeltaPose(XRRigidTransform* value);
+
+  void Trace(Visitor*) const override;
+
+ private:
+  uint16_t texture_width_{0L};
+  uint16_t texture_height_{0L};
+  uint16_t texture_array_length_{1L};
+  bool ignore_depth_values_{true};
+  absl::optional<float> fixed_foveation_{absl::nullopt};
+  Member<XRRigidTransform> delta_pose_{nullptr};
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_PROJECTION_LAYER_H_
diff --git a/third_party/blink/renderer/modules/xr/xr_projection_layer.idl b/third_party/blink/renderer/modules/xr/xr_projection_layer.idl
new file mode 100644
index 0000000..22cb605
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_projection_layer.idl
@@ -0,0 +1,18 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.w3.org/TR/webxrlayers-1/#xrprojectionlayertype
+[
+  SecureContext,
+  Exposed=Window,
+  RuntimeEnabled=WebXRLayers
+] interface XRProjectionLayer : XRCompositionLayer {
+  readonly attribute unsigned long textureWidth;
+  readonly attribute unsigned long textureHeight;
+  readonly attribute unsigned long textureArrayLength;
+
+  readonly attribute boolean ignoreDepthValues;
+  attribute float? fixedFoveation;
+  attribute XRRigidTransform? deltaPose;
+};
diff --git a/third_party/blink/renderer/modules/xr/xr_render_state.cc b/third_party/blink/renderer/modules/xr/xr_render_state.cc
index efb789b..40172d3 100644
--- a/third_party/blink/renderer/modules/xr/xr_render_state.cc
+++ b/third_party/blink/renderer/modules/xr/xr_render_state.cc
@@ -10,6 +10,7 @@
 #include <cmath>
 
 #include "third_party/blink/renderer/bindings/modules/v8/v8_xr_render_state_init.h"
+#include "third_party/blink/renderer/modules/xr/xr_layer.h"
 #include "third_party/blink/renderer/modules/xr/xr_webgl_layer.h"
 
 namespace blink {
@@ -37,6 +38,11 @@
   }
   if (init->hasBaseLayer()) {
     base_layer_ = init->baseLayer();
+    layers_.clear();
+  }
+  if (init->hasLayers()) {
+    base_layer_ = nullptr;
+    layers_ = *init->layers();
   }
   if (init->hasInlineVerticalFieldOfView()) {
     double fov = init->inlineVerticalFieldOfView();
@@ -63,6 +69,7 @@
 
 void XRRenderState::Trace(Visitor* visitor) const {
   visitor->Trace(base_layer_);
+  visitor->Trace(layers_);
   ScriptWrappable::Trace(visitor);
 }
 
diff --git a/third_party/blink/renderer/modules/xr/xr_render_state.h b/third_party/blink/renderer/modules/xr/xr_render_state.h
index ea080cf..9542eba 100644
--- a/third_party/blink/renderer/modules/xr/xr_render_state.h
+++ b/third_party/blink/renderer/modules/xr/xr_render_state.h
@@ -7,6 +7,7 @@
 
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
 
@@ -14,6 +15,7 @@
 
 class HTMLCanvasElement;
 class XRWebGLLayer;
+class XRLayer;
 class XRRenderStateInit;
 
 class XRRenderState : public ScriptWrappable {
@@ -29,6 +31,7 @@
   double depthFar() const { return depth_far_; }
   absl::optional<double> inlineVerticalFieldOfView() const;
   XRWebGLLayer* baseLayer() const { return base_layer_; }
+  const HeapVector<Member<XRLayer>>& layers() const { return layers_; }
 
   HTMLCanvasElement* output_canvas() const;
 
@@ -45,6 +48,7 @@
   double depth_near_ = 0.1;
   double depth_far_ = 1000.0;
   Member<XRWebGLLayer> base_layer_;
+  HeapVector<Member<XRLayer>> layers_;
   absl::optional<double> inline_vertical_fov_;
 };
 
diff --git a/third_party/blink/renderer/modules/xr/xr_render_state.idl b/third_party/blink/renderer/modules/xr/xr_render_state.idl
index bde5b28..c016cb9 100644
--- a/third_party/blink/renderer/modules/xr/xr_render_state.idl
+++ b/third_party/blink/renderer/modules/xr/xr_render_state.idl
@@ -12,4 +12,5 @@
   readonly attribute double depthFar;
   readonly attribute double? inlineVerticalFieldOfView;
   readonly attribute XRWebGLLayer? baseLayer;
+  [RuntimeEnabled=WebXRLayers] readonly attribute FrozenArray<XRLayer> layers;
 };
diff --git a/third_party/blink/renderer/modules/xr/xr_render_state_init.idl b/third_party/blink/renderer/modules/xr/xr_render_state_init.idl
index b632ff1..85805c6a 100644
--- a/third_party/blink/renderer/modules/xr/xr_render_state_init.idl
+++ b/third_party/blink/renderer/modules/xr/xr_render_state_init.idl
@@ -8,4 +8,5 @@
   double depthFar;
   double inlineVerticalFieldOfView;
   XRWebGLLayer? baseLayer;
+  [RuntimeEnabled=WebXRLayers] sequence<XRLayer>? layers;
 };
diff --git a/third_party/blink/renderer/modules/xr/xr_session.cc b/third_party/blink/renderer/modules/xr/xr_session.cc
index 5f78f5f..08a970f7 100644
--- a/third_party/blink/renderer/modules/xr/xr_session.cc
+++ b/third_party/blink/renderer/modules/xr/xr_session.cc
@@ -296,6 +296,7 @@
     case XRSessionFeature::IMAGE_TRACKING:
     case XRSessionFeature::HAND_INPUT:
     case XRSessionFeature::SECONDARY_VIEWS:
+    case XRSessionFeature::LAYERS:
       // Not recording metrics for these features currently.
       break;
   }
diff --git a/third_party/blink/renderer/modules/xr/xr_sub_image.h b/third_party/blink/renderer/modules/xr/xr_sub_image.h
new file mode 100644
index 0000000..494d60d
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_sub_image.h
@@ -0,0 +1,38 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_SUB_IMAGE_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_SUB_IMAGE_H_
+
+#include "third_party/blink/renderer/modules/xr/xr_viewport.h"
+#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+#include "ui/gfx/geometry/rect.h"
+
+namespace blink {
+
+class XRSubImage : public ScriptWrappable {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  explicit XRSubImage(const gfx::Rect& viewport)
+      : viewport_(MakeGarbageCollected<XRViewport>(viewport.x(),
+                                                   viewport.y(),
+                                                   viewport.width(),
+                                                   viewport.height())) {}
+
+  XRViewport* viewport() const { return viewport_; }
+
+  void Trace(Visitor* visitor) const override {
+    visitor->Trace(viewport_);
+    ScriptWrappable::Trace(visitor);
+  }
+
+ private:
+  Member<XRViewport> viewport_;
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_SUB_IMAGE_H_
diff --git a/third_party/blink/renderer/modules/xr/xr_sub_image.idl b/third_party/blink/renderer/modules/xr/xr_sub_image.idl
new file mode 100644
index 0000000..5d411043
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_sub_image.idl
@@ -0,0 +1,12 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.w3.org/TR/webxrlayers-1/#xrsubimagetype
+[
+  SecureContext,
+  Exposed=Window,
+  RuntimeEnabled=WebXRLayers
+] interface XRSubImage {
+  [SameObject] readonly attribute XRViewport viewport;
+};
diff --git a/third_party/blink/renderer/modules/xr/xr_system.cc b/third_party/blink/renderer/modules/xr/xr_system.cc
index 8100c036..53914025 100644
--- a/third_party/blink/renderer/modules/xr/xr_system.cc
+++ b/third_party/blink/renderer/modules/xr/xr_system.cc
@@ -212,6 +212,9 @@
     return device::mojom::XRSessionFeature::HAND_INPUT;
   } else if (feature_string == "secondary-views") {
     return device::mojom::XRSessionFeature::SECONDARY_VIEWS;
+  } else if (RuntimeEnabledFeatures::WebXRLayersEnabled(context) &&
+             feature_string == "layers") {
+    return device::mojom::XRSessionFeature::LAYERS;
   }
 
   return absl::nullopt;
@@ -250,6 +253,8 @@
       return "hand-tracking";
     case device::mojom::XRSessionFeature::SECONDARY_VIEWS:
       return "secondary-views";
+    case device::mojom::XRSessionFeature::LAYERS:
+      return "layers";
   }
 }
 
@@ -269,6 +274,7 @@
     case device::mojom::XRSessionFeature::ANCHORS:
     case device::mojom::XRSessionFeature::HAND_INPUT:
     case device::mojom::XRSessionFeature::SECONDARY_VIEWS:
+    case device::mojom::XRSessionFeature::LAYERS:
       return mode == device::mojom::blink::XRSessionMode::kImmersiveVr ||
              mode == device::mojom::blink::XRSessionMode::kImmersiveAr;
     case device::mojom::XRSessionFeature::DOM_OVERLAY:
@@ -332,6 +338,7 @@
     case device::mojom::XRSessionFeature::IMAGE_TRACKING:
     case device::mojom::XRSessionFeature::HAND_INPUT:
     case device::mojom::XRSessionFeature::SECONDARY_VIEWS:
+    case device::mojom::XRSessionFeature::LAYERS:
       return context->IsFeatureEnabled(
           mojom::blink::PermissionsPolicyFeature::kWebXr,
           ReportOptions::kReportOnFailure);
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_binding.cc b/third_party/blink/renderer/modules/xr/xr_webgl_binding.cc
index 15418084..08ef30a 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_binding.cc
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_binding.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/xr/xr_webgl_binding.h"
 
 #include "third_party/blink/renderer/bindings/modules/v8/v8_union_webgl2renderingcontext_webglrenderingcontext.h"
+#include "third_party/blink/renderer/bindings/modules/v8/v8_xr_projection_layer_init.h"
 #include "third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h"
 #include "third_party/blink/renderer/modules/webgl/webgl_texture.h"
 #include "third_party/blink/renderer/modules/webgl/webgl_unowned_texture.h"
@@ -12,11 +13,13 @@
 #include "third_party/blink/renderer/modules/xr/xr_cube_map.h"
 #include "third_party/blink/renderer/modules/xr/xr_frame.h"
 #include "third_party/blink/renderer/modules/xr/xr_light_probe.h"
+#include "third_party/blink/renderer/modules/xr/xr_projection_layer.h"
 #include "third_party/blink/renderer/modules/xr/xr_render_state.h"
 #include "third_party/blink/renderer/modules/xr/xr_session.h"
 #include "third_party/blink/renderer/modules/xr/xr_utils.h"
 #include "third_party/blink/renderer/modules/xr/xr_viewer_pose.h"
 #include "third_party/blink/renderer/modules/xr/xr_webgl_layer.h"
+#include "third_party/blink/renderer/modules/xr/xr_webgl_sub_image.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/graphics/gpu/extensions_3d_util.h"
 
@@ -66,6 +69,29 @@
                                bool webgl2)
     : session_(session), webgl_context_(webgl_context), webgl2_(webgl2) {}
 
+double XRWebGLBinding::nativeProjectionScaleFactor() const {
+  return session_->NativeFramebufferScale();
+}
+
+bool XRWebGLBinding::usesDepthValues() const {
+  return false;
+}
+
+XRProjectionLayer* XRWebGLBinding::createProjectionLayer(
+    const XRProjectionLayerInit* init,
+    ExceptionState& exception_state) {
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
+XRWebGLSubImage* XRWebGLBinding::getViewSubImage(
+    XRProjectionLayer* layer,
+    XRView* view,
+    ExceptionState& exception_state) {
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
 WebGLTexture* XRWebGLBinding::getReflectionCubeMap(
     XRLightProbe* light_probe,
     ExceptionState& exception_state) {
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_binding.h b/third_party/blink/renderer/modules/xr/xr_webgl_binding.h
index cf778e5c..601ebb2d 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_binding.h
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_binding.h
@@ -19,6 +19,9 @@
 class XRSession;
 class XRView;
 class XRWebGLDepthInformation;
+class XRProjectionLayer;
+class XRProjectionLayerInit;
+class XRWebGLSubImage;
 
 class XRWebGLBinding final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
@@ -31,6 +34,16 @@
                                 const V8XRWebGLRenderingContext* context,
                                 ExceptionState& exception_state);
 
+  double nativeProjectionScaleFactor() const;
+  bool usesDepthValues() const;
+
+  XRProjectionLayer* createProjectionLayer(const XRProjectionLayerInit* init,
+                                           ExceptionState& exception_state);
+
+  XRWebGLSubImage* getViewSubImage(XRProjectionLayer* layer,
+                                   XRView* view,
+                                   ExceptionState& exception_state);
+
   XRSession* session() const { return session_; }
 
   WebGLTexture* getReflectionCubeMap(XRLightProbe*, ExceptionState&);
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_binding.idl b/third_party/blink/renderer/modules/xr/xr_webgl_binding.idl
index 1222a8a2..9c1ffeb5 100644
--- a/third_party/blink/renderer/modules/xr/xr_webgl_binding.idl
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_binding.idl
@@ -2,6 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.w3.org/TR/webxrlayers-1/#xrtexturetype
+enum XRTextureType {
+  "texture",
+  "texture-array"
+};
+
+// https://www.w3.org/TR/webxrlayers-1/#xrprojectionlayerinittype
+dictionary XRProjectionLayerInit {
+  XRTextureType textureType = "texture";
+  GLenum colorFormat = 0x1908; // RGBA
+  GLenum depthFormat = 0x1902; // DEPTH_COMPONENT
+  double scaleFactor = 1.0;
+};
+
 // https://immersive-web.github.io/layers/#XRWebGLBindingtype
 [
     SecureContext,
@@ -9,6 +23,17 @@
 ] interface XRWebGLBinding {
   [RaisesException] constructor(XRSession session, XRWebGLRenderingContext context);
 
+  [RuntimeEnabled=WebXRLayers]
+  readonly attribute double nativeProjectionScaleFactor;
+  [RuntimeEnabled=WebXRLayers]
+  readonly attribute boolean usesDepthValues;
+
+  [RuntimeEnabled=WebXRLayers, RaisesException]
+  XRProjectionLayer createProjectionLayer(optional XRProjectionLayerInit init = {});
+
+  [RuntimeEnabled=WebXRLayers, RaisesException]
+  XRWebGLSubImage getViewSubImage(XRProjectionLayer layer, XRView view);
+
   // Lighting Estimation API
   [RuntimeEnabled=WebXRLightEstimation, RaisesException, MeasureAs=XRWebGLBindingGetReflectionCubeMap]
   WebGLTexture? getReflectionCubeMap(XRLightProbe lightProbe);
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_sub_image.h b/third_party/blink/renderer/modules/xr/xr_webgl_sub_image.h
new file mode 100644
index 0000000..d2c68d05
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_sub_image.h
@@ -0,0 +1,67 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_WEBGL_SUB_IMAGE_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_WEBGL_SUB_IMAGE_H_
+
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/renderer/modules/webgl/webgl_texture.h"
+#include "third_party/blink/renderer/modules/xr/xr_sub_image.h"
+
+namespace blink {
+
+class XRWebGLSubImage final : public XRSubImage {
+  DEFINE_WRAPPERTYPEINFO();
+
+ public:
+  explicit XRWebGLSubImage(const gfx::Rect& viewport) : XRSubImage(viewport) {}
+
+  WebGLTexture* colorTexture() const { return color_texture_.Get(); }
+  WebGLTexture* depthStencilTexture() const {
+    return depth_stencil_texture_.Get();
+  }
+  WebGLTexture* motionVectorTexture() const {
+    return motion_vector_texture_.Get();
+  }
+
+  absl::optional<uint16_t> imageIndex() const { return image_index_; }
+  uint16_t colorTextureWidth() const { return color_texture_width_; }
+  uint16_t colorTextureHeight() const { return color_texture_height_; }
+  absl::optional<uint16_t> depthStencilTextureWidth() const {
+    return depth_stencil_texture_width_;
+  }
+  absl::optional<uint16_t> depthStencilTextureHeight() const {
+    return depth_stencil_texture_height_;
+  }
+  absl::optional<uint16_t> motionVectorTextureWidth() const {
+    return motion_vector_texture_width_;
+  }
+  absl::optional<uint16_t> motionVectorTextureHeight() const {
+    return motion_vector_texture_height_;
+  }
+
+  void Trace(Visitor* visitor) const override {
+    visitor->Trace(color_texture_);
+    visitor->Trace(depth_stencil_texture_);
+    visitor->Trace(motion_vector_texture_);
+    XRSubImage::Trace(visitor);
+  }
+
+ private:
+  Member<WebGLTexture> color_texture_{nullptr};
+  Member<WebGLTexture> depth_stencil_texture_{nullptr};
+  Member<WebGLTexture> motion_vector_texture_{nullptr};
+
+  absl::optional<uint16_t> image_index_{absl::nullopt};
+  uint16_t color_texture_width_{0};
+  uint16_t color_texture_height_{0};
+  absl::optional<uint16_t> depth_stencil_texture_width_{absl::nullopt};
+  absl::optional<uint16_t> depth_stencil_texture_height_{absl::nullopt};
+  absl::optional<uint16_t> motion_vector_texture_width_{absl::nullopt};
+  absl::optional<uint16_t> motion_vector_texture_height_{absl::nullopt};
+};
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_WEBGL_SUB_IMAGE_H_
diff --git a/third_party/blink/renderer/modules/xr/xr_webgl_sub_image.idl b/third_party/blink/renderer/modules/xr/xr_webgl_sub_image.idl
new file mode 100644
index 0000000..e4a004a
--- /dev/null
+++ b/third_party/blink/renderer/modules/xr/xr_webgl_sub_image.idl
@@ -0,0 +1,22 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.w3.org/TR/webxrlayers-1/#xrwebglsubimagetype
+[
+  SecureContext,
+  Exposed=Window,
+  RuntimeEnabled=WebXRLayers
+] interface XRWebGLSubImage : XRSubImage {
+  [SameObject] readonly attribute WebGLTexture colorTexture;
+  [SameObject] readonly attribute WebGLTexture? depthStencilTexture;
+  [SameObject] readonly attribute WebGLTexture? motionVectorTexture;
+
+  readonly attribute unsigned long? imageIndex;
+  readonly attribute unsigned long colorTextureWidth;
+  readonly attribute unsigned long colorTextureHeight;
+  readonly attribute unsigned long? depthStencilTextureWidth;
+  readonly attribute unsigned long? depthStencilTextureHeight;
+  readonly attribute unsigned long? motionVectorTextureWidth;
+  readonly attribute unsigned long? motionVectorTextureHeight;
+};
diff --git a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
index bbb5af5..15523ef 100644
--- a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
+++ b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
@@ -1779,10 +1779,14 @@
     GLuint dest_texture_id = premultiplied_alpha_false_texture_
                                  ? premultiplied_alpha_false_texture_
                                  : back_color_buffer_->texture_id;
+    gl_->BeginSharedImageAccessDirectCHROMIUM(
+        front_color_buffer_->texture_id,
+        GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
     gl_->CopySubTextureCHROMIUM(front_color_buffer_->texture_id, 0,
                                 texture_target_, dest_texture_id, 0, 0, 0, 0, 0,
                                 size_.width(), size_.height(), GL_FALSE,
                                 GL_FALSE, GL_FALSE);
+    gl_->EndSharedImageAccessDirectCHROMIUM(front_color_buffer_->texture_id);
   }
   contents_changed_ = false;
   if (preserve_drawing_buffer_ == kDiscard) {
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 5440072726..8ff77ca 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -658,32 +658,6 @@
       status:  "experimental",
     },
     {
-      // Flag for supporting size and inline-size container-types along with the
-      // @container rules for size queries. Also implies support for container
-      // relative units and inline-size containment.
-      // https://drafts.csswg.org/css-contain-3/#container-queries
-      name: "CSSContainerQueries",
-      status: "stable"
-    },
-    {
-      // https://drafts.csswg.org/css-contain-3/#container-lengths
-      name: "CSSContainerRelativeUnits",
-      implied_by: ["CSSContainerQueries"]
-    },
-    {
-      // With this flag disabled, we run UpdateStyle() over the full DOM tree
-      // before running interleaved style/layout. With this flag enabled, we
-      // skip style recalc in UpdateStyle() for containers which are guaranteed
-      // to be reachable in the following layout.
-      name: "CSSContainerSkipStyleRecalc",
-      implied_by: ["CSSContainerQueries"]
-    },
-    {
-      // Support for contain:inline-size
-      name: "CSSContainSize1D",
-      implied_by: ["CSSContainerQueries"]
-    },
-    {
       // Include custom properties in CSSComputedStyleDeclaration::item/length.
       // https://crbug.com/949807
       name: "CSSEnumeratedCustomProperties",
@@ -2166,7 +2140,7 @@
     {
       name: "PrefixedStorageInfo",
       public: true,
-      status: "stable",
+      status: "test",
       base_feature: "PrefixedStorageInfo",
       base_feature_status: "disabled",
     },
@@ -3257,6 +3231,12 @@
       status: "experimental",
     },
     {
+      name: "WebXRLayers",
+      depends_on: ["WebXR"],
+      public: true,
+      status: "experimental"
+    },
+    {
       name: "WebXRLightEstimation",
       depends_on: ["WebXRARModule"],
       public: true,
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index a12d31459..0142bb5 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1527,7 +1527,6 @@
 crbug.com/591099 [ Mac ] external/wpt/css/css-writing-modes/bidi-plaintext-001.html [ Failure ]
 crbug.com/591099 [ Mac ] fast/css/content-counter-010.htm [ Failure ]
 crbug.com/591099 [ Mac ] fast/css/content/content-quotes-07.html [ Failure ]
-crbug.com/591099 [ Mac10.14 ] fast/forms/text/text-lineheight-centering.html [ Failure ]
 crbug.com/591099 [ Mac ] paint/invalidation/box/hover-pseudo-borders.html [ Failure ]
 crbug.com/591099 [ Mac ] fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-auto.html [ Failure ]
 crbug.com/591099 [ Mac ] paint/invalidation/flexbox/remove-inline-block-descendant-of-flex.html [ Failure ]
@@ -3041,9 +3040,9 @@
 # ====== New tests from wpt-importer added here ======
 crbug.com/626703 external/wpt/css/css-grid/subgrid/grid-gap-010.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-grid/subgrid/grid-gap-011.html [ Failure ]
-crbug.com/626703 [ Win ] external/wpt/html/semantics/disabled-elements/event-propagate-disabled.tentative.html [ Timeout Failure ]
-crbug.com/626703 [ Win11 ] external/wpt/screen-orientation/hidden_document.html [ Timeout Failure ]
-crbug.com/626703 [ Win10.20h2 ] external/wpt/speculation-rules/prerender/opt-out.html [ Timeout Failure ]
+crbug.com/626703 [ Win ] external/wpt/html/semantics/disabled-elements/event-propagate-disabled.tentative.html [ Failure Timeout ]
+crbug.com/626703 [ Win11 ] external/wpt/screen-orientation/hidden_document.html [ Failure Timeout ]
+crbug.com/626703 [ Win10.20h2 ] external/wpt/speculation-rules/prerender/opt-out.html [ Failure Timeout ]
 crbug.com/626703 [ Mac12 ] virtual/pending-beacon/external/wpt/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Crash Failure ]
 crbug.com/626703 [ Mac11 ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Crash Failure ]
@@ -3997,7 +3996,6 @@
 crbug.com/807110 external/wpt/media-source/mediasource-sequencemode-append-buffer.html [ Failure Pass ]
 crbug.com/807110 external/wpt/media-source/mediasource-sourcebuffer-mode-timestamps.html [ Failure Pass ]
 crbug.com/794338 media/video-rotation.html [ Failure Pass ]
-crbug.com/811605 media/video-poster-after-loadedmetadata.html [ Failure Pass ]
 
 # MHT works only when loaded from local FS (file://..).
 crbug.com/778467 [ Fuchsia ] mhtml/mhtml_in_iframe.html [ Failure ]
@@ -4285,7 +4283,6 @@
 
 # Sheriff 2019-07-31
 crbug.com/979422 [ Mac ] fast/borders/border-radius-mask-canvas-with-shadow.html [ Failure ]
-crbug.com/979422 [ Mac ] fast/borders/border-radius-mask-canvas-all.html [ Failure ]
 crbug.com/979422 [ Mac ] fast/borders/border-radius-mask-canvas-padding.html [ Failure ]
 crbug.com/979422 [ Mac ] fast/borders/border-radius-mask-canvas-with-mask.html [ Failure ]
 crbug.com/979422 [ Mac ] fast/borders/border-radius-mask-canvas-border.html [ Failure ]
@@ -4699,7 +4696,6 @@
 # Sheriff 2020-07-13
 
 crbug.com/1104910 fast/peerconnection/RTCPeerConnection-reload-interesting-usage.html [ Failure Pass ]
-crbug.com/1104910 [ Mac ] editing/selection/selection-background.html [ Failure Pass ]
 
 # Sheriff 2020-07-14
 
@@ -6276,7 +6272,7 @@
 # Failures with FractionalScrollOffsets disabled for web tests by default.
 crbug.com/1358383 fast/scrolling/scrollbars/touch-scrolling-on-root-scrollbar.html [ Failure ]
 crbug.com/1358383 [ Mac ] fast/scrolling/scrollbars/scrollbar-rtl-manipulation.html [ Failure ]
-crbug.com/1358383 fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Failure ]
+crbug.com/1358383 fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Failure Pass ]
 crbug.com/1358383 virtual/compositor_threaded_scrollbar_scrolling/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar-thumb.html [ Failure ]
 crbug.com/1358383 virtual/threaded-prefer-compositing/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar-thumb.html [ Failure ]
 [ Linux ] virtual/percent-based-scrolling/fast/scrolling/scrollbars/touch-scrolling-on-root-scrollbar.html [ Pass ]
@@ -6288,10 +6284,10 @@
 [ Mac ] virtual/main-threaded-percent-based-scrolling/fast/scrolling/scrollbars/scrollbar-rtl-manipulation.html [ Pass ]
 [ Mac ] virtual/compositor-threaded-percent-based-scrolling/fast/scrolling/scrollbars/scrollbar-rtl-manipulation.html [ Pass ]
 [ Mac ] virtual/fractional-scroll-offsets/fast/scrolling/scrollbars/scrollbar-rtl-manipulation.html [ Pass ]
-virtual/percent-based-scrolling/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Pass ]
-virtual/main-threaded-percent-based-scrolling/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Pass ]
-virtual/compositor-threaded-percent-based-scrolling/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Pass ]
-virtual/fractional-scroll-offsets/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Pass ]
+virtual/percent-based-scrolling/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Failure Pass ]
+virtual/main-threaded-percent-based-scrolling/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Failure Pass ]
+virtual/compositor-threaded-percent-based-scrolling/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Failure Pass ]
+virtual/fractional-scroll-offsets/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html [ Failure Pass ]
 
 # Sheriff 2022-08-24
 crbug.com/1356118 [ Mac ] virtual/async-script-scheduling-finished-parsing/wpt_internal/async-script-scheduling/execution-order.sub.html [ Failure Pass ]
@@ -6938,3 +6934,6 @@
 crbug.com/1085129 virtual/force-eager/external/wpt/measure-memory/detached.https.window.html [ Skip Timeout ]
 crbug.com/1085129 virtual/force-eager/external/wpt/measure-memory/window-open.mix.https.window.html [ Skip Timeout ]
 crbug.com/1207146 virtual/force-eager/external/wpt/measure-memory/main-frame-and-worker.https.window.html [ Failure Pass ]
+
+crbug.com/1385413 [ Win10.20h2 ] media/controls/overflow-menu-pointer-selection.html [ Failure Pass ]
+crbug.com/1385413 [ Win10.20h2 ] media/controls/text-track-menu-pointer-selection.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index c85ea66..a83f17d 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1484,5 +1484,13 @@
     "platforms": ["Linux", "Mac", "Win"],
     "bases": ["http/tests/devtools/extensions", "http/tests/devtools/tracing", "http/tests/devtools/coverage"],
     "args": ["--content-shell-devtools-tab-target"]
+  },
+  {
+    "prefix": "split-user-media-queues",
+    "platforms": ["Linux", "Mac", "Win"],
+    "bases": [
+      "external/wpt/mediacapture-streams/parallel-capture-requests.https.html"
+    ],
+    "args": ["--enable-features=SplitUserMediaQueues"]
   }
 ]
diff --git a/third_party/blink/web_tests/compositing/overflow/local-attachment-border-radius-styles-with-composited-child-expected.png b/third_party/blink/web_tests/compositing/overflow/local-attachment-border-radius-styles-with-composited-child-expected.png
new file mode 100644
index 0000000..84d8f4dd
--- /dev/null
+++ b/third_party/blink/web_tests/compositing/overflow/local-attachment-border-radius-styles-with-composited-child-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/compositing/overflow/local-attachment-border-radius-styles-with-composited-child.html b/third_party/blink/web_tests/compositing/overflow/local-attachment-border-radius-styles-with-composited-child.html
new file mode 100644
index 0000000..030394d9
--- /dev/null
+++ b/third_party/blink/web_tests/compositing/overflow/local-attachment-border-radius-styles-with-composited-child.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<style>
+
+.outer {
+    border: 10px solid black;
+    width: 100px;
+    height: 100px;
+    border-radius: 40px;
+    background-color: lightblue;
+    overflow: hidden;
+    margin: 10px;
+    background-attachment: local;
+}
+
+.inner {
+    width: 80px;
+    height: 80px;
+    background-color: green;
+    padding: .5em;
+}
+
+.double {
+   border-style: double;
+}
+
+.dashed {
+    border-style: dashed;
+}
+
+.translucent {
+    border-color: rgba(255,0,0,0.5);
+}
+
+.clip {
+    overflow: clip;
+}
+
+</style>
+
+<div class = "outer double">
+    <div class = "inner"></div>
+</div>
+
+<div class = "outer double clip">
+    <div class = "inner"></div>
+</div>
+
+<div class = "outer dashed">
+    <div class = "inner"></div>
+</div>
+
+<div class = "outer translucent">
+    <div class = "inner"></div>
+</div>
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 0de4efa..41aa7d2 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
@@ -4784,6 +4784,13 @@
        ]
       },
       "the-input-element": {
+       "input-form-detach-style-crash.html": [
+        "547256376362ee03df9f23387b64ea83c5354fcd",
+        [
+         null,
+         {}
+        ]
+       ],
        "invalid-datalist-options-crash.html": [
         "7cdd55196cecaae8cc64fe7fc86b4f7305e7525d",
         [
@@ -245796,6 +245803,58 @@
          {}
         ]
        ],
+       "fixed-position-child-with-contain-ancestor.html": [
+        "98835cb795fb0e4bce8f68f4f1bdbf5bd39614e8",
+        [
+         null,
+         [
+          [
+           "/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fixed-position-cb-ref.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "fixed-position-child-with-fo-ancestor.html": [
+        "fe625f1c9bfb4962970fd1852df5ca3b6e9eb7ca",
+        [
+         null,
+         [
+          [
+           "/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fixed-position-cb-ref.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "fixed-position-child-with-transformed-ancestor.html": [
+        "58627443dae1941971eb29d8943877419801d783",
+        [
+         null,
+         [
+          [
+           "/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fixed-position-cb-ref.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
+       "fixed-position-child-with-will-change-ancestor.html": [
+        "14f4391e6bfbc2a3e5817edbd197cfcc4013a1af",
+        [
+         null,
+         [
+          [
+           "/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fixed-position-cb-ref.html",
+           "=="
+          ]
+         ],
+         {}
+        ]
+       ],
        "inert-node-is-not-highlighted.html": [
         "f6db38ed72a8cc24c5462313ae41f803ec0016eb",
         [
@@ -257412,16 +257471,6 @@
    }
   },
   "support": {
-   ".cache": {
-    "gitignore2.json": [
-     "464b9c93eed0495e70ff94d9868b04b37a348730",
-     []
-    ],
-    "mtime.json": [
-     "a52b35a00de1e750a3bb515d90621afa6a0943c1",
-     []
-    ]
-   },
    ".gitignore": [
     "d93e645d547894b50149d3726de2654957b6e06f",
     []
@@ -344806,6 +344855,10 @@
         "c0b64e68bd146566a354e98dba237e68183d0928",
         []
        ],
+       "fixed-position-child-with-fixed-position-cb-ref.html": [
+        "d973c0876de05535aa8196b3239fadd007d18ba6",
+        []
+       ],
        "green-dialog-and-backdrop.html": [
         "cd23c32a069f2bbeba65de018f3beda32a012374",
         []
@@ -361346,7 +361399,7 @@
      []
     ],
     "getdisplaymedia.https-expected.txt": [
-     "651b3774aadaf9c752ae93fd7a2a5eecb1f77391",
+     "5fc0b6806845f8e6dba22a007c617f3cefbbd958",
      []
     ],
     "getdisplaymedia.https.html.ini": [
@@ -570280,7 +570333,7 @@
      ]
     ],
     "getdisplaymedia.https.html": [
-     "d2229e119c184009ebcb254665bf5698e5248ca4",
+     "989835af9bb81f4f3219435b843134ad6bb6d323",
      [
       null,
       {
@@ -571198,28 +571251,28 @@
     },
     "view-timelines": {
      "block-view-timeline-current-time-vertical-rl.tentative.html": [
-      "d729f8075b4e52e570cfaa6e64af13b6ed891b3d",
+      "5bc459845229196bc075a0f27a6461b5519700fc",
       [
        null,
        {}
       ]
      ],
      "block-view-timeline-current-time.tentative.html": [
-      "878b4a549a0876c2d218c797ee14ea1079c7a9fd",
+      "a6530f663121c2e0b97a1ec41de8c35326435525",
       [
        null,
        {}
       ]
      ],
      "block-view-timeline-nested-subject.tentative.html": [
-      "720b33aad0d29c7771720280345af532144fb7c9",
+      "2cc8af882ff87cbcacb7cbb84aa78824dff532fa",
       [
        null,
        {}
       ]
      ],
      "inline-view-timeline-current-time.tentative.html": [
-      "080c1c6e92dbf6e654eb84806b5d36171908505c",
+      "412145b04c0a951aa96312afb641159884ae5756",
       [
        null,
        {}
@@ -571254,7 +571307,7 @@
       ]
      ],
      "view-timeline-source.tentative.html": [
-      "15fbdb5785543e739e5c0b1ff44cc6396cfb09ca",
+      "f8aabc8bdd9cc202c94240bdba2f17769d89290e",
       [
        null,
        {}
@@ -596004,7 +596057,7 @@
        ]
       ],
       "commitStyles.html": [
-       "f16412fbcf70ba5ef9cb49f8e0647e98de23a596",
+       "9a7dbea8b8649bb4580e60fef1e1530a84f2b13f",
        [
         null,
         {}
@@ -606598,7 +606651,14 @@
        }
       ]
      ]
-    }
+    },
+    "toJSON.html": [
+     "26d6552d25d57cd3f1d7651c1790c5c8c815bcd5",
+     [
+      null,
+      {}
+     ]
+    ]
    },
    "webrtc-encoded-transform": {
     "RTCEncodedAudioFrame-serviceworker-failure.https.html": [
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey.https.any-expected.txt
index b0584f5..bb30f15 100644
--- a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey.https.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey.https.any-expected.txt
@@ -1,12 +1,12 @@
 This is a testharness.js-based test.
 PASS Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, true, [])
-FAIL Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError: Unsupported import key format for algorithm Reached unreachable code
+PASS Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, true, [])
 PASS Good parameters: Ed25519 bits (pkcs8, buffer(48), {name: Ed25519}, true, [sign])
-FAIL Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: Unsupported import key format for algorithm Reached unreachable code
+PASS Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign])
 PASS Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, false, [])
-FAIL Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError: Unsupported import key format for algorithm Reached unreachable code
+PASS Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, false, [])
 PASS Good parameters: Ed25519 bits (pkcs8, buffer(48), {name: Ed25519}, false, [sign])
-FAIL Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: Unsupported import key format for algorithm Reached unreachable code
+PASS Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, false, [sign])
 FAIL Good parameters: Ed448 bits (spki, buffer(69), {name: Ed448}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError: Failed to execute 'importKey' on 'SubtleCrypto': Algorithm: Unrecognized name Reached unreachable code
 FAIL Good parameters: Ed448 bits (jwk, object(kty, crv, x), {name: Ed448}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError: Failed to execute 'importKey' on 'SubtleCrypto': Algorithm: Unrecognized name Reached unreachable code
 FAIL Good parameters: Ed448 bits (pkcs8, buffer(73), {name: Ed448}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: Failed to execute 'importKey' on 'SubtleCrypto': Algorithm: Unrecognized name Reached unreachable code
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey.https.any.worker-expected.txt
index b0584f5..bb30f15 100644
--- a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey.https.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey.https.any.worker-expected.txt
@@ -1,12 +1,12 @@
 This is a testharness.js-based test.
 PASS Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, true, [])
-FAIL Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError: Unsupported import key format for algorithm Reached unreachable code
+PASS Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, true, [])
 PASS Good parameters: Ed25519 bits (pkcs8, buffer(48), {name: Ed25519}, true, [sign])
-FAIL Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: Unsupported import key format for algorithm Reached unreachable code
+PASS Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign])
 PASS Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, false, [])
-FAIL Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError: Unsupported import key format for algorithm Reached unreachable code
+PASS Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, false, [])
 PASS Good parameters: Ed25519 bits (pkcs8, buffer(48), {name: Ed25519}, false, [sign])
-FAIL Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: Unsupported import key format for algorithm Reached unreachable code
+PASS Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, false, [sign])
 FAIL Good parameters: Ed448 bits (spki, buffer(69), {name: Ed448}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError: Failed to execute 'importKey' on 'SubtleCrypto': Algorithm: Unrecognized name Reached unreachable code
 FAIL Good parameters: Ed448 bits (jwk, object(kty, crv, x), {name: Ed448}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError: Failed to execute 'importKey' on 'SubtleCrypto': Algorithm: Unrecognized name Reached unreachable code
 FAIL Good parameters: Ed448 bits (pkcs8, buffer(73), {name: Ed448}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: Failed to execute 'importKey' on 'SubtleCrypto': Algorithm: Unrecognized name Reached unreachable code
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures.js b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures.js
new file mode 100644
index 0000000..4e2d7175
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures.js
@@ -0,0 +1,176 @@
+function run_test(algorithmNames) {
+    var subtle = crypto.subtle; // Change to test prefixed implementations
+
+    setup({explicit_timeout: true});
+
+// These tests check that importKey and exportKey throw an error, and that
+// the error is of the right type, for a wide set of incorrect parameters.
+
+// Error testing occurs by setting the parameter that should trigger the
+// error to an invalid value, then combining that with all valid
+// parameters that should be checked earlier by importKey, and all
+// valid and invalid parameters that should be checked later by
+// importKey.
+//
+// There are a lot of combinations of possible parameters for both
+// success and failure modes, resulting in a very large number of tests
+// performed.
+
+
+    var allTestVectors = [ // Parameters that should work for importKey / exportKey
+        {name: "Ed25519", privateUsages: ["sign"], publicUsages: ["verify"]},
+        {name: "Ed448", privateUsages: ["sign"], publicUsages: ["verify"]},
+        {name: "X25519",  privateUsages: ["deriveKey", "deriveBits"], publicUsages: []},
+        {name: "X448",  privateUsages: ["deriveKey", "deriveBits"], publicUsages: []},
+    ];
+
+    var testVectors = [];
+    if (algorithmNames && !Array.isArray(algorithmNames)) {
+        algorithmNames = [algorithmNames];
+    };
+    allTestVectors.forEach(function(vector) {
+        if (!algorithmNames || algorithmNames.includes(vector.name)) {
+            testVectors.push(vector);
+        }
+    });
+
+    function parameterString(format, algorithm, extractable, usages, data) {
+        if (typeof algorithm !== "object" && typeof algorithm !== "string") {
+            alert(algorithm);
+        }
+
+        var jwk_label = "";
+        if (format === "jwk")
+            jwk_label = data.d === undefined ? " (public) " : "(private)";
+
+        var result = "(" +
+                        objectToString(format) + jwk_label + ", " +
+                        objectToString(algorithm) + ", " +
+                        objectToString(extractable) + ", " +
+                        objectToString(usages) +
+                     ")";
+
+        return result;
+    }
+
+    // Test that a given combination of parameters results in an error,
+    // AND that it is the correct kind of error.
+    //
+    // Expected error is either a number, tested against the error code,
+    // or a string, tested against the error name.
+    function testError(format, algorithm, keyData, keySize, usages, extractable, expectedError, testTag) {
+        promise_test(async() => {
+            let key;
+            try {
+                key = await subtle.importKey(format, keyData, algorithm, extractable, usages);
+            } catch(err) {
+                let actualError = typeof expectedError === "number" ? err.code : err.name;
+                assert_equals(actualError, expectedError, testTag + " not supported.");
+            }
+            assert_equals(key, undefined, "Operation succeeded, but should not have.");
+        }, testTag + ": importKey" + parameterString(format, algorithm, extractable, usages, keyData));
+    }
+
+    // Don't create an exhaustive list of all invalid usages,
+    // because there would usually be nearly 2**8 of them,
+    // way too many to test. Instead, create every singleton
+    // of an illegal usage, and "poison" every valid usage
+    // with an illegal one.
+    function invalidUsages(validUsages, mandatoryUsages) {
+        var results = [];
+
+        var illegalUsages = [];
+        ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey", "deriveKey", "deriveBits"].forEach(function(usage) {
+            if (!validUsages.includes(usage)) {
+                illegalUsages.push(usage);
+            }
+        });
+
+        var goodUsageCombinations = validUsages.length === 0 ? [] : allValidUsages(validUsages, false, mandatoryUsages);
+
+        illegalUsages.forEach(function(illegalUsage) {
+            results.push([illegalUsage]);
+            goodUsageCombinations.forEach(function(usageCombination) {
+                results.push(usageCombination.concat([illegalUsage]));
+            });
+        });
+
+        return results;
+    }
+
+    function validUsages(usages, format, data) {
+        if (format === 'spki') return usages.publicUsages
+        if (format === 'pkcs8') return usages.privateUsages
+        if (format === 'jwk') {
+            if (data === undefined)
+                return [];
+            return data.d === undefined ? usages.publicUsages : usages.privateUsages;
+        }
+        return [];
+    }
+
+// Now test for properly handling errors
+// - Unsupported algorithm
+// - Bad usages for algorithm
+// - Bad key lengths
+// - Lack of a mandatory format field
+// - Incompatible keys pair
+
+    // Algorithms normalize okay, but usages bad (though not empty).
+    // It shouldn't matter what other extractable is. Should fail
+    // due to SyntaxError
+    testVectors.forEach(function(vector) {
+        var name = vector.name;
+        validKeyData.forEach(function(test) {
+            allAlgorithmSpecifiersFor(name).forEach(function(algorithm) {
+                invalidUsages(validUsages(vector, test.format, test.data)).forEach(function(usages) {
+                    [true, false].forEach(function(extractable) {
+                        testError(test.format, algorithm, test.data, name, usages, extractable, "SyntaxError", "Bad usages");
+                    });
+                });
+            });
+        });
+    });
+
+    // Algorithms normalize okay, usages ok. The length of the key must thouw a DataError exception.
+    testVectors.forEach(function(vector) {
+        var name = vector.name;
+        badKeyLengthData.forEach(function(test) {
+            allAlgorithmSpecifiersFor(name).forEach(function(algorithm) {
+                allValidUsages(validUsages(vector, test.format, test.data)).forEach(function(usages) {
+                    [true, false].forEach(function(extractable) {
+                        testError(test.format, algorithm, test.data, name, usages, extractable, "DataError", "Bad key length");
+                    });
+                });
+            });
+        });
+    });
+
+    // Algorithms normalize okay, usages ok and valid key. The lack of the mandatory JWK parameter must throw a syntax error.
+    testVectors.forEach(function(vector) {
+        var name = vector.name;
+        missingJWKFieldKeyData.forEach(function(test) {
+            allAlgorithmSpecifiersFor(name).forEach(function(algorithm) {
+                allValidUsages(validUsages(vector, 'jwk', test.data)).forEach(function(usages) {
+                    [true, false].forEach(function(extractable) {
+                        testError('jwk', algorithm, test.data, name, usages, extractable, "DataError", "Missing JWK '" + test.param + "' parameter");
+                    });
+                });
+            });
+        });
+    });
+
+    // Algorithms normalize okay, usages ok and valid key. The public key is not compatible with the private key.
+    testVectors.forEach(function(vector) {
+        var name = vector.name;
+        invalidJWKKeyData.forEach(function(data) {
+            allAlgorithmSpecifiersFor(name).forEach(function(algorithm) {
+                allValidUsages(vector.privateUsages).forEach(function(usages) {
+                    [true].forEach(function(extractable) {
+                        testError('jwk', algorithm, data, name, usages, extractable, "DataError", "Invalid key pair");
+                    });
+                });
+            });
+        });
+    });
+}
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js
new file mode 100644
index 0000000..7d6ec61
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed25519.https.any.js
@@ -0,0 +1,102 @@
+// META: title=WebCryptoAPI: importKey() for Failures
+// META: timeout=long
+// META: script=../util/helpers.js
+// META: script=okp_importKey_failures.js
+
+// Setup: define the correct behaviors that should be sought, and create
+// helper functions that generate all possible test parameters for
+// different situations.
+var validKeyData = [
+    {
+      format: "spki",
+      data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 112, 3, 33, 0, 216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61, 204])
+    },
+    {
+      format: "pkcs8",
+      data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32, 243, 200, 244, 196, 141, 248, 120, 20, 110, 140, 211, 191, 109, 244, 229, 14, 56, 155, 167, 7, 78, 21, 194, 53, 45, 205, 93, 48, 141, 76, 168, 31])
+    },
+    {
+      format: "jwk",
+      data: {
+          crv: "Ed25519",
+          d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8",
+          x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw",
+          kty: "OKP"
+      },
+    },
+    {
+      format: "jwk",
+      data: {
+          crv: "Ed25519",
+          x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw",
+          kty: "OKP"
+      },
+    },
+];
+
+// Removed just the last byte.
+var badKeyLengthData = [
+    {
+        format: "spki",
+        data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 112, 3, 33, 0, 216, 225, 137, 99, 216, 9, 212, 135, 217, 84, 154, 204, 174, 198, 116, 46, 126, 235, 162, 77, 138, 13, 59, 20, 183, 227, 202, 234, 6, 137, 61])
+    },
+    {
+        format: "pkcs8",
+        data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32, 243, 200, 244, 196, 141, 248, 120, 20, 110, 140, 211, 191, 109, 244, 229, 14, 56, 155, 167, 7, 78, 21, 194, 53, 45, 205, 93, 48, 141, 76, 168])
+    },
+    {
+        format: "jwk",
+        data: {
+            crv: "Ed25519",
+            d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB",
+            x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPcw",
+            kty: "OKP"
+        }
+    },
+    {
+        format: "jwk",
+        data: {
+            crv: "Ed25519",
+            x: "2OGJY9gJ1IfZVJrMrsZ0Ln7rok2KDTsUt-PK6gaJPc",
+            kty: "OKP"
+        }
+    },
+];
+
+var missingJWKFieldKeyData = [
+    {
+        param: "x",
+        data: {
+            crv: "Ed25519",
+            d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8",
+            kty: "OKP"
+        },
+    },
+    {
+        param: "kty",
+        data: {
+            crv: "Ed25519",
+            x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo",
+            d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8",
+        },
+    },
+    {
+        param: "crv",
+        data: {
+            x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo",
+            kty: "OKP"
+        },
+    }
+];
+
+// The public key doesn't match the private key.
+var invalidJWKKeyData = [
+    {
+        crv: "Ed25519",
+        d: "88j0xI34eBRujNO_bfTlDjibpwdOFcI1Lc1dMI1MqB8",
+        x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo",
+        kty: "OKP"
+    },
+];
+
+run_test(["Ed25519"]);
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any-expected.txt
new file mode 100644
index 0000000..be65958
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any-expected.txt
@@ -0,0 +1,202 @@
+This is a testharness.js-based test.
+Found 198 tests; 0 PASS, 198 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: Ed448}, true, [verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: Ed448}, false, [verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: Ed448}, true, [verify, verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: Ed448}, false, [verify, verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: Ed448}, true, [sign]) assert_equals: Bad key length not supported. expected "DataError" but got "TypeError"
+FAIL Bad key length: importKey(pkcs8, {name: Ed448}, false, [sign]) assert_equals: Bad key length not supported. expected "DataError" but got "TypeError"
+FAIL Bad key length: importKey(pkcs8, {name: Ed448}, true, [sign, sign]) assert_equals: Bad key length not supported. expected "DataError" but got "TypeError"
+FAIL Bad key length: importKey(pkcs8, {name: Ed448}, false, [sign, sign]) assert_equals: Bad key length not supported. expected "DataError" but got "TypeError"
+FAIL Bad key length: importKey(jwk(private), {name: Ed448}, true, [sign]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: Ed448}, false, [sign]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: Ed448}, true, [sign, sign]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: Ed448}, false, [sign, sign]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: Ed448}, true, [verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: Ed448}, false, [verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: Ed448}, true, [verify, verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: Ed448}, false, [verify, verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: Ed448}, true, [sign]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: Ed448}, false, [sign]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: Ed448}, true, [sign, sign]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: Ed448}, false, [sign, sign]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: Ed448}, true, [sign]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: Ed448}, false, [sign]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: Ed448}, true, [sign, sign]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: Ed448}, false, [sign, sign]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk(private), {name: Ed448}, true, [sign]) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk(private), {name: Ed448}, false, [sign]) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk(private), {name: Ed448}, true, [sign, sign]) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk(private), {name: Ed448}, false, [sign, sign]) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: Ed448}, true, [sign]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: Ed448}, true, [sign, sign]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js
new file mode 100644
index 0000000..6b95980
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.js
@@ -0,0 +1,105 @@
+// META: title=WebCryptoAPI: importKey() for Failures
+// META: timeout=long
+// META: script=../util/helpers.js
+// META: script=okp_importKey_failures.js
+
+// Setup: define the correct behaviors that should be sought, and create
+// helper functions that generate all possible test parameters for
+// different situations.
+var validKeyData = [
+    {
+        format: "spki",
+        data: new Uint8Array([48, 67, 48, 5, 6, 3, 43, 101, 113, 3, 58, 0, 171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90, 128]),
+    },
+    {
+        format: "pkcs8",
+        data: new Uint8Array([48, 71, 2, 1, 0, 48, 5, 6, 3, 43, 101, 113, 4, 59, 4, 57, 14, 255, 3, 69, 140, 40, 224, 23, 156, 82, 29, 227, 18, 201, 105, 183, 131, 67, 72, 236, 171, 153, 26, 96, 227, 178, 233, 167, 158, 76, 217, 228, 128, 239, 41, 23, 18, 210, 200, 61, 4, 114, 114, 213, 201, 244, 40, 102, 79, 105, 109, 38, 112, 69, 143, 29, 46]),
+    },
+    {
+        format: "jwk",
+        data: {
+            crv: "Ed448",
+            d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u",
+            x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA",
+            kty: "OKP"
+        },
+    },
+    {
+        format: "jwk",
+        data: {
+          crv: "Ed448",
+            x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA",
+            kty: "OKP"
+        },
+    },
+];
+
+// Removed just the last byte.
+var badKeyLengthData = [
+    {
+        format: "spki",
+        data: new Uint8Array([48, 67, 48, 5, 6, 3, 43, 101, 113, 3, 58, 0, 171, 75, 184, 133, 253, 125, 44, 90, 242, 78, 131, 113, 12, 255, 160, 199, 74, 87, 226, 116, 128, 29, 178, 5, 123, 11, 220, 94, 160, 50, 182, 254, 107, 199, 139, 128, 69, 54, 90, 235, 38, 232, 110, 31, 20, 253, 52, 157, 7, 196, 132, 149, 245, 164, 106, 90]),
+    },
+    {
+        format: "pkcs8",
+        pkcs8: new Uint8Array([48, 71, 2, 1, 0, 48, 5, 6, 3, 43, 101, 113, 4, 59, 4, 57, 14, 255, 3, 69, 140, 40, 224, 23, 156, 82, 29, 227, 18, 201, 105, 183, 131, 67, 72, 236, 171, 153, 26, 96, 227, 178, 233, 167, 158, 76, 217, 228, 128, 239, 41, 23, 18, 210, 200, 61, 4, 114, 114, 213, 201, 244, 40, 102, 79, 105, 109, 38, 112, 69, 143, 29]),
+    },
+    {
+        format: "jwk",
+        data: {
+            crv: "Ed448",
+            d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0",
+            x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA",
+            kty: "OKP"
+        },
+    },
+    {
+        format: "jwk",
+        data: {
+          crv: "Ed448",
+            x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalq",
+            kty: "OKP"
+        },
+    },
+];
+
+var missingJWKFieldKeyData = [
+    {
+        param: "x",
+        data: {
+            crv: "Ed448",
+            d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u",
+            kty: "OKP"
+        }
+    },
+    {
+        param: "kty",
+        data: {
+            crv: "Ed448",
+            d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u",
+            x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA",
+        }
+    },
+    {
+        param: "crv",
+        data: {
+            d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u",
+            x: "q0u4hf19LFryToNxDP-gx0pX4nSAHbIFewvcXqAytv5rx4uARTZa6ybobh8U_TSdB8SElfWkalqA",
+            kty: "OKP"
+        }
+    }
+];
+
+// The public key doesn't match the private key.
+var invalidJWKKeyData = [
+    {
+        data: {
+            crv: "Ed448",
+            d: "Dv8DRYwo4BecUh3jEslpt4NDSOyrmRpg47Lpp55M2eSA7ykXEtLIPQRyctXJ9ChmT2ltJnBFjx0u",
+            x: "X9dEm1m0Yf0s54fsYWrUah2hNCSFpw4fig6nXYDpZ3jt8SR2m0bHBhvWeD3x5Q9s0foavq_oJWGA",
+            kty: "OKP"
+        }
+    },
+];
+
+run_test(["Ed448"]);
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.worker-expected.txt
new file mode 100644
index 0000000..be65958
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_Ed448.https.any.worker-expected.txt
@@ -0,0 +1,202 @@
+This is a testharness.js-based test.
+Found 198 tests; 0 PASS, 198 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, true, [verify, verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: Ed448}, false, [verify, verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, true, [sign, sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: Ed448}, false, [sign, sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, true, [sign, sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: Ed448}, false, [sign, sign, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, true, [verify, verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: Ed448}, false, [verify, verify, deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: Ed448}, true, [verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: Ed448}, false, [verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: Ed448}, true, [verify, verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: Ed448}, false, [verify, verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: Ed448}, true, [sign]) assert_equals: Bad key length not supported. expected "DataError" but got "TypeError"
+FAIL Bad key length: importKey(pkcs8, {name: Ed448}, false, [sign]) assert_equals: Bad key length not supported. expected "DataError" but got "TypeError"
+FAIL Bad key length: importKey(pkcs8, {name: Ed448}, true, [sign, sign]) assert_equals: Bad key length not supported. expected "DataError" but got "TypeError"
+FAIL Bad key length: importKey(pkcs8, {name: Ed448}, false, [sign, sign]) assert_equals: Bad key length not supported. expected "DataError" but got "TypeError"
+FAIL Bad key length: importKey(jwk(private), {name: Ed448}, true, [sign]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: Ed448}, false, [sign]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: Ed448}, true, [sign, sign]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: Ed448}, false, [sign, sign]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: Ed448}, true, [verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: Ed448}, false, [verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: Ed448}, true, [verify, verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: Ed448}, false, [verify, verify]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: Ed448}, true, [sign]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: Ed448}, false, [sign]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: Ed448}, true, [sign, sign]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: Ed448}, false, [sign, sign]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: Ed448}, true, [sign]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: Ed448}, false, [sign]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: Ed448}, true, [sign, sign]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: Ed448}, false, [sign, sign]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk(private), {name: Ed448}, true, [sign]) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk(private), {name: Ed448}, false, [sign]) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk(private), {name: Ed448}, true, [sign, sign]) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk(private), {name: Ed448}, false, [sign, sign]) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: Ed448}, true, [sign]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: Ed448}, true, [sign, sign]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any-expected.txt
new file mode 100644
index 0000000..f491ded
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any-expected.txt
@@ -0,0 +1,198 @@
+This is a testharness.js-based test.
+Found 194 tests; 0 PASS, 194 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: X25519}, true, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: X25519}, false, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: X25519}, true, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: X25519}, false, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X25519}, true, []) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X25519}, false, []) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveKey]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveBits]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js
new file mode 100644
index 0000000..fe5fd54d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.js
@@ -0,0 +1,102 @@
+// META: title=WebCryptoAPI: importKey() for Failures
+// META: timeout=long
+// META: script=../util/helpers.js
+// META: script=okp_importKey_failures.js
+
+// Setup: define the correct behaviors that should be sought, and create
+// helper functions that generate all possible test parameters for
+// different situations.
+var validKeyData = [
+    {
+      format: "spki",
+      data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]),
+    },
+    {
+      format: "pkcs8",
+      data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255, 97]),
+    },
+    {
+      format: "jwk",
+      data: {
+          crv: "X25519",
+          d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E",
+          x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY",
+          kty: "OKP"
+      },
+    },
+    {
+      format: "jwk",
+      data: {
+          crv: "X25519",
+          x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY",
+          kty: "OKP"
+      },
+    },
+];
+
+// Removed just the last byte.
+var badKeyLengthData = [
+    {
+        format: "spki",
+        data: new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151]),
+    },
+    {
+        format: "pkcs8",
+        data: new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255]),
+    },
+    {
+        format: "jwk",
+        data: {
+            crv: "X25519",
+            x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lw",
+            kty: "OKP"
+        }
+    },
+    {
+      format: "jwk",
+      data: {
+          crv: "X25519",
+          d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2",
+          x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY",
+          kty: "OKP"
+      },
+    },
+];
+
+var missingJWKFieldKeyData = [
+    {
+        param: "x",
+        data: {
+            crv: "X25519",
+            d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E",
+            kty: "OKP"
+        },
+    },
+    {
+        param: "kty",
+        data: {
+            crv: "X25519",
+            d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E",
+            x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY",
+        },
+    },
+    {
+        param: "crv",
+        data: {
+            x: "HPKx5gIuxTc3Htf1PlT6EVTYPpjrZOpR-uWzMHz-lwY",
+            kty: "OKP"
+        },
+    }
+];
+
+// The public key doesn't match the private key.
+var invalidJWKKeyData = [
+    {
+        crv: "X25519",
+        d: "yIOOdtBX37fYyVpp4TgWCt1jc_1xpNJ2u1bjqBtk_2E",
+        x: "hSDwCYkwp1R0i33ctD73Wg2_Og0mOBr066SpjqqbTmo",
+        kty: "OKP"
+    },
+];
+
+run_test(["X25519"]);
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.worker-expected.txt
new file mode 100644
index 0000000..f491ded
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X25519.https.any.worker-expected.txt
@@ -0,0 +1,198 @@
+This is a testharness.js-based test.
+Found 194 tests; 0 PASS, 194 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X25519}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X25519}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: X25519}, true, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: X25519}, false, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: X25519}, true, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: X25519}, false, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X25519}, true, []) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X25519}, false, []) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveKey]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveBits]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any-expected.txt
new file mode 100644
index 0000000..f8e95ade
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any-expected.txt
@@ -0,0 +1,198 @@
+This is a testharness.js-based test.
+Found 194 tests; 0 PASS, 194 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL Bad usages: importKey(spki, {name: X448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: X448}, true, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: X448}, false, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, true, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, false, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, true, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, false, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, true, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, false, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, true, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, false, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: X448}, true, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: X448}, false, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X448}, true, []) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X448}, false, []) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveKey]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveBits]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js
new file mode 100644
index 0000000..3b08cfe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js
@@ -0,0 +1,104 @@
+// META: title=WebCryptoAPI: importKey() for Failures
+// META: timeout=long
+// META: script=../util/helpers.js
+// META: script=okp_importKey_failures.js
+
+// Setup: define the correct behaviors that should be sought, and create
+// helper functions that generate all possible test parameters for
+// different situations.
+var validKeyData = [
+    {
+        format: "spki",
+        data: new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111]),
+    },
+    {
+        format: "pkcs8",
+        data: new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146, 158]),
+    },
+    {
+        format: "jwk",
+        data: {
+            crv: "X448",
+            d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp4",
+            x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8",
+            kty: "OKP"
+        },
+    },
+    {
+        format: "jwk",
+        data: {
+          crv: "X448",
+            x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8",
+            kty: "OKP"
+        },
+    },
+];
+
+// Removed just the last byte.
+var badKeyLengthData = [
+    {
+        format: "spki",
+        data: new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206]),
+    },
+    {
+        format: "pkcs8",
+        data: new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146]),
+    },
+    {
+        format: "jwk",
+        data: {
+            crv: "X448",
+            d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp",
+            x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8",
+            kty: "OKP"
+        },
+    },
+    {
+        format: "jwk",
+        data: {
+            crv: "X448",
+            x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm",
+            kty: "OKP"
+        },
+    },
+];
+
+var missingJWKFieldKeyData = [
+    {
+        param: "x",
+        data: {
+            crv: "X448",
+            d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp",
+            kty: "OKP"
+        }
+    },
+    {
+        param: "kty",
+        data: {
+            crv: "X448",
+            d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp",
+            x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8",
+        }
+    },
+    {
+        param: "crv",
+        data: {
+            x: "tgSh0aXNHZQm1WHvYwqesWy-adW5ymFe3FNjPvtS6jHm5qCh26zG52y85kgtfkuj1V2egCdlzm8",
+            kty: "OKP"
+        }
+    }
+];
+
+// The public key doesn't match the private key.
+var invalidJWKKeyData = [
+    {
+        data: {
+            crv: "X448",
+            kty: "OKP",
+            d: "WMfSmj61GbKdAM-xkbtk_G2KQtjxcXYnK4nyJy0YGSlcZSXAgpZxsFLvBydTDxiOMdDMU78mkp",
+            x: "mwj3zDG34+Z9ItWuoSEHSic70rg94Jxj+qc9LCLF2bvINmRyQdlT1AxbEtqIEg1TF3+A5TLEH6A",
+        }
+    },
+];
+
+run_test(["X448"]);
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.worker-expected.txt
new file mode 100644
index 0000000..f8e95ade
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.worker-expected.txt
@@ -0,0 +1,198 @@
+This is a testharness.js-based test.
+Found 194 tests; 0 PASS, 194 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL Bad usages: importKey(spki, {name: X448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(spki, {name: X448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [encrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [decrypt]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [sign]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [verify]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [wrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [unwrapKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [deriveKey]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, true, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: importKey(jwk (public) , {name: X448}, false, [deriveBits]) assert_equals: Bad usages not supported. expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: X448}, true, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(spki, {name: X448}, false, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, true, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, false, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, true, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, false, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, true, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, false, [deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, true, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, false, [deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: X448}, true, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Bad key length: importKey(jwk (public) , {name: X448}, false, []) assert_equals: Bad key length not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'x' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Missing JWK 'kty' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X448}, true, []) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X448}, false, []) assert_equals: Missing JWK 'crv' parameter not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveKey]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveBits, deriveKey]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveBits]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+FAIL Invalid key pair: importKey(jwk (public) , {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) assert_equals: Invalid key pair not supported. expected "DataError" but got "NotSupportedError"
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js
index f7e135c..65e640a 100644
--- a/third_party/blink/web_tests/external/wpt/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js
+++ b/third_party/blink/web_tests/external/wpt/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.js
@@ -58,7 +58,8 @@
             }
         ];
 
-        return Promise.all(parameters.map(function(params) {
+        // Using allSettled to skip unsupported test cases.
+        return Promise.allSettled(parameters.map(function(params) {
             return subtle.generateKey(params.generateParameters, true, ["wrapKey", "unwrapKey"])
             .then(function(key) {
                 var wrapper;
@@ -81,6 +82,7 @@
             {algorithm: {name: "RSA-OAEP", modulusLength: 1024, publicExponent: new Uint8Array([1,0,1]), hash: "SHA-256"}, privateUsages: ["decrypt"], publicUsages: ["encrypt"]},
             {algorithm: {name: "ECDSA", namedCurve: "P-256"}, privateUsages: ["sign"], publicUsages: ["verify"]},
             {algorithm: {name: "ECDH", namedCurve: "P-256"}, privateUsages: ["deriveBits"], publicUsages: []},
+            {algorithm: {name: "Ed25519" }, privateUsages: ["sign"], publicUsages: ["verify"]},
             {algorithm: {name: "AES-CTR", length: 128}, usages: ["encrypt", "decrypt"]},
             {algorithm: {name: "AES-CBC", length: 128}, usages: ["encrypt", "decrypt"]},
             {algorithm: {name: "AES-GCM", length: 128}, usages: ["encrypt", "decrypt"]},
@@ -88,7 +90,8 @@
             {algorithm: {name: "HMAC", length: 128, hash: "SHA-256"}, usages: ["sign", "verify"]}
         ];
 
-        return Promise.all(parameters.map(function(params) {
+        // Using allSettled to skip unsupported test cases.
+        return Promise.allSettled(parameters.map(function(params) {
             var usages;
             if ("usages" in params) {
                 usages = params.usages;
@@ -380,6 +383,9 @@
             case "ECDSA" :
                 signParams = {name: "ECDSA", hash: "SHA-256"};
                 break;
+            case "Ed25519" :
+                signParams = {name: "Ed25519"};
+                break;
             case "HMAC" :
                 signParams = {name: "HMAC"};
                 break;
@@ -416,7 +422,7 @@
                 if (expected.algorithm.name === "RSA-PSS" || expected.algorithm.name === "RSASSA-PKCS1-v1_5") {
                     ["d","p","q","dp","dq","qi","oth"].forEach(function(field){ delete jwkExpectedKey[field]; });
                 }
-                if (expected.algorithm.name === "ECDSA") {
+                if (expected.algorithm.name === "ECDSA" || expected.algorithm.name === "Ed25519") {
                     delete jwkExpectedKey["d"];
                 }
                 jwkExpectedKey.key_ops = ["verify"];
diff --git a/third_party/blink/web_tests/external/wpt/beacon/OWNERS b/third_party/blink/web_tests/external/wpt/beacon/OWNERS
deleted file mode 100644
index c82b6c02..0000000
--- a/third_party/blink/web_tests/external/wpt/beacon/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-file://third_party/blink/renderer/modules/beacon/OWNERS
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-hidden.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-hidden.html
new file mode 100644
index 0000000..cbe3440
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/background-attachment-local-hidden.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<title>CSS Test: 'overflow: hidden' of 'Background-attachment' with value 'local'</title>
+<meta name="fuzzy" content="maxDifference=0-60; totalPixels=0-394">
+<link rel="author" title="Lin peng" href="mailto:penglin22@huawei.com" />
+<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#the-background-attachment" />
+<link rel="match" href="reference/background-attachment-local-hidden-ref.html">
+<style type="text/css">
+  div {
+    border: 10px solid rgba(255,0,0,0.5);
+    width: 100px;
+    height: 100px;
+    border-radius: 40px;
+    background-color: lightblue;
+    overflow: hidden;
+    background-attachment: local;
+  }
+</style>
+<div></div>
\ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-hidden-ref.html b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-hidden-ref.html
new file mode 100644
index 0000000..fc593c23
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-backgrounds/reference/background-attachment-local-hidden-ref.html
@@ -0,0 +1,23 @@
+<!doctype HTML>
+<style>
+  .outer {
+    position:relative;
+    width: 120px;
+    height: 120px;
+    border-radius: 40px;
+    background-color: rgba(255,0,0,0.5);
+  }
+
+  .inner {
+    position:absolute;
+    top:10px;
+    left:10px;
+    width: 100px;
+    height: 100px;
+    border-radius: 30px;
+    background-color: lightblue;
+  }
+</style>
+<div class = "outer">
+    <div class = "inner"></div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html
new file mode 100644
index 0000000..d5135be
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-new.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: element in top layer during transition</title>
+<link rel="help" href="https://github.com/WICG/view-transitions">
+<link rel="author" href="mailto:khushalsagar@chromium.org">
+<link rel="match" href="dialog-in-top-layer-during-transition-ref.html">
+
+<script src="/common/reftest-wait.js"></script>
+<style>
+#target {
+  width: 100px;
+  height: 100px;
+  background: lightblue;
+
+  border: unset;
+  margin: 0;
+  padding: 0;
+
+  view-transition-name: dialog;
+  contain: layout;
+}
+
+#target::backdrop {
+  width: 100px;
+  height: 100px;
+  background: grey;
+
+  view-transition-name: backdrop;
+  contain: layout;
+}
+
+.hidden {
+  contain: paint;
+  width: 10px;
+  height: 10px;
+  background: grey;
+  view-transition-name: hidden;
+}
+
+html::view-transition-group(hidden) { animation-duration: 300s; }
+html::view-transition-image-pair(hidden) { animation: unset; opacity: 0; }
+
+html::view-transition-group(backdrop) {
+  position: fixed;
+  top: 120px;
+  left: 0;
+}
+
+html::view-transition-new(backdrop), html::view-transition-new(dialog) {
+  opacity: 1;
+  animation: unset;
+}
+</style>
+
+<dialog id="target"></dialog>
+<div id=hidden class=hidden></div>
+
+<script>
+async function runTest() {
+  const transition = document.startViewTransition(() => {
+    target.showModal();
+    target.style.background = "lightgreen";
+  });
+  await transition.ready;
+  takeScreenshot();
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html
new file mode 100644
index 0000000..da4bcf13
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-old.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html class=reftest-wait>
+<title>View transitions: element in top layer during transition</title>
+<link rel="help" href="https://github.com/WICG/view-transitions">
+<link rel="author" href="mailto:khushalsagar@chromium.org">
+<link rel="match" href="dialog-in-top-layer-during-transition-ref.html">
+
+<script src="/common/reftest-wait.js"></script>
+<style>
+#target {
+  width: 100px;
+  height: 100px;
+  background: lightgreen;
+
+  border: unset;
+  margin: 0;
+  padding: 0;
+
+  view-transition-name: dialog;
+  contain: layout;
+}
+
+#target::backdrop {
+  width: 100px;
+  height: 100px;
+  background: grey;
+
+  view-transition-name: backdrop;
+  contain: layout;
+}
+
+.hidden {
+  contain: paint;
+  width: 10px;
+  height: 10px;
+  background: grey;
+  view-transition-name: hidden;
+}
+
+html::view-transition-group(hidden) { animation-duration: 300s; }
+html::view-transition-image-pair(hidden) { animation: unset; opacity: 0; }
+
+html::view-transition-group(backdrop) {
+  position: fixed;
+  top: 120px;
+  left: 0;
+}
+
+html::view-transition-old(backdrop), html::view-transition-old(dialog) {
+  opacity: 1;
+  animation: unset;
+}
+</style>
+
+<dialog id="target"></dialog>
+<div id=hidden class=hidden></div>
+
+<script>
+async function runTest() {
+  target.showModal();
+  const transition = document.startViewTransition(() => {
+    target.close();
+    target.style.background = "lightblue";
+  });
+  await transition.ready;
+  takeScreenshot();
+}
+onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest));
+</script>
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-ref.html b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-ref.html
new file mode 100644
index 0000000..4146767
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-view-transitions/dialog-in-top-layer-during-transition-ref.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<title>View transitions: element in top layer during transition (ref)</title>
+<link rel="help" href="https://github.com/WICG/view-transitions">
+<link rel="author" href="mailto:khushalsagar@chromium.org">
+
+<style>
+div {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100px;
+  height: 100px;
+}
+
+.dialog {
+  background: lightgreen;
+}
+
+.backdrop {
+  background: grey;
+  top: 120px;
+}
+
+</style>
+<div class="dialog"></div>
+<div class="backdrop"></div>
+
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-form-detach-style-crash.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-form-detach-style-crash.html
new file mode 100644
index 0000000..5472563
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-form-detach-style-crash.html
@@ -0,0 +1,17 @@
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1800543">
+<script>
+document.addEventListener('DOMContentLoaded', () => {
+  b.setCustomValidity("x")
+  a.reportValidity()
+  c.appendChild(a)
+  document.adoptNode(d)
+  document.documentElement.style.display = 'none'
+})
+</script>
+<form id="a">
+<textarea id="b">a</textarea>
+</form>
+<dl id="d">
+<canvas id="c"></canvas>
+</dl>
+<input form="a">
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-contain-ancestor.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-contain-ancestor.html
new file mode 100644
index 0000000..98835cb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-contain-ancestor.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<title>Test that a fixed positioned child of a dialog is aligned to the viewport</title>
+<head>
+<link rel="match" href="fixed-position-child-with-fixed-position-cb-ref.html">
+<link rel="help" href="https://fullscreen.spec.whatwg.org/#new-stacking-layer">
+<style>
+::backdrop {
+    display: none;
+}
+</style>
+</head>
+<body>
+<div style="contain: layout">
+    <dialog id="dialog">
+        Dialog should be centered.
+        <div style="position: fixed; top: 0px; left: 0px">This fixed positioned element is aligned to viewport top-left.</div>
+    </dialog>
+</div>
+<script>
+dialog.showModal();
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fixed-position-cb-ref.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fixed-position-cb-ref.html
new file mode 100644
index 0000000..d973c08
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fixed-position-cb-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<title>Test that a fixed positioned child of a dialog is aligned to the viewport</title>
+<head>
+<link rel="stylesheet" href="resources/dialog.css">
+</head>
+<style>
+</style>
+<body>
+<div class="pseudodialog" style="position: fixed">
+Dialog should be centered.
+</div>
+<div style="position: fixed; top: 0px; left: 0px">This fixed positioned element is aligned to viewport top-left.</div>
+</div>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fo-ancestor.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fo-ancestor.html
new file mode 100644
index 0000000..fe625f1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-fo-ancestor.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<title>Test that a fixed positioned child of a dialog is aligned to the viewport</title>
+<head>
+<link rel="match" href="fixed-position-child-with-fixed-position-cb-ref.html">
+<link rel="help" href="https://fullscreen.spec.whatwg.org/#new-stacking-layer">
+<style>
+::backdrop {
+    display: none;
+}
+</style>
+</head>
+<body>
+<svg>
+  <foreignObject>
+    <dialog id="dialog">
+        Dialog should be centered.
+        <div style="position: fixed; top: 0px; left: 0px">This fixed positioned element is aligned to viewport top-left.</div>
+    </dialog>
+  </foreignObject>
+</svg>
+<script>
+dialog.showModal();
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html
new file mode 100644
index 0000000..5862744
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-transformed-ancestor.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<title>Test that a fixed positioned child of a dialog is aligned to the viewport</title>
+<head>
+<link rel="match" href="fixed-position-child-with-fixed-position-cb-ref.html">
+<link rel="help" href="https://fullscreen.spec.whatwg.org/#new-stacking-layer">
+<style>
+::backdrop {
+    display: none;
+}
+</style>
+</head>
+<body>
+<div style="scale: 1">
+    <dialog id="dialog">
+        Dialog should be centered.
+        <div style="position: fixed; top: 0px; left: 0px">This fixed positioned element is aligned to viewport top-left.</div>
+    </dialog>
+</div>
+<script>
+dialog.showModal();
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html
new file mode 100644
index 0000000..14f4391
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/interactive-elements/the-dialog-element/fixed-position-child-with-will-change-ancestor.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<title>Test that a fixed positioned child of a dialog is aligned to the viewport</title>
+<head>
+<link rel="match" href="fixed-position-child-with-fixed-position-cb-ref.html">
+<link rel="help" href="https://fullscreen.spec.whatwg.org/#new-stacking-layer">
+<style>
+::backdrop {
+    display: none;
+}
+</style>
+</head>
+<body>
+<div style="will-change: transform">
+    <dialog id="dialog">
+        Dialog should be centered.
+        <div style="position: fixed; top: 0px; left: 0px">This fixed positioned element is aligned to viewport top-left.</div>
+    </dialog>
+</div>
+<script>
+dialog.showModal();
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/mediacapture-streams/parallel-capture-requests.https.html b/third_party/blink/web_tests/external/wpt/mediacapture-streams/parallel-capture-requests.https.html
new file mode 100644
index 0000000..01b7f32
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/mediacapture-streams/parallel-capture-requests.https.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html>
+<head>
+<title>Parallel capture requests</title>
+</head>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+promise_test(function() {
+  const getUserMediaPromise =
+        navigator.mediaDevices.getUserMedia({audio: true, video:true});
+  const getDisplayMediaPromise =
+        navigator.mediaDevices.getDisplayMedia({video: true, audio: true});
+  return Promise.all([getUserMediaPromise, getDisplayMediaPromise])
+      .then(function(s) {
+        assert_equals(s[0].getTracks().length, 2);
+        assert_equals(s[0].getAudioTracks().length, 1);
+        assert_equals(s[0].getVideoTracks().length, 1);
+        assert_equals(s[1].getTracks().length, 2);
+        assert_equals(s[1].getAudioTracks().length, 1);
+        assert_equals(s[1].getVideoTracks().length, 1);
+      });
+}, 'getDisplayMedia() and parallel getUserMedia()');
+
+promise_test(function() {
+  const getDisplayMediaPromise =
+        navigator.mediaDevices.getDisplayMedia({video: true, audio: true});
+  const getUserMediaPromise =
+        navigator.mediaDevices.getUserMedia({audio: true, video:true});
+  return Promise.all([getDisplayMediaPromise, getUserMediaPromise])
+      .then(function(s) {
+        assert_equals(s[0].getTracks().length, 2);
+        assert_equals(s[0].getAudioTracks().length, 1);
+        assert_equals(s[0].getVideoTracks().length, 1);
+        assert_equals(s[1].getTracks().length, 2);
+        assert_equals(s[1].getAudioTracks().length, 1);
+        assert_equals(s[1].getVideoTracks().length, 1);
+      });
+}, 'getUserMedia() and parallel getDisplayMedia()');
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time-vertical-rl.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time-vertical-rl.tentative.html
index d729f807..5bc4598 100644
--- a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time-vertical-rl.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time-vertical-rl.tentative.html
@@ -2,8 +2,7 @@
 <html id="top">
 <meta charset="utf-8">
 <title>View timeline current-time with vertical-rl writing mode</title>
-<!-- TODO(crbug.com/1329159): Update link once ratified -->
-<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface">
+<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#viewtimeline-interface">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/web-animations/testcommon.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time.tentative.html
index 878b4a54..a6530f6 100644
--- a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time.tentative.html
@@ -2,8 +2,7 @@
 <html id="top">
 <meta charset="utf-8">
 <title>View timeline current-time</title>
-<!-- TODO(crbug.com/1329159): Update link once ratified -->
-<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface">
+<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#viewtimeline-interface">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/web-animations/testcommon.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-nested-subject.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-nested-subject.tentative.html
index 720b33aa..2cc8af8 100644
--- a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-nested-subject.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-nested-subject.tentative.html
@@ -2,8 +2,7 @@
 <html id="top">
 <meta charset="utf-8">
 <title>View timeline nested subject</title>
-<!-- TODO(crbug.com/1329159): Update link once ratified -->
-<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface">
+<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#viewtimeline-interface">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/web-animations/testcommon.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html
index 080c1c6e..412145b 100644
--- a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html
@@ -2,8 +2,7 @@
 <html id="top">
 <meta charset="utf-8">
 <title>View timeline current-time</title>
-<!-- TODO(crbug.com/1329159): Update link once ratified -->
-<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface">
+<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#viewtimeline-interface">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/web-animations/testcommon.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/view-timeline-source.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/view-timeline-source.tentative.html
index 15fbdb5..f8aabc8 100644
--- a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/view-timeline-source.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/view-timeline-source.tentative.html
@@ -2,8 +2,7 @@
 <html id="top">
 <meta charset="utf-8">
 <title>View timeline source</title>
-<!-- TODO(crbug.com/1329159): Update link once ratified -->
-<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface">
+<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/#viewtimeline-interface">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/web-animations/testcommon.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles.html b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles.html
index f16412fb..9a7dbea 100644
--- a/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles.html
+++ b/third_party/blink/web_tests/external/wpt/web-animations/interfaces/Animation/commitStyles.html
@@ -42,6 +42,30 @@
   assert_numeric_style_equals(getComputedStyle(div).opacity, 0.2);
 }, 'Commits styles');
 
+test(t => {
+  const div = createDiv(t);
+  div.style.translate = '100px';
+  div.style.rotate = '45deg';
+  div.style.scale = '2';
+
+  const animation = div.animate(
+    { translate: '200px',
+      rotate: '90deg',
+      scale: 3 },
+    { duration: 1, fill: 'forwards' }
+  );
+  animation.finish();
+
+  animation.commitStyles();
+
+  // Cancel the animation so we can inspect the underlying style
+  animation.cancel();
+
+  assert_equals(getComputedStyle(div).translate, '200px');
+  assert_equals(getComputedStyle(div).rotate, '90deg');
+  assert_numeric_style_equals(getComputedStyle(div).scale, 3);
+}, 'Commits styles for individual transform properties');
+
 promise_test(async t => {
   const div = createDiv(t);
   div.style.opacity = '0.1';
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/toJSON.html b/third_party/blink/web_tests/external/wpt/webrtc/toJSON.html
new file mode 100644
index 0000000..26d6552d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/webrtc/toJSON.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<title>WebRTC objects toJSON()</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+'use strict';
+
+test(t => {
+  const candidate = new RTCIceCandidate({
+    sdpMLineIndex: 0,
+    sdpMid: '0',
+    candidate: 'candidate:1905690388 1 udp 2113937151 192.168.0.1 58041 typ host',
+    usernameFragment: 'test'
+  });
+  const json = candidate.toJSON();
+
+  // Assert that candidates which should be serialized are present.
+  assert_equals(json.sdpMLineIndex, candidate.sdpMLineIndex);
+  assert_equals(json.sdpMid, candidate.sdpMid);
+  assert_equals(json.candidate, candidate.candidate);
+  assert_equals(json.usernameFragment, candidate.usernameFragment);
+
+  // Assert that no other attributes are present by checking the size.
+  assert_equals(Object.keys(json).length, 4);
+
+}, 'RTCIceCandidate.toJSON serializes only specific attributes');
+
+</script>
diff --git a/third_party/blink/web_tests/virtual/split-user-media-queues/README.md b/third_party/blink/web_tests/virtual/split-user-media-queues/README.md
new file mode 100644
index 0000000..d37554b7
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/split-user-media-queues/README.md
@@ -0,0 +1,2 @@
+Tests run with the browser feature SplitUserMediaQueues enabled.
+See crbug.com/1373032.
diff --git a/third_party/blink/web_tests/virtual/split-user-media-queues/external/wpt/mediacapture-streams/README.txt b/third_party/blink/web_tests/virtual/split-user-media-queues/external/wpt/mediacapture-streams/README.txt
new file mode 100644
index 0000000..d37554b7
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/split-user-media-queues/external/wpt/mediacapture-streams/README.txt
@@ -0,0 +1,2 @@
+Tests run with the browser feature SplitUserMediaQueues enabled.
+See crbug.com/1373032.
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index fa9f7ae..e20ff5b 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -10814,7 +10814,6 @@
     getter top
     getter trustedTypes
     getter visualViewport
-    getter webkitStorageInfo
     getter window
     method NodeFilter
     method alert
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 5137cda..b7cf07b3 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -11205,6 +11205,21 @@
     getter height
     getter width
     method constructor
+interface XRCompositionLayer : XRLayer
+    attribute @@toStringTag
+    getter blendTextureSourceAlpha
+    getter chromaticAberrationCorrection
+    getter forceMonoPresentation
+    getter layout
+    getter mipLevels
+    getter needsRedraw
+    getter opacity
+    method constructor
+    method destroy
+    setter blendTextureSourceAlpha
+    setter chromaticAberrationCorrection
+    setter forceMonoPresentation
+    setter opacity
 interface XRDOMOverlayState
     attribute @@toStringTag
     getter type
@@ -11334,6 +11349,17 @@
     getter emulatedPosition
     getter transform
     method constructor
+interface XRProjectionLayer : XRCompositionLayer
+    attribute @@toStringTag
+    getter deltaPose
+    getter fixedFoveation
+    getter ignoreDepthValues
+    getter textureArrayLength
+    getter textureHeight
+    getter textureWidth
+    method constructor
+    setter deltaPose
+    setter fixedFoveation
 interface XRRay
     attribute @@toStringTag
     getter direction
@@ -11357,6 +11383,7 @@
     getter depthFar
     getter depthNear
     getter inlineVerticalFieldOfView
+    getter layers
     method constructor
 interface XRRigidTransform
     attribute @@toStringTag
@@ -11411,6 +11438,10 @@
 interface XRSpace : EventTarget
     attribute @@toStringTag
     method constructor
+interface XRSubImage
+    attribute @@toStringTag
+    getter viewport
+    method constructor
 interface XRSystem : EventTarget
     attribute @@toStringTag
     getter ondevicechange
@@ -11451,10 +11482,14 @@
     method constructor
 interface XRWebGLBinding
     attribute @@toStringTag
+    getter nativeProjectionScaleFactor
+    getter usesDepthValues
     method constructor
+    method createProjectionLayer
     method getCameraImage
     method getDepthInformation
     method getReflectionCubeMap
+    method getViewSubImage
 interface XRWebGLDepthInformation : XRDepthInformation
     attribute @@toStringTag
     getter texture
@@ -11469,6 +11504,19 @@
     getter ignoreDepthValues
     method constructor
     method getViewport
+interface XRWebGLSubImage : XRSubImage
+    attribute @@toStringTag
+    getter colorTexture
+    getter colorTextureHeight
+    getter colorTextureWidth
+    getter depthStencilTexture
+    getter depthStencilTextureHeight
+    getter depthStencilTextureWidth
+    getter imageIndex
+    getter motionVectorTexture
+    getter motionVectorTextureHeight
+    getter motionVectorTextureWidth
+    method constructor
 interface XSLTProcessor
     attribute @@toStringTag
     method clearParameters
diff --git a/third_party/libpng/BUILD.gn b/third_party/libpng/BUILD.gn
index e547ef4c..2db35ea 100644
--- a/third_party/libpng/BUILD.gn
+++ b/third_party/libpng/BUILD.gn
@@ -51,7 +51,6 @@
     "pnglibconf.h",
     "pngmem.c",
     "pngpread.c",
-    "pngprefix.h",
     "pngpriv.h",
     "pngread.c",
     "pngrio.c",
diff --git a/third_party/libpng/README.chromium b/third_party/libpng/README.chromium
index 1b5364f..c8887846 100644
--- a/third_party/libpng/README.chromium
+++ b/third_party/libpng/README.chromium
@@ -11,8 +11,6 @@
 
 - Use custom configuration file pnglibconf.h, which turns off all features that
   are not in use.
-- Use custom prefix file pngprefix.h, which avoids namespace conflicts with
-  pdfium's copy of libpng.
 - Configures custom png chunk user limits (crbug.com/117369) in pnglibconf.h.
 - Applies the patch in patches/0001-chunkerror.patch (modify
   png_check_chunk_length to call png_benign_error instead of png_chunk_error --
diff --git a/third_party/libpng/pnglibconf.h b/third_party/libpng/pnglibconf.h
index d25d8c38..505777d 100644
--- a/third_party/libpng/pnglibconf.h
+++ b/third_party/libpng/pnglibconf.h
@@ -225,13 +225,4 @@
 #define PNG_USER_CHUNK_MALLOC_MAX 4000000L
 /* end of chromium settings */
 
-/* chromium prefixing */
-/*
- * This is necessary to build multiple copies of libpng.  We need this while pdfium builds
- * its own copy of libpng.
- */
-#define PNG_PREFIX
-#include "pngprefix.h"
-/* end of chromium prefixing */
-
 #endif /* PNGLCONF_H */
diff --git a/third_party/libpng/pngprefix.h b/third_party/libpng/pngprefix.h
deleted file mode 100644
index 582f006..0000000
--- a/third_party/libpng/pngprefix.h
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef PNGPREFIX_H
-#define PNGPREFIX_H
-
-/*
- * This is necessary to build multiple copies of libpng.  We need this while pdfium has
- * its own copy of libpng.
- */
-
-#define png_access_version_number cr_png_access_version_number
-#define png_app_error cr_png_app_error
-#define png_app_warning cr_png_app_warning
-#define png_ascii_from_fixed cr_png_ascii_from_fixed
-#define png_ascii_from_fp cr_png_ascii_from_fp
-#define png_benign_error cr_png_benign_error
-#define png_build_gamma_table cr_png_build_gamma_table
-#define png_build_grayscale_palette cr_png_build_grayscale_palette
-#define png_calculate_crc cr_png_calculate_crc
-#define png_calloc cr_png_calloc
-#define png_check_IHDR cr_png_check_IHDR
-#define png_check_chunk_length cr_png_check_chunk_length
-#define png_check_chunk_name cr_png_check_chunk_name
-#define png_check_fp_number cr_png_check_fp_number
-#define png_check_fp_string cr_png_check_fp_string
-#define png_check_keyword cr_png_check_keyword
-#define png_chunk_benign_error cr_png_chunk_benign_error
-#define png_chunk_error cr_png_chunk_error
-#define png_chunk_report cr_png_chunk_report
-#define png_chunk_unknown_handling cr_png_chunk_unknown_handling
-#define png_chunk_warning cr_png_chunk_warning
-#define png_colorspace_set_ICC cr_png_colorspace_set_ICC
-#define png_colorspace_set_chromaticities cr_png_colorspace_set_chromaticities
-#define png_colorspace_set_endpoints cr_png_colorspace_set_endpoints
-#define png_colorspace_set_gamma cr_png_colorspace_set_gamma
-#define png_colorspace_set_rgb_coefficients cr_png_colorspace_set_rgb_coefficients
-#define png_colorspace_set_sRGB cr_png_colorspace_set_sRGB
-#define png_colorspace_sync cr_png_colorspace_sync
-#define png_colorspace_sync_info cr_png_colorspace_sync_info
-#define png_combine_row cr_png_combine_row
-#define png_compress_IDAT cr_png_compress_IDAT
-#define png_convert_from_struct_tm cr_png_convert_from_struct_tm
-#define png_convert_from_time_t cr_png_convert_from_time_t
-#define png_convert_to_rfc1123 cr_png_convert_to_rfc1123
-#define png_convert_to_rfc1123_buffer cr_png_convert_to_rfc1123_buffer
-#define png_crc_error cr_png_crc_error
-#define png_crc_finish cr_png_crc_finish
-#define png_crc_read cr_png_crc_read
-#define png_create_info_struct cr_png_create_info_struct
-#define png_create_png_struct cr_png_create_png_struct
-#define png_create_read_struct cr_png_create_read_struct
-#define png_create_read_struct_2 cr_png_create_read_struct_2
-#define png_create_write_struct cr_png_create_write_struct
-#define png_create_write_struct_2 cr_png_create_write_struct_2
-#define png_data_freer cr_png_data_freer
-#define png_default_flush cr_png_default_flush
-#define png_default_read_data cr_png_default_read_data
-#define png_default_write_data cr_png_default_write_data
-#define png_destroy_gamma_table cr_png_destroy_gamma_table
-#define png_destroy_info_struct cr_png_destroy_info_struct
-#define png_destroy_png_struct cr_png_destroy_png_struct
-#define png_destroy_read_struct cr_png_destroy_read_struct
-#define png_destroy_write_struct cr_png_destroy_write_struct
-#define png_do_bgr cr_png_do_bgr
-#define png_do_check_palette_indexes cr_png_do_check_palette_indexes
-#define png_do_chop cr_png_do_chop
-#define png_do_compose cr_png_do_compose
-#define png_do_encode_alpha cr_png_do_encode_alpha
-#define png_do_expand cr_png_do_expand
-#define png_do_expand_16 cr_png_do_expand_16
-#define png_do_expand_palette cr_png_do_expand_palette
-#define png_do_expand_palette_rgb8_neon cr_png_do_expand_palette_rgb8_neon
-#define png_do_expand_palette_rgba8_neon cr_png_do_expand_palette_rgba8_neon
-#define png_do_gamma cr_png_do_gamma
-#define png_do_gray_to_rgb cr_png_do_gray_to_rgb
-#define png_do_invert cr_png_do_invert
-#define png_do_pack cr_png_do_pack
-#define png_do_packswap cr_png_do_packswap
-#define png_do_quantize cr_png_do_quantize
-#define png_do_read_filler cr_png_do_read_filler
-#define png_do_read_interlace cr_png_do_read_interlace
-#define png_do_read_intrapixel cr_png_do_read_intrapixel
-#define png_do_read_invert_alpha cr_png_do_read_invert_alpha
-#define png_do_read_swap_alpha cr_png_do_read_swap_alpha
-#define png_do_read_transformations cr_png_do_read_transformations
-#define png_do_rgb_to_gray cr_png_do_rgb_to_gray
-#define png_do_scale_16_to_8 cr_png_do_scale_16_to_8
-#define png_do_shift cr_png_do_shift
-#define png_do_strip_channel cr_png_do_strip_channel
-#define png_do_swap cr_png_do_swap
-#define png_do_unpack cr_png_do_unpack
-#define png_do_unshift cr_png_do_unshift
-#define png_do_write_interlace cr_png_do_write_interlace
-#define png_do_write_intrapixel cr_png_do_write_intrapixel
-#define png_do_write_invert_alpha cr_png_do_write_invert_alpha
-#define png_do_write_swap_alpha cr_png_do_write_swap_alpha
-#define png_do_write_transformations cr_png_do_write_transformations
-#define png_error cr_png_error
-#define png_fixed cr_png_fixed
-#define png_fixed_error cr_png_fixed_error
-#define png_flush cr_png_flush
-#define png_format_number cr_png_format_number
-#define png_formatted_warning cr_png_formatted_warning
-#define png_free cr_png_free
-#define png_free_buffer_list cr_png_free_buffer_list
-#define png_free_data cr_png_free_data
-#define png_free_default cr_png_free_default
-#define png_free_jmpbuf cr_png_free_jmpbuf
-#define png_gamma_16bit_correct cr_png_gamma_16bit_correct
-#define png_gamma_8bit_correct cr_png_gamma_8bit_correct
-#define png_gamma_correct cr_png_gamma_correct
-#define png_gamma_significant cr_png_gamma_significant
-#define png_get_IHDR cr_png_get_IHDR
-#define png_get_PLTE cr_png_get_PLTE
-#define png_get_bKGD cr_png_get_bKGD
-#define png_get_bit_depth cr_png_get_bit_depth
-#define png_get_cHRM cr_png_get_cHRM
-#define png_get_cHRM_XYZ cr_png_get_cHRM_XYZ
-#define png_get_cHRM_XYZ_fixed cr_png_get_cHRM_XYZ_fixed
-#define png_get_cHRM_fixed cr_png_get_cHRM_fixed
-#define png_get_channels cr_png_get_channels
-#define png_get_chunk_cache_max cr_png_get_chunk_cache_max
-#define png_get_chunk_malloc_max cr_png_get_chunk_malloc_max
-#define png_get_color_type cr_png_get_color_type
-#define png_get_compression_buffer_size cr_png_get_compression_buffer_size
-#define png_get_compression_type cr_png_get_compression_type
-#define png_get_copyright cr_png_get_copyright
-#define png_get_current_pass_number cr_png_get_current_pass_number
-#define png_get_current_row_number cr_png_get_current_row_number
-#define png_get_eXIf cr_png_get_eXIf
-#define png_get_eXIf_1 cr_png_get_eXIf_1
-#define png_get_error_ptr cr_png_get_error_ptr
-#define png_get_filter_type cr_png_get_filter_type
-#define png_get_gAMA cr_png_get_gAMA
-#define png_get_gAMA_fixed cr_png_get_gAMA_fixed
-#define png_get_hIST cr_png_get_hIST
-#define png_get_header_ver cr_png_get_header_ver
-#define png_get_header_version cr_png_get_header_version
-#define png_get_iCCP cr_png_get_iCCP
-#define png_get_image_height cr_png_get_image_height
-#define png_get_image_width cr_png_get_image_width
-#define png_get_int_32 cr_png_get_int_32
-#define png_get_interlace_type cr_png_get_interlace_type
-#define png_get_io_chunk_type cr_png_get_io_chunk_type
-#define png_get_io_ptr cr_png_get_io_ptr
-#define png_get_io_state cr_png_get_io_state
-#define png_get_libpng_ver cr_png_get_libpng_ver
-#define png_get_mem_ptr cr_png_get_mem_ptr
-#define png_get_oFFs cr_png_get_oFFs
-#define png_get_pCAL cr_png_get_pCAL
-#define png_get_pHYs cr_png_get_pHYs
-#define png_get_pHYs_dpi cr_png_get_pHYs_dpi
-#define png_get_palette_max cr_png_get_palette_max
-#define png_get_pixel_aspect_ratio cr_png_get_pixel_aspect_ratio
-#define png_get_pixel_aspect_ratio_fixed cr_png_get_pixel_aspect_ratio_fixed
-#define png_get_pixels_per_inch cr_png_get_pixels_per_inch
-#define png_get_pixels_per_meter cr_png_get_pixels_per_meter
-#define png_get_progressive_ptr cr_png_get_progressive_ptr
-#define png_get_rgb_to_gray_status cr_png_get_rgb_to_gray_status
-#define png_get_rowbytes cr_png_get_rowbytes
-#define png_get_rows cr_png_get_rows
-#define png_get_sBIT cr_png_get_sBIT
-#define png_get_sCAL cr_png_get_sCAL
-#define png_get_sCAL_fixed cr_png_get_sCAL_fixed
-#define png_get_sCAL_s cr_png_get_sCAL_s
-#define png_get_sPLT cr_png_get_sPLT
-#define png_get_sRGB cr_png_get_sRGB
-#define png_get_signature cr_png_get_signature
-#define png_get_tIME cr_png_get_tIME
-#define png_get_tRNS cr_png_get_tRNS
-#define png_get_text cr_png_get_text
-#define png_get_uint_16 cr_png_get_uint_16
-#define png_get_uint_31 cr_png_get_uint_31
-#define png_get_uint_32 cr_png_get_uint_32
-#define png_get_unknown_chunks cr_png_get_unknown_chunks
-#define png_get_user_chunk_ptr cr_png_get_user_chunk_ptr
-#define png_get_user_height_max cr_png_get_user_height_max
-#define png_get_user_transform_ptr cr_png_get_user_transform_ptr
-#define png_get_user_width_max cr_png_get_user_width_max
-#define png_get_valid cr_png_get_valid
-#define png_get_x_offset_inches cr_png_get_x_offset_inches
-#define png_get_x_offset_inches_fixed cr_png_get_x_offset_inches_fixed
-#define png_get_x_offset_microns cr_png_get_x_offset_microns
-#define png_get_x_offset_pixels cr_png_get_x_offset_pixels
-#define png_get_x_pixels_per_inch cr_png_get_x_pixels_per_inch
-#define png_get_x_pixels_per_meter cr_png_get_x_pixels_per_meter
-#define png_get_y_offset_inches cr_png_get_y_offset_inches
-#define png_get_y_offset_inches_fixed cr_png_get_y_offset_inches_fixed
-#define png_get_y_offset_microns cr_png_get_y_offset_microns
-#define png_get_y_offset_pixels cr_png_get_y_offset_pixels
-#define png_get_y_pixels_per_inch cr_png_get_y_pixels_per_inch
-#define png_get_y_pixels_per_meter cr_png_get_y_pixels_per_meter
-#define png_handle_IEND cr_png_handle_IEND
-#define png_handle_IHDR cr_png_handle_IHDR
-#define png_handle_PLTE cr_png_handle_PLTE
-#define png_handle_as_unknown cr_png_handle_as_unknown
-#define png_handle_bKGD cr_png_handle_bKGD
-#define png_handle_cHRM cr_png_handle_cHRM
-#define png_handle_gAMA cr_png_handle_gAMA
-#define png_handle_hIST cr_png_handle_hIST
-#define png_handle_iCCP cr_png_handle_iCCP
-#define png_handle_iTXt cr_png_handle_iTXt
-#define png_handle_oFFs cr_png_handle_oFFs
-#define png_handle_pCAL cr_png_handle_pCAL
-#define png_handle_pHYs cr_png_handle_pHYs
-#define png_handle_sBIT cr_png_handle_sBIT
-#define png_handle_sCAL cr_png_handle_sCAL
-#define png_handle_sPLT cr_png_handle_sPLT
-#define png_handle_sRGB cr_png_handle_sRGB
-#define png_handle_tEXt cr_png_handle_tEXt
-#define png_handle_tIME cr_png_handle_tIME
-#define png_handle_tRNS cr_png_handle_tRNS
-#define png_handle_unknown cr_png_handle_unknown
-#define png_handle_zTXt cr_png_handle_zTXt
-#define png_icc_check_header cr_png_icc_check_header
-#define png_icc_check_length cr_png_icc_check_length
-#define png_icc_check_tag_table cr_png_icc_check_tag_table
-#define png_icc_set_sRGB cr_png_icc_set_sRGB
-#define png_image_begin_read_from_file cr_png_image_begin_read_from_file
-#define png_image_begin_read_from_memory cr_png_image_begin_read_from_memory
-#define png_image_begin_read_from_stdio cr_png_image_begin_read_from_stdio
-#define png_image_error cr_png_image_error
-#define png_image_finish_read cr_png_image_finish_read
-#define png_image_free cr_png_image_free
-#define png_image_write_to_file cr_png_image_write_to_file
-#define png_image_write_to_memory cr_png_image_write_to_memory
-#define png_image_write_to_stdio cr_png_image_write_to_stdio
-#define png_info_init_3 cr_png_info_init_3
-#define png_init_filter_functions_neon cr_png_init_filter_functions_neon
-#define png_init_filter_functions_sse2 cr_png_init_filter_functions_sse2
-#define png_init_io cr_png_init_io
-#define png_init_read_transformations cr_png_init_read_transformations
-#define png_longjmp cr_png_longjmp
-#define png_malloc cr_png_malloc
-#define png_malloc_array cr_png_malloc_array
-#define png_malloc_base cr_png_malloc_base
-#define png_malloc_default cr_png_malloc_default
-#define png_malloc_warn cr_png_malloc_warn
-#define png_muldiv cr_png_muldiv
-#define png_muldiv_warn cr_png_muldiv_warn
-#define png_permit_mng_features cr_png_permit_mng_features
-#define png_process_IDAT_data cr_png_process_IDAT_data
-#define png_process_data cr_png_process_data
-#define png_process_data_pause cr_png_process_data_pause
-#define png_process_data_skip cr_png_process_data_skip
-#define png_process_some_data cr_png_process_some_data
-#define png_progressive_combine_row cr_png_progressive_combine_row
-#define png_push_check_crc cr_png_push_check_crc
-#define png_push_crc_finish cr_png_push_crc_finish
-#define png_push_crc_skip cr_png_push_crc_skip
-#define png_push_fill_buffer cr_png_push_fill_buffer
-#define png_push_handle_iTXt cr_png_push_handle_iTXt
-#define png_push_handle_tEXt cr_png_push_handle_tEXt
-#define png_push_handle_unknown cr_png_push_handle_unknown
-#define png_push_handle_zTXt cr_png_push_handle_zTXt
-#define png_push_have_end cr_png_push_have_end
-#define png_push_have_info cr_png_push_have_info
-#define png_push_have_row cr_png_push_have_row
-#define png_push_process_row cr_png_push_process_row
-#define png_push_read_IDAT cr_png_push_read_IDAT
-#define png_push_read_chunk cr_png_push_read_chunk
-#define png_push_read_end cr_png_push_read_end
-#define png_push_read_iTXt cr_png_push_read_iTXt
-#define png_push_read_sig cr_png_push_read_sig
-#define png_push_read_tEXt cr_png_push_read_tEXt
-#define png_push_read_zTXt cr_png_push_read_zTXt
-#define png_push_restore_buffer cr_png_push_restore_buffer
-#define png_push_save_buffer cr_png_push_save_buffer
-#define png_read_IDAT_data cr_png_read_IDAT_data
-#define png_read_chunk_header cr_png_read_chunk_header
-#define png_read_data cr_png_read_data
-#define png_read_end cr_png_read_end
-#define png_read_filter_row cr_png_read_filter_row
-#define png_read_filter_row_avg3_neon cr_png_read_filter_row_avg3_neon
-#define png_read_filter_row_avg3_sse2 cr_png_read_filter_row_avg3_sse2
-#define png_read_filter_row_avg4_neon cr_png_read_filter_row_avg4_neon
-#define png_read_filter_row_avg4_sse2 cr_png_read_filter_row_avg4_sse2
-#define png_read_filter_row_paeth3_neon cr_png_read_filter_row_paeth3_neon
-#define png_read_filter_row_paeth3_sse2 cr_png_read_filter_row_paeth3_sse2
-#define png_read_filter_row_paeth4_neon cr_png_read_filter_row_paeth4_neon
-#define png_read_filter_row_paeth4_sse2 cr_png_read_filter_row_paeth4_sse2
-#define png_read_filter_row_sub3_neon cr_png_read_filter_row_sub3_neon
-#define png_read_filter_row_sub3_sse2 cr_png_read_filter_row_sub3_sse2
-#define png_read_filter_row_sub4_neon cr_png_read_filter_row_sub4_neon
-#define png_read_filter_row_sub4_sse2 cr_png_read_filter_row_sub4_sse2
-#define png_read_filter_row_up_neon cr_png_read_filter_row_up_neon
-#define png_read_finish_IDAT cr_png_read_finish_IDAT
-#define png_read_finish_row cr_png_read_finish_row
-#define png_read_image cr_png_read_image
-#define png_read_info cr_png_read_info
-#define png_read_png cr_png_read_png
-#define png_read_push_finish_row cr_png_read_push_finish_row
-#define png_read_row cr_png_read_row
-#define png_read_rows cr_png_read_rows
-#define png_read_sig cr_png_read_sig
-#define png_read_start_row cr_png_read_start_row
-#define png_read_transform_info cr_png_read_transform_info
-#define png_read_update_info cr_png_read_update_info
-#define png_realloc_array cr_png_realloc_array
-#define png_reciprocal cr_png_reciprocal
-#define png_reciprocal2 cr_png_reciprocal2
-#define png_reset_crc cr_png_reset_crc
-#define png_reset_zstream cr_png_reset_zstream
-#define png_riffle_palette_neon cr_png_riffle_palette_neon
-#define png_sRGB_base cr_png_sRGB_base
-#define png_sRGB_delta cr_png_sRGB_delta
-#define png_sRGB_table cr_png_sRGB_table
-#define png_safe_error cr_png_safe_error
-#define png_safe_execute cr_png_safe_execute
-#define png_safe_warning cr_png_safe_warning
-#define png_safecat cr_png_safecat
-#define png_save_int_32 cr_png_save_int_32
-#define png_save_uint_16 cr_png_save_uint_16
-#define png_save_uint_32 cr_png_save_uint_32
-#define png_set_IHDR cr_png_set_IHDR
-#define png_set_PLTE cr_png_set_PLTE
-#define png_set_add_alpha cr_png_set_add_alpha
-#define png_set_alpha_mode cr_png_set_alpha_mode
-#define png_set_alpha_mode_fixed cr_png_set_alpha_mode_fixed
-#define png_set_bKGD cr_png_set_bKGD
-#define png_set_background cr_png_set_background
-#define png_set_background_fixed cr_png_set_background_fixed
-#define png_set_benign_errors cr_png_set_benign_errors
-#define png_set_bgr cr_png_set_bgr
-#define png_set_cHRM cr_png_set_cHRM
-#define png_set_cHRM_XYZ cr_png_set_cHRM_XYZ
-#define png_set_cHRM_XYZ_fixed cr_png_set_cHRM_XYZ_fixed
-#define png_set_cHRM_fixed cr_png_set_cHRM_fixed
-#define png_set_check_for_invalid_index cr_png_set_check_for_invalid_index
-#define png_set_chunk_cache_max cr_png_set_chunk_cache_max
-#define png_set_chunk_malloc_max cr_png_set_chunk_malloc_max
-#define png_set_compression_buffer_size cr_png_set_compression_buffer_size
-#define png_set_compression_level cr_png_set_compression_level
-#define png_set_compression_mem_level cr_png_set_compression_mem_level
-#define png_set_compression_method cr_png_set_compression_method
-#define png_set_compression_strategy cr_png_set_compression_strategy
-#define png_set_compression_window_bits cr_png_set_compression_window_bits
-#define png_set_crc_action cr_png_set_crc_action
-#define png_set_eXIf cr_png_set_eXIf
-#define png_set_eXIf_1 cr_png_set_eXIf_1
-#define png_set_error_fn cr_png_set_error_fn
-#define png_set_expand cr_png_set_expand
-#define png_set_expand_16 cr_png_set_expand_16
-#define png_set_expand_gray_1_2_4_to_8 cr_png_set_expand_gray_1_2_4_to_8
-#define png_set_filler cr_png_set_filler
-#define png_set_filter cr_png_set_filter
-#define png_set_filter_heuristics cr_png_set_filter_heuristics
-#define png_set_filter_heuristics_fixed cr_png_set_filter_heuristics_fixed
-#define png_set_flush cr_png_set_flush
-#define png_set_gAMA cr_png_set_gAMA
-#define png_set_gAMA_fixed cr_png_set_gAMA_fixed
-#define png_set_gamma cr_png_set_gamma
-#define png_set_gamma_fixed cr_png_set_gamma_fixed
-#define png_set_gray_to_rgb cr_png_set_gray_to_rgb
-#define png_set_hIST cr_png_set_hIST
-#define png_set_iCCP cr_png_set_iCCP
-#define png_set_interlace_handling cr_png_set_interlace_handling
-#define png_set_invalid cr_png_set_invalid
-#define png_set_invert_alpha cr_png_set_invert_alpha
-#define png_set_invert_mono cr_png_set_invert_mono
-#define png_set_keep_unknown_chunks cr_png_set_keep_unknown_chunks
-#define png_set_longjmp_fn cr_png_set_longjmp_fn
-#define png_set_mem_fn cr_png_set_mem_fn
-#define png_set_oFFs cr_png_set_oFFs
-#define png_set_option cr_png_set_option
-#define png_set_pCAL cr_png_set_pCAL
-#define png_set_pHYs cr_png_set_pHYs
-#define png_set_packing cr_png_set_packing
-#define png_set_packswap cr_png_set_packswap
-#define png_set_palette_to_rgb cr_png_set_palette_to_rgb
-#define png_set_progressive_read_fn cr_png_set_progressive_read_fn
-#define png_set_quantize cr_png_set_quantize
-#define png_set_read_fn cr_png_set_read_fn
-#define png_set_read_status_fn cr_png_set_read_status_fn
-#define png_set_read_user_chunk_fn cr_png_set_read_user_chunk_fn
-#define png_set_read_user_transform_fn cr_png_set_read_user_transform_fn
-#define png_set_rgb_to_gray cr_png_set_rgb_to_gray
-#define png_set_rgb_to_gray_fixed cr_png_set_rgb_to_gray_fixed
-#define png_set_rows cr_png_set_rows
-#define png_set_sBIT cr_png_set_sBIT
-#define png_set_sCAL cr_png_set_sCAL
-#define png_set_sCAL_fixed cr_png_set_sCAL_fixed
-#define png_set_sCAL_s cr_png_set_sCAL_s
-#define png_set_sPLT cr_png_set_sPLT
-#define png_set_sRGB cr_png_set_sRGB
-#define png_set_sRGB_gAMA_and_cHRM cr_png_set_sRGB_gAMA_and_cHRM
-#define png_set_scale_16 cr_png_set_scale_16
-#define png_set_shift cr_png_set_shift
-#define png_set_sig_bytes cr_png_set_sig_bytes
-#define png_set_strip_16 cr_png_set_strip_16
-#define png_set_strip_alpha cr_png_set_strip_alpha
-#define png_set_swap cr_png_set_swap
-#define png_set_swap_alpha cr_png_set_swap_alpha
-#define png_set_tIME cr_png_set_tIME
-#define png_set_tRNS cr_png_set_tRNS
-#define png_set_tRNS_to_alpha cr_png_set_tRNS_to_alpha
-#define png_set_text cr_png_set_text
-#define png_set_text_2 cr_png_set_text_2
-#define png_set_text_compression_level cr_png_set_text_compression_level
-#define png_set_text_compression_mem_level cr_png_set_text_compression_mem_level
-#define png_set_text_compression_method cr_png_set_text_compression_method
-#define png_set_text_compression_strategy cr_png_set_text_compression_strategy
-#define png_set_text_compression_window_bits cr_png_set_text_compression_window_bits
-#define png_set_unknown_chunk_location cr_png_set_unknown_chunk_location
-#define png_set_unknown_chunks cr_png_set_unknown_chunks
-#define png_set_user_limits cr_png_set_user_limits
-#define png_set_user_transform_info cr_png_set_user_transform_info
-#define png_set_write_fn cr_png_set_write_fn
-#define png_set_write_status_fn cr_png_set_write_status_fn
-#define png_set_write_user_transform_fn cr_png_set_write_user_transform_fn
-#define png_sig_cmp cr_png_sig_cmp
-#define png_start_read_image cr_png_start_read_image
-#define png_user_version_check cr_png_user_version_check
-#define png_warning cr_png_warning
-#define png_warning_parameter cr_png_warning_parameter
-#define png_warning_parameter_signed cr_png_warning_parameter_signed
-#define png_warning_parameter_unsigned cr_png_warning_parameter_unsigned
-#define png_write_IEND cr_png_write_IEND
-#define png_write_IHDR cr_png_write_IHDR
-#define png_write_PLTE cr_png_write_PLTE
-#define png_write_bKGD cr_png_write_bKGD
-#define png_write_cHRM_fixed cr_png_write_cHRM_fixed
-#define png_write_chunk cr_png_write_chunk
-#define png_write_chunk_data cr_png_write_chunk_data
-#define png_write_chunk_end cr_png_write_chunk_end
-#define png_write_chunk_start cr_png_write_chunk_start
-#define png_write_data cr_png_write_data
-#define png_write_end cr_png_write_end
-#define png_write_find_filter cr_png_write_find_filter
-#define png_write_finish_row cr_png_write_finish_row
-#define png_write_flush cr_png_write_flush
-#define png_write_gAMA_fixed cr_png_write_gAMA_fixed
-#define png_write_hIST cr_png_write_hIST
-#define png_write_iCCP cr_png_write_iCCP
-#define png_write_iTXt cr_png_write_iTXt
-#define png_write_image cr_png_write_image
-#define png_write_info cr_png_write_info
-#define png_write_info_before_PLTE cr_png_write_info_before_PLTE
-#define png_write_oFFs cr_png_write_oFFs
-#define png_write_pCAL cr_png_write_pCAL
-#define png_write_pHYs cr_png_write_pHYs
-#define png_write_png cr_png_write_png
-#define png_write_row cr_png_write_row
-#define png_write_rows cr_png_write_rows
-#define png_write_sBIT cr_png_write_sBIT
-#define png_write_sCAL_s cr_png_write_sCAL_s
-#define png_write_sPLT cr_png_write_sPLT
-#define png_write_sRGB cr_png_write_sRGB
-#define png_write_sig cr_png_write_sig
-#define png_write_start_row cr_png_write_start_row
-#define png_write_tEXt cr_png_write_tEXt
-#define png_write_tIME cr_png_write_tIME
-#define png_write_tRNS cr_png_write_tRNS
-#define png_write_zTXt cr_png_write_zTXt
-#define png_zalloc cr_png_zalloc
-#define png_zfree cr_png_zfree
-#define png_zlib_inflate cr_png_zlib_inflate
-#define png_zstream_error cr_png_zstream_error
-
-#endif  // PNGPREFIX_H
diff --git a/third_party/openh264/BUILD.gn b/third_party/openh264/BUILD.gn
index e5e71a7..87f988c 100644
--- a/third_party/openh264/BUILD.gn
+++ b/third_party/openh264/BUILD.gn
@@ -2,19 +2,11 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//build/buildflag_header.gni")
 import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/sanitizers/sanitizers.gni")
 import("//third_party/nasm/nasm_assemble.gni")
 import("//third_party/openh264/openh264_sources.gni")
 
-# TODO(https://crbug.com/1218384): Remove after new openh264 is rolled into WebRTC.
-buildflag_header("buildflags") {
-  header = "buildflags.h"
-  header_dir = "third_party/openh264"
-  flags = [ "OPENH264_API_WELS=1" ]
-}
-
 # Config shared by all openh264 targets.
 config("config") {
   cflags = []
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index a692c70..920de6ba 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -35,7 +35,7 @@
 # https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang.md
 # Reverting problematic clang rolls is safe, though.
 # This is the output of `git describe` and is usable as a commit-ish.
-CLANG_REVISION = 'llvmorg-16-init-10289-g094c0ecc'
+CLANG_REVISION = 'llvmorg-16-init-10467-g1239d37b'
 CLANG_SUB_REVISION = 1
 
 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION)
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index b528830..9b59d52 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -385,6 +385,10 @@
                       default=None,
                       help=('Optional realm used when triggering swarming '
                             'tasks.'))
+    subp.add_argument('--service-account',
+                      default=None,
+                      help=('Optional service account to run the swarming '
+                            'tasks as.'))
     subp.add_argument('--tags', default=[], action='append', metavar='FOO:BAR',
                       help='Tags to assign to the swarming task')
     subp.add_argument('--no-default-dimensions', action='store_false',
@@ -682,10 +686,14 @@
       cas_instance = 'chrome-swarming'
       swarming_server = 'chrome-swarming.appspot.com'
       realm = 'chrome:try' if not self.args.realm else self.args.realm
+      account = 'chrome-tester@chops-service-accounts.iam.gserviceaccount.com'
     else:
       cas_instance = 'chromium-swarm'
       swarming_server = 'chromium-swarm.appspot.com'
       realm = self.args.realm
+      account = 'chromium-tester@chops-service-accounts.iam.gserviceaccount.com'
+    account = (self.args.service_account
+               if self.args.service_account else account)
     # TODO(dpranke): Look up the information for the target in
     # the //testing/buildbot.json file, if possible, so that we
     # can determine the isolate target, command line, and additional
@@ -751,6 +759,8 @@
           # 30 is try level. So use the same here.
           '-priority',
           '30',
+          '-service-account',
+          account,
           '-tag=purpose:user-debug-mb',
           '-relative-cwd',
           self.ToSrcRelPath(build_dir),
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index ccf26043..48213c71 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -21432,10 +21432,10 @@
   <description>An NTP tile was blacklisted. iOS only.</description>
 </action>
 
-<action name="MostVisited_UrlBlacklisted_Omnibox">
+<action name="MostVisited_UrlBlocklisted_Omnibox">
   <owner>christianxu@chromium.org</owner>
   <owner>stkhapugin@chromium.org</owner>
-  <description>An omnibox MV tile was blacklisted. iOS only.</description>
+  <description>An omnibox MV tile was blocklisted. iOS only.</description>
 </action>
 
 <action name="MostVisited_UrlPinned">
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 7c628d49..d31e2a14 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -57883,6 +57883,7 @@
   <int value="-2083998415" label="VrLaunchIntent:enabled"/>
   <int value="-2083195884" label="enable-firewall-hole-punching"/>
   <int value="-2082462043" label="ViewPasswords:disabled"/>
+  <int value="-2082411152" label="PasswordsGrouping:disabled"/>
   <int value="-2082042818"
       label="AutofillCreditCardLastUsedDateDisplay:enabled"/>
   <int value="-2081943876"
@@ -59047,6 +59048,7 @@
   <int value="-1420848224" label="WebViewForceDarkModeMatchTheme:enabled"/>
   <int value="-1420542268" label="AutofillEnableAccountWalletStorage:disabled"/>
   <int value="-1420478723" label="EapGtcWifiAuthentication:enabled"/>
+  <int value="-1420160984" label="PasswordsGrouping:enabled"/>
   <int value="-1419908365"
       label="EnableWebHidOnExtensionServiceWorker:disabled"/>
   <int value="-1419788257" label="enable-experimental-hotwording"/>
diff --git a/tools/metrics/histograms/metadata/android/OWNERS b/tools/metrics/histograms/metadata/android/OWNERS
index de26d622..1a81445 100644
--- a/tools/metrics/histograms/metadata/android/OWNERS
+++ b/tools/metrics/histograms/metadata/android/OWNERS
@@ -7,3 +7,4 @@
 andzaytsev@google.com
 ckitagawa@chromium.org
 mvanouwerkerk@chromium.org
+sinansahin@google.com
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index 46be5ad..c3784dcd 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -296,7 +296,7 @@
 </histogram>
 
 <histogram name="Android.AppLaunch.DurationDrawWasBlocked.OnIncognitoReauth"
-    units="ms" expires_after="2023-04-09">
+    units="ms" expires_after="M115">
   <owner>roagarwal@chromium.org</owner>
   <owner>chrome-incognito@google.com</owner>
   <summary>
@@ -1799,7 +1799,7 @@
 
 <histogram
     name="Android.Fonts.TimeDownloadableFontsRetrievedAfterPostInflationStartup{ActivityType}"
-    units="ms" expires_after="2021-12-15">
+    units="ms" expires_after="2023-06-15">
   <owner>sinansahin@google.com</owner>
   <owner>twellington@chromium.org</owner>
   <summary>
@@ -1807,14 +1807,12 @@
     startup. Mutually exclusive with *BeforePostInflationStartup. Recorded when
     all downloadable fonts are retrieved. {ActivityType}
   </summary>
-  <token key="ActivityType" variants="ActivityType">
-    <variant name=""/>
-  </token>
+  <token key="ActivityType" variants="ActivityType"/>
 </histogram>
 
 <histogram
     name="Android.Fonts.TimeDownloadableFontsRetrievedBeforePostInflationStartup{ActivityType}"
-    units="ms" expires_after="2021-12-15">
+    units="ms" expires_after="2023-06-15">
   <owner>sinansahin@google.com</owner>
   <owner>twellington@chromium.org</owner>
   <summary>
@@ -1822,23 +1820,19 @@
     startup. Mutually exclusive with *AfterPostInflationStartup. Recorded after
     AsyncInitializationActivity#performPostInflationStartup. {ActivityType}
   </summary>
-  <token key="ActivityType" variants="ActivityType">
-    <variant name=""/>
-  </token>
+  <token key="ActivityType" variants="ActivityType"/>
 </histogram>
 
 <histogram
     name="Android.Fonts.TimeToRetrieveDownloadableFontsAfterOnCreate{ActivityType}"
-    units="ms" expires_after="2021-12-15">
+    units="ms" expires_after="2023-06-15">
   <owner>sinansahin@google.com</owner>
   <owner>twellington@chromium.org</owner>
   <summary>
     Time it took to retrieve the downloadable fonts after Application#OnCreate.
     Recorded when all downloadable fonts are retrieved. {ActivityType}
   </summary>
-  <token key="ActivityType" variants="ActivityType">
-    <variant name=""/>
-  </token>
+  <token key="ActivityType" variants="ActivityType"/>
 </histogram>
 
 <histogram name="Android.HistoryPage.ClearBrowsingData.PerProfileType"
@@ -1873,7 +1867,7 @@
 </histogram>
 
 <histogram name="Android.IncognitoReauth.PrefToggledFromSettingPage"
-    enum="IncognitoReauthToggleValueType" expires_after="2023-03-26">
+    enum="IncognitoReauthToggleValueType" expires_after="M115">
   <owner>roagarwal@chromium.org</owner>
   <owner>chrome-incognito@google.com</owner>
   <summary>
@@ -1891,7 +1885,7 @@
 </histogram>
 
 <histogram name="Android.IncognitoReauth.PromoActionType"
-    enum="IncognitoReauthPromoActionType" expires_after="M110">
+    enum="IncognitoReauthPromoActionType" expires_after="M115">
   <owner>roagarwal@chromium.org</owner>
   <owner>chrome-incognito@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/chrome/histograms.xml b/tools/metrics/histograms/metadata/chrome/histograms.xml
index 904f348..2a39f5b 100644
--- a/tools/metrics/histograms/metadata/chrome/histograms.xml
+++ b/tools/metrics/histograms/metadata/chrome/histograms.xml
@@ -35,7 +35,7 @@
 </histogram>
 
 <histogram name="Chrome.KAnonymityService.JoinSetLatency" units="ms"
-    expires_after="M110">
+    expires_after="M113">
   <owner>behamilton@google.com</owner>
   <owner>pauljensen@chromium.org</owner>
   <summary>
@@ -68,7 +68,7 @@
 </histogram>
 
 <histogram name="Chrome.KAnonymityService.QuerySetsLatency" units="ms"
-    expires_after="M110">
+    expires_after="M113">
   <owner>behamilton@google.com</owner>
   <owner>pauljensen@chromium.org</owner>
   <summary>
@@ -81,7 +81,7 @@
 </histogram>
 
 <histogram name="Chrome.KAnonymityService.TrustTokenGetter.Action"
-    enum="KAnonymityTrustTokenGetterAction" expires_after="M110">
+    enum="KAnonymityTrustTokenGetterAction" expires_after="M113">
   <owner>behamilton@google.com</owner>
   <owner>pauljensen@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml
index 0d1e737..aa995d2 100644
--- a/tools/metrics/histograms/metadata/extensions/histograms.xml
+++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -381,7 +381,7 @@
 </histogram>
 
 <histogram name="Extensions.ContentVerification.ComputeHashesOnInstallResult"
-    enum="BooleanSuccess" expires_after="2023-04-16">
+    enum="BooleanSuccess" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>lazyboy@chromium.org</owner>
@@ -398,7 +398,7 @@
 </histogram>
 
 <histogram name="Extensions.ContentVerification.ComputeHashesOnInstallTime"
-    units="ms" expires_after="2023-04-16">
+    units="ms" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>lazyboy@chromium.org</owner>
@@ -413,7 +413,7 @@
 </histogram>
 
 <histogram name="Extensions.ContentVerification.FetchFailureError"
-    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-04-16">
+    enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>lazyboy@chromium.org</owner>
@@ -547,7 +547,7 @@
 </histogram>
 
 <histogram name="Extensions.CorruptPolicyExtensionDetected3"
-    enum="ExtensionPolicyReinstallReason" expires_after="2022-12-01">
+    enum="ExtensionPolicyReinstallReason" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>lazyboy@chromium.org</owner>
@@ -565,7 +565,7 @@
 </histogram>
 
 <histogram name="Extensions.CorruptPolicyExtensionResolved" units="ms"
-    expires_after="2023-03-26">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>lazyboy@chromium.org</owner>
@@ -1220,7 +1220,7 @@
 </histogram>
 
 <histogram name="Extensions.ExtensionCacheCount" units="units"
-    expires_after="2023-02-26">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1231,7 +1231,7 @@
 </histogram>
 
 <histogram name="Extensions.ExtensionCacheSize" units="MB"
-    expires_after="2023-02-26">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1396,7 +1396,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledAndBlockListed" units="count"
-    expires_after="2023-03-19">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1409,7 +1409,7 @@
 
 <histogram name="Extensions.ForceInstalledCacheStatus"
     enum="ExtensionInstallationDownloadingCacheStatus"
-    expires_after="2022-12-01">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>poromov@chromium.org</owner>
@@ -1420,7 +1420,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledCreationStage"
-    enum="ExtensionInstallCreationStage" expires_after="2022-12-01">
+    enum="ExtensionInstallCreationStage" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1435,7 +1435,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledDownloadingStage"
-    enum="ExtensionInstallationDownloadingStage" expires_after="2022-12-01">
+    enum="ExtensionInstallationDownloadingStage" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1451,7 +1451,7 @@
 
 <histogram name="Extensions.ForceInstalledFailureCacheStatus"
     enum="ExtensionInstallationDownloadingCacheStatus"
-    expires_after="2022-12-01">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1465,7 +1465,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledFailureCrxInstallError"
-    enum="ExtensionInstallationCrxInstallError" expires_after="2022-12-01">
+    enum="ExtensionInstallationCrxInstallError" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1478,7 +1478,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledFailureManifestInvalidAppStatusError"
-    enum="ManifestInvalidAppStatusError" expires_after="2022-12-01">
+    enum="ManifestInvalidAppStatusError" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1493,7 +1493,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledFailureNoUpdatesInfo"
-    enum="ExtensionNoUpdatesInfo" expires_after="2022-12-01">
+    enum="ExtensionNoUpdatesInfo" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1508,7 +1508,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledFailureReason3"
-    enum="ExtensionInstallationFailureReason" expires_after="2023-04-23">
+    enum="ExtensionInstallationFailureReason" expires_after="2023-12-01">
 <!-- Name completed by histogram_suffixes name="ExtensionSource" -->
 
   <owner>vkovalova@google.com</owner>
@@ -1527,7 +1527,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledFailureSandboxUnpackFailureReason2"
-    enum="ExtensionUnpackFailureReason" expires_after="2022-12-01">
+    enum="ExtensionUnpackFailureReason" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1543,7 +1543,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledFailureSessionType{FailureReason}"
-    enum="SessionType" expires_after="2022-12-01">
+    enum="SessionType" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1568,7 +1568,7 @@
 
 <histogram
     name="Extensions.ForceInstalledFailureStuckInInitialCreationStageAreExtensionsEnabled"
-    enum="BooleanEnabled" expires_after="2022-12-01">
+    enum="BooleanEnabled" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1588,7 +1588,7 @@
 
 <histogram name="Extensions.ForceInstalledFailureWithCrxHeaderInvalidIsCWS"
     enum="IsForceInstalledExtensionFailedWithCrxHeaderInvalidFromCWSBoolean"
-    expires_after="2022-12-01">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1602,7 +1602,7 @@
 
 <histogram
     name="Extensions.ForceInstalledFailureWithCrxHeaderInvalidIsFromCache"
-    enum="BooleanCacheHit" expires_after="2022-12-01">
+    enum="BooleanCacheHit" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1615,7 +1615,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledLoadTime" units="ms"
-    expires_after="2023-04-23">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1626,7 +1626,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledNotLoadedDisableReason"
-    enum="ExtensionDisableReason" expires_after="2023-05-07">
+    enum="ExtensionDisableReason" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1639,7 +1639,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledReadyTime" units="ms"
-    expires_after="2022-12-01">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1651,7 +1651,7 @@
 
 <histogram
     name="Extensions.ForceInstalledSessionsWithNonMisconfigurationFailureOccured"
-    enum="Boolean" expires_after="2023-02-19">
+    enum="Boolean" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1667,7 +1667,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledStage2"
-    enum="ExtensionInstallationStage" expires_after="2022-12-01">
+    enum="ExtensionInstallationStage" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1685,7 +1685,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledTimedOutAndNotInstalledCount"
-    units="units" expires_after="2022-12-01">
+    units="units" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1696,7 +1696,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledTimedOutCount" units="units"
-    expires_after="2023-04-23">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1707,7 +1707,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledTime{ExtensionInstallStages}"
-    units="ms" expires_after="2022-12-01">
+    units="ms" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1739,7 +1739,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalledTotalCandidateCount" units="units"
-    expires_after="2022-12-01">
+    expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1753,7 +1753,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalled{ErrorType}FetchTries"
-    units="retries" expires_after="2022-12-01">
+    units="retries" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -1775,7 +1775,7 @@
 </histogram>
 
 <histogram name="Extensions.ForceInstalled{ErrorType}NetworkErrorCode"
-    enum="NetErrorCodes" expires_after="2022-12-01">
+    enum="NetErrorCodes" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -3712,7 +3712,7 @@
 
 <histogram
     name="Extensions.{ExtensionSource}ForceInstalledFailureManifestInvalidErrorDetail2"
-    enum="ManifestInvalidError" expires_after="2022-12-01">
+    enum="ManifestInvalidError" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
@@ -3736,7 +3736,7 @@
 
 <histogram
     name="Extensions.{ExtensionSource}ForceInstalled{ErrorType}HttpErrorCode2"
-    enum="HttpResponseCode" expires_after="2022-12-01">
+    enum="HttpResponseCode" expires_after="2023-12-01">
   <owner>vkovalova@google.com</owner>
   <owner>burunduk@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml
index 7c245bf..fc50644 100644
--- a/tools/metrics/histograms/metadata/ios/histograms.xml
+++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -849,11 +849,12 @@
 
 <histogram name="IOS.Incognito.TimeSpent" units="ms" expires_after="2023-10-16">
   <owner>olivierrobin@chromium.org</owner>
-  <owner>thegreenfrog@chromium.org</owner>
+  <owner>qpubert@google.com</owner>
   <summary>
     The time incognito profile is displayed to the user. Incognito sessions
     during less than 10 seconds are not reported. Incognito session paused for
-    less than 10 seconds is resumed.
+    less than 10 seconds is resumed. (Incorrectly reported between M92 and
+    M107).
   </summary>
 </histogram>
 
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index 1496325..06fda3fc 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -1089,7 +1089,7 @@
 </histogram>
 
 <histogram name="PasswordManager.CompromisedCredentials2.{Issue}"
-    units="credentials" expires_after="M110">
+    units="credentials" expires_after="M114">
   <owner>vasilii@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
@@ -1116,7 +1116,7 @@
 </histogram>
 
 <histogram name="PasswordManager.CredentialEntryActions.{CredentialEntryType}"
-    enum="CredentialEntryAction" expires_after="M112">
+    enum="CredentialEntryAction" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>fhorschig@chromium.org</owner>
   <summary>
@@ -1132,7 +1132,7 @@
 
 <histogram
     name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.Error"
-    enum="CredentialManagerError" expires_after="M112">
+    enum="CredentialManagerError" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>fhorschig@chromium.org</owner>
   <summary>
@@ -1146,7 +1146,7 @@
 
 <histogram
     name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.Latency"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>fhorschig@chromium.org</owner>
   <summary>
@@ -1161,7 +1161,7 @@
 
 <histogram
     name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.Success"
-    enum="BooleanSuccess" expires_after="M112">
+    enum="BooleanSuccess" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>fhorschig@chromium.org</owner>
   <summary>
@@ -1174,7 +1174,7 @@
 
 <histogram
     name="PasswordManager.CredentialManager.{ProfileType}.Launch.Success"
-    enum="BooleanSuccess" expires_after="M112">
+    enum="BooleanSuccess" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>fhorschig@chromium.org</owner>
   <summary>
@@ -1819,7 +1819,7 @@
 </histogram>
 
 <histogram name="PasswordManager.MigratedSettingsUPMAndroid"
-    enum="BooleanEnabled" expires_after="2023-04-09">
+    enum="BooleanEnabled" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>kazinova@google.com</owner>
   <summary>
@@ -1832,7 +1832,7 @@
 </histogram>
 
 <histogram name="PasswordManager.ModalLoadingDialog.{IntentType}.Outcome"
-    enum="PasswordManager.LoadingDialogOutcome" expires_after="M110">
+    enum="PasswordManager.LoadingDialogOutcome" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>fhorschig@chromium.org</owner>
   <summary>
@@ -1940,7 +1940,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordCheckup.{Operation}.APIError"
-    enum="PasswordStoreAndroidBackendAPIError" expires_after="M110">
+    enum="PasswordStoreAndroidBackendAPIError" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>maxan@google.com</owner>
   <summary>
@@ -1953,7 +1953,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordCheckup.{Operation}.Error"
-    enum="CredentialManagerError" expires_after="M110">
+    enum="CredentialManagerError" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>maxan@google.com</owner>
   <owner>vsemeniuk@google.com</owner>
@@ -1968,7 +1968,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordCheckup.{Operation}.ErrorLatency"
-    units="ms" expires_after="M110">
+    units="ms" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <owner>maxan@google.com</owner>
@@ -1983,7 +1983,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordCheckup.{Operation}.Latency"
-    units="ms" expires_after="M110">
+    units="ms" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <owner>maxan@google.com</owner>
@@ -1997,7 +1997,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordCheckup.{Operation}.Success"
-    enum="BooleanSuccess" expires_after="M110">
+    enum="BooleanSuccess" expires_after="M114">
   <owner>ioanap@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <owner>maxan@google.com</owner>
@@ -2143,7 +2143,7 @@
 
 <histogram
     name="PasswordManager.PasswordSettings.{Function}.{Setting}.APIError1"
-    enum="PasswordStoreAndroidBackendAPIError" expires_after="M110">
+    enum="PasswordStoreAndroidBackendAPIError" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -2161,7 +2161,7 @@
 
 <histogram
     name="PasswordManager.PasswordSettings.{Function}.{Setting}.ErrorCode"
-    enum="PasswordStoreAndroidBackendError" expires_after="M110">
+    enum="PasswordStoreAndroidBackendError" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -2176,7 +2176,7 @@
 
 <histogram
     name="PasswordManager.PasswordSettings.{Function}.{Setting}.ErrorLatency"
-    units="ms" expires_after="M110">
+    units="ms" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -2189,7 +2189,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordSettings.{Function}.{Setting}.Latency"
-    units="ms" expires_after="M110">
+    units="ms" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -2202,7 +2202,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordSettings.{Function}.{Setting}.Success"
-    enum="BooleanSuccess" expires_after="M110">
+    enum="BooleanSuccess" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -2283,7 +2283,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend.APIError.{SyncErrorStatus}"
-    enum="PasswordStoreAndroidBackendAPIError" expires_after="M110">
+    enum="PasswordStoreAndroidBackendAPIError" expires_after="M114">
   <owner>vsemeniuk@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2300,7 +2300,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend.ClearAllLocalPasswords.LoginsToRemove"
-    units="count" expires_after="M110">
+    units="count" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
@@ -2310,7 +2310,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend.ClearAllLocalPasswords.SuccessRate"
-    units="%" expires_after="M110">
+    units="%" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
@@ -2323,7 +2323,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend.Retry{Operation}.APIError"
-    enum="PasswordStoreAndroidBackendAPIError" expires_after="M110">
+    enum="PasswordStoreAndroidBackendAPIError" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -2356,7 +2356,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend.Retry{Operation}.Attempt"
-    units="Times" expires_after="M110">
+    units="Times" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -2390,7 +2390,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend.UptimeOnAPIError{ErrorCode}"
-    units="ms" expires_after="M110">
+    units="ms" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2407,7 +2407,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend{Function}.APIError"
-    enum="PasswordStoreAndroidBackendAPIError" expires_after="M110">
+    enum="PasswordStoreAndroidBackendAPIError" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2428,7 +2428,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend{Function}.ConnectionResultCode"
-    enum="PasswordStoreAndroidBackendConnectionResultCode" expires_after="M110">
+    enum="PasswordStoreAndroidBackendConnectionResultCode" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2450,7 +2450,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreAndroidBackend{Function}.ErrorCode"
-    enum="PasswordStoreAndroidBackendError" expires_after="M110">
+    enum="PasswordStoreAndroidBackendError" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2482,7 +2482,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordStoreProxyBackend.{Function}.Fallback"
-    enum="Boolean" expires_after="M110">
+    enum="Boolean" expires_after="M114">
   <owner>maxan@google.com</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2509,7 +2509,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreProxyBackend.{Function}.{Metric}.{Measurement}"
-    units="count" expires_after="M110">
+    units="count" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2546,7 +2546,7 @@
 
 <histogram
     name="PasswordManager.PasswordStoreProxyBackend.{ModifyingFunction}.{Metric}.{Measurement}"
-    units="count" expires_after="M110">
+    units="count" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2585,7 +2585,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordStore{Backend}{Function}"
-    enum="PasswordStoreAndroidBackendRequestStatus" expires_after="M110">
+    enum="PasswordStoreAndroidBackendRequestStatus" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2620,7 +2620,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordStore{Backend}{Function}.Latency"
-    units="ms" expires_after="M110">
+    units="ms" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -2655,7 +2655,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordStore{Backend}{Function}.Success"
-    enum="BooleanSuccess" expires_after="M110">
+    enum="BooleanSuccess" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vasilii@chromium.org</owner>
   <summary>
@@ -3025,7 +3025,7 @@
 
 <histogram
     name="PasswordManager.SyncControllerDelegateNotifiesCredentialManager.APIErrorCode"
-    enum="CredentialManagerAPIError" expires_after="M112">
+    enum="CredentialManagerAPIError" expires_after="M114">
   <owner>kazinova@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -3037,7 +3037,7 @@
 
 <histogram
     name="PasswordManager.SyncControllerDelegateNotifiesCredentialManager.ErrorCode"
-    enum="PasswordStoreAndroidBackendError" expires_after="M112">
+    enum="PasswordStoreAndroidBackendError" expires_after="M114">
   <owner>kazinova@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -3051,7 +3051,7 @@
 
 <histogram
     name="PasswordManager.SyncControllerDelegateNotifiesCredentialManager.Success"
-    enum="Boolean" expires_after="M112">
+    enum="Boolean" expires_after="M114">
   <owner>kazinova@google.com</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -3212,7 +3212,7 @@
 </histogram>
 
 <histogram name="PasswordManager.UnenrolledFromUPMDueToErrors" enum="Boolean"
-    expires_after="2023-03-19">
+    expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>kazinova@google.com</owner>
   <owner>ioanap@chromium.org</owner>
@@ -3224,7 +3224,7 @@
 </histogram>
 
 <histogram name="PasswordManager.UnifiedPasswordManager.ActiveStatus"
-    enum="UnifiedPasswordManagerActiveStatus" expires_after="2023-03-19">
+    enum="UnifiedPasswordManagerActiveStatus" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>kazinova@google.com</owner>
   <owner>ioanap@chromium.org</owner>
@@ -3240,7 +3240,7 @@
 </histogram>
 
 <histogram name="PasswordManager.UnifiedPasswordManager.WasMigrationDone"
-    enum="BooleanSuccess" expires_after="2023-03-19">
+    enum="BooleanSuccess" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
@@ -3252,7 +3252,7 @@
 
 <histogram
     name="PasswordManager.UnifiedPasswordManager.{UPMMigrationType}.Latency"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
@@ -3264,7 +3264,7 @@
 
 <histogram
     name="PasswordManager.UnifiedPasswordManager.{UPMMigrationType}.Success"
-    enum="BooleanSuccess" expires_after="M112">
+    enum="BooleanSuccess" expires_after="M114">
   <owner>fhorschig@chromium.org</owner>
   <owner>vsemeniuk@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml
index d1103c1..ab46f624 100644
--- a/tools/metrics/histograms/metadata/privacy/histograms.xml
+++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -191,7 +191,7 @@
 </histogram>
 
 <histogram name="Privacy.DIPS.BounceCategory{DIPSRedirectType}{DIPSCookieMode}"
-    enum="DIPSRedirectCategory" expires_after="2022-12-01">
+    enum="DIPSRedirectCategory" expires_after="2023-05-01">
   <owner>bcl@chromium.org</owner>
   <owner>rtarpine@chromium.org</owner>
   <owner>src/chrome/browser/dips/OWNERS</owner>
@@ -204,20 +204,8 @@
   <token key="DIPSRedirectType" variants="DIPSRedirectType"/>
 </histogram>
 
-<histogram name="Privacy.DIPS.CookieAccessFilterResult{DIPSCookieMode}"
-    enum="Boolean" expires_after="2022-12-01">
-  <owner>bcl@chromium.org</owner>
-  <owner>rtarpine@chromium.org</owner>
-  <owner>src/chrome/browser/dips/OWNERS</owner>
-  <summary>
-    The return value of CookieAccessFilter::Filter(). Recorded once per
-    navigation, {DIPSCookieMode}.
-  </summary>
-  <token key="DIPSCookieMode" variants="DIPSCookieMode"/>
-</histogram>
-
 <histogram name="Privacy.DIPS.TimeFromInteractionToStorage{DIPSCookieMode}"
-    units="ms" expires_after="2022-12-01">
+    units="ms" expires_after="2023-05-01">
   <owner>bcl@chromium.org</owner>
   <owner>jdh@chromium.org</owner>
   <owner>rtarpine@chromium.org</owner>
@@ -245,7 +233,7 @@
 </histogram>
 
 <histogram name="Privacy.DIPS.TimeFromStorageToInteraction{DIPSCookieMode}"
-    units="ms" expires_after="2022-12-01">
+    units="ms" expires_after="2023-05-01">
   <owner>bcl@chromium.org</owner>
   <owner>jdh@chromium.org</owner>
   <owner>rtarpine@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/profile/histograms.xml b/tools/metrics/histograms/metadata/profile/histograms.xml
index a3cafd2..0662d1a 100644
--- a/tools/metrics/histograms/metadata/profile/histograms.xml
+++ b/tools/metrics/histograms/metadata/profile/histograms.xml
@@ -740,7 +740,7 @@
 </histogram>
 
 <histogram name="ProfilePicker.FirstProfileTime.FirstWebContentsFinishReason"
-    enum="StartupProfilingFinishReason" expires_after="2022-11-27">
+    enum="StartupProfilingFinishReason" expires_after="2023-04-16">
   <owner>dgn@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/sharing/histograms.xml b/tools/metrics/histograms/metadata/sharing/histograms.xml
index 9e1b2bd3..d17fbbe 100644
--- a/tools/metrics/histograms/metadata/sharing/histograms.xml
+++ b/tools/metrics/histograms/metadata/sharing/histograms.xml
@@ -632,7 +632,7 @@
 </histogram>
 
 <histogram name="Sharing.SmsFetcherClientNameIsEmpty" enum="BooleanEmpty"
-    expires_after="2022-12-25">
+    expires_after="2023-04-30">
   <owner>yigu@chromium.org</owner>
   <owner>src/content/browser/sms/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml
index efa0028..450d0263 100644
--- a/tools/metrics/histograms/metadata/signin/histograms.xml
+++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -668,6 +668,16 @@
   <summary>Tracks the latency of calls to the Kids Management API.</summary>
 </histogram>
 
+<histogram name="Signin.ListFamilyMembersRequest.LegacyNoError.Latency"
+    units="ms" expires_after="2023-11-01">
+  <owner>tju@google.com</owner>
+  <owner>chrome-kids-eng@google.com</owner>
+  <summary>
+    Latency of the legacy calls to the Kids Management API that resulted with
+    success.
+  </summary>
+</histogram>
+
 <histogram name="Signin.ListFamilyMembersRequest.Status"
     enum="KidsExternalFetcherStatus" expires_after="2023-11-01">
   <owner>tju@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
index d99cd64..f5e521c 100644
--- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml
+++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -133,40 +133,20 @@
   </summary>
 </histogram>
 
-<histogram name="WebRTC.Audio.Agc.DigitalGainApplied" units="dB"
-    expires_after="2023-04-30">
-  <owner>alessiob@chromium.org</owner>
-  <summary>
-    Logs adaptive digital compression gain that is applied by AgcManagerDirect.
-    A log call is made once per second. The compression gain is applied to the
-    microphone signal at the end of the processing chain.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.Agc.DigitalGainUpdated" units="dB"
-    expires_after="2022-05-01">
-  <owner>alessiob@chromium.org</owner>
-  <summary>
-    Logs adaptive digital compression gain that is applied by AgcManagerDirect.
-    A log call is made every time the gain changes. The compression gain is
-    applied to the microphone signal at the end of the processing chain.
-  </summary>
-</histogram>
-
 <histogram name="WebRTC.Audio.Agc.InputClippingRate" units="%"
     expires_after="2023-12-31">
   <owner>silen@chromium.org</owner>
   <owner>alessiob@chromium.org</owner>
   <summary>
-    Logs the input clipping rate in AgcManagerDirect. A log call is made every
-    30 seconds during an active WebRTC call using the input volume controller
-    and clipping detection.
+    Logs the input clipping rate in AGC1 and in AGC2. A log call is made every
+    30 seconds during an active WebRTC call using the input volume controller.
   </summary>
 </histogram>
 
 <histogram name="WebRTC.Audio.Agc2.DigitalGainApplied" units="dB"
-    expires_after="2023-04-30">
+    expires_after="2023-12-31">
   <owner>alessiob@chromium.org</owner>
+  <owner>silen@chromium.org</owner>
   <summary>
     Logs adaptive digital compression gain that is applied by
     AdaptiveDigitalGainApplier in GainController2. A log call is made once per
@@ -176,60 +156,32 @@
 </histogram>
 
 <histogram name="WebRTC.Audio.Agc2.EstimatedNoiseLevel" units="dBFS (negated)"
-    expires_after="2021-12-31">
+    expires_after="2023-12-31">
   <owner>alessiob@chromium.org</owner>
+  <owner>silen@chromium.org</owner>
   <summary>
     This histogram reports the noise level estimation done in GainController2. A
     value is reported every second. The unit is inverted dBFS. The scale goes
-    from 0 (very loud noise) to 100 (very faint noise).
+    from 0 (very loud noise) to 100 (very faint noise). Warning: this histogram
+    was expired from 2021-12-31 to 2022-11-16; data may be missing.
   </summary>
 </histogram>
 
-<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.Identity"
-    units="seconds" expires_after="2022-04-24">
+<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.{Region}"
+    units="seconds" expires_after="2023-12-31">
   <owner>alessiob@chromium.org</owner>
+  <owner>silen@chromium.org</owner>
   <summary>
-    The Fixed-Digital part of the AGC protects from saturation by reducing the
-    level of too loud signals. This metric shows how long the level estimate
-    stays in the 'Identity' region. In this region no attenuating gain is
-    applied. This metric is logged from the Fixed Digital limiter in
-    GainController2.
+    How long the AGC2 limiter remained in the {Region} region. Logged during an
+    active WebRTC call whenever the limiter switches region and at the end of
+    the call.
   </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.Knee"
-    units="seconds" expires_after="2022-05-01">
-  <owner>alessiob@chromium.org</owner>
-  <summary>
-    The Fixed-Digital part of the AGC protects from saturation by reducing the
-    level of too loud signals. This metric shows how long the level estimate
-    stays in the 'Knee' region. In this region some attenuating gain is applied.
-    This metric is logged from the Fixed Digital limiter in GainController2.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.Limiter"
-    units="seconds" expires_after="2022-05-01">
-  <owner>alessiob@chromium.org</owner>
-  <summary>
-    The Fixed-Digital part of the AGC protects from saturation by reducing the
-    level of too loud signals. This metric shows how long the level estimate
-    stays in the 'Limiter' region. In this region some more attenuating gain is
-    applied. This metric is logged from the Fixed Digital limiter in
-    GainController2.
-  </summary>
-</histogram>
-
-<histogram name="WebRTC.Audio.Agc2.FixedDigitalGainCurveRegion.Saturation"
-    units="seconds" expires_after="2022-05-01">
-  <owner>alessiob@chromium.org</owner>
-  <summary>
-    The Fixed-Digital part of the AGC protects from saturation by reducing the
-    level of too loud signals. This metric shows how long the level estimate
-    stays in the 'Saturation' region. In this region much attenuating gain is
-    applied. This metric is logged from the Fixed Digital limiter in
-    GainController2.
-  </summary>
+  <token key="Region">
+    <variant name="Identity" summary="identity"/>
+    <variant name="Knee" summary="knee"/>
+    <variant name="Limiter" summary="limiter"/>
+    <variant name="Saturation" summary="saturation"/>
+  </token>
 </histogram>
 
 <histogram name="WebRTC.Audio.AgcClippingAdjustmentAllowed" enum="Boolean"
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 81754af..ebbc952 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -22,7 +22,7 @@
         },
         "linux": {
             "hash": "66a0b2b810cd05189c7aad5caa377633f3946207",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/d74cb19ee888e97725e7dd9b051d558a7aaf4bda/trace_processor_shell"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/31d7f4d96753a1a7e9a04b733e8e7e66fb8e2221/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc
index f6f713a..82a91fe 100644
--- a/ui/aura/window_tree_host.cc
+++ b/ui/aura/window_tree_host.cc
@@ -137,7 +137,7 @@
         host_window->layer()->device_scale_factor());
     // Request a presentation frame. Once the frame is generated the real root
     // layer is added back (from the destructor).
-    compositor->RequestPresentationTimeForNextFrame(base::BindOnce(
+    compositor->RequestSuccessfulPresentationTimeForNextFrame(base::BindOnce(
         &HideHelper::OnFramePresented, weak_ptr_factory_.GetWeakPtr()));
   }
 
@@ -151,7 +151,7 @@
   }
 
  private:
-  void OnFramePresented(const gfx::PresentationFeedback& feedback) {
+  void OnFramePresented(base::TimeTicks presentation_timestamp) {
     host_->FinishHideTransition();
     // WARNING: this has been deleted.
   }
diff --git a/ui/aura/window_tree_host_unittest.cc b/ui/aura/window_tree_host_unittest.cc
index fccf357f..cbdee35 100644
--- a/ui/aura/window_tree_host_unittest.cc
+++ b/ui/aura/window_tree_host_unittest.cc
@@ -368,12 +368,11 @@
 bool WaitForFrame(WindowTreeHost* host) {
   base::RunLoop run_loop;
   bool got_frame = false;
-  host->compositor()->RequestPresentationTimeForNextFrame(
-      base::BindLambdaForTesting(
-          [&](const gfx::PresentationFeedback& feedback) {
-            got_frame = true;
-            run_loop.Quit();
-          }));
+  host->compositor()->RequestSuccessfulPresentationTimeForNextFrame(
+      base::BindLambdaForTesting([&](base::TimeTicks presentation_timestamp) {
+        got_frame = true;
+        run_loop.Quit();
+      }));
   run_loop.Run();
   return got_frame;
 }
diff --git a/ui/color/color_id.h b/ui/color/color_id.h
index b00b229..524f145 100644
--- a/ui/color/color_id.h
+++ b/ui/color/color_id.h
@@ -240,6 +240,11 @@
   E_CPONLY(kColorOverlayScrollbarStrokeHoveredLight) \
   E_CPONLY(kColorProgressBar) \
   E_CPONLY(kColorProgressBarPaused) \
+  E_CPONLY(kColorReadAnythingBackground) \
+  E_CPONLY(kColorReadAnythingBackgroundDark) \
+  E_CPONLY(kColorReadAnythingBackgroundLight) \
+  E_CPONLY(kColorReadAnythingBackgroundYellow) \
+  E_CPONLY(kColorReadAnythingForeground) \
   E_CPONLY(kColorReadAnythingForegroundDark) \
   E_CPONLY(kColorReadAnythingForegroundLight) \
   E_CPONLY(kColorReadAnythingForegroundYellow) \
diff --git a/ui/color/ui_color_mixer.cc b/ui/color/ui_color_mixer.cc
index 51e008a..c2bf7af 100644
--- a/ui/color/ui_color_mixer.cc
+++ b/ui/color/ui_color_mixer.cc
@@ -154,6 +154,15 @@
                gfx::kGoogleGreyAlpha500);
   mixer[kColorProgressBarPaused] = {kColorDisabledForeground};
   mixer[kColorProgressBar] = {kColorAccent};
+  mixer[kColorReadAnythingBackground] = {
+      dark_mode ? kColorReadAnythingBackgroundDark
+                : kColorReadAnythingBackgroundLight};
+  mixer[kColorReadAnythingBackgroundDark] = {gfx::kGoogleGrey900};
+  mixer[kColorReadAnythingBackgroundLight] = {gfx::kGoogleGrey050};
+  mixer[kColorReadAnythingBackgroundYellow] = {gfx::kGoogleYellow200};
+  mixer[kColorReadAnythingForeground] = {
+      dark_mode ? kColorReadAnythingForegroundDark
+                : kColorReadAnythingForegroundLight};
   mixer[kColorReadAnythingForegroundDark] = {gfx::kGoogleGrey200};
   mixer[kColorReadAnythingForegroundLight] = {gfx::kGoogleGrey800};
   mixer[kColorReadAnythingForegroundYellow] = {gfx::kGoogleGrey800};
diff --git a/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc b/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc
index 11c6ff6..4bfbb77a5 100644
--- a/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc
@@ -22,6 +22,7 @@
 #include "ui/ozone/platform/wayland/host/wayland_output.h"
 #include "ui/ozone/platform/wayland/host/wayland_output_manager.h"
 #include "ui/ozone/platform/wayland/host/wayland_screen.h"
+#include "ui/ozone/platform/wayland/host/wayland_seat.h"
 #include "ui/ozone/platform/wayland/test/mock_pointer.h"
 #include "ui/ozone/platform/wayland/test/mock_surface.h"
 #include "ui/ozone/platform/wayland/test/mock_wayland_platform_window_delegate.h"
@@ -93,7 +94,9 @@
 
 class WaylandScreenTest : public WaylandTest {
  public:
-  WaylandScreenTest() = default;
+  // TODO(crbug.com/1365887): TestServerMode::kAsync must be removed once all
+  // tests switch to asynchronous mode.
+  WaylandScreenTest() : WaylandTest(WaylandTest::TestServerMode::kAsync) {}
 
   WaylandScreenTest(const WaylandScreenTest&) = delete;
   WaylandScreenTest& operator=(const WaylandScreenTest&) = delete;
@@ -101,14 +104,14 @@
   ~WaylandScreenTest() override = default;
 
   void SetUp() override {
-    output_ = server_.output();
-
     WaylandTest::SetUp();
 
-    output_->SetRect({kOutputWidth, kOutputHeight});
-    output_->SetScale(1);
-    output_->Flush();
-    Sync();
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      auto* output = server->output();
+      output->SetRect({kOutputWidth, kOutputHeight});
+      output->SetScale(1);
+      output->Flush();
+    });
 
     output_manager_ = connection_->wayland_output_manager();
     ASSERT_TRUE(output_manager_);
@@ -163,68 +166,109 @@
 // In multi-monitor setup, the `entered_outputs_` list should be updated when
 // the display is unplugged or switched off.
 TEST_P(WaylandScreenTest, EnteredOutputListAfterDisplayRemoval) {
-  wl::TestOutput* output1 = server_.output();
-  gfx::Rect output1_rect = server_.output()->GetRect();
+  // These have to be stored on the client thread, but must be used only on the
+  // server thread.
+  wl::TestOutput* output1 = nullptr;
+  wl::TestOutput* output2 = nullptr;
+  wl::TestOutput* output3 = nullptr;
+
+  gfx::Rect output1_rect;
+  PostToServerAndWait(
+      [&output1, &output1_rect](wl::TestWaylandServerThread* server) {
+        output1 = server->output();
+        ASSERT_TRUE(output1);
+        output1_rect = server->output()->GetRect();
+      });
 
   // Add a second display.
-  wl::TestOutput* output2 = server_.CreateAndInitializeOutput();
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2 = server->CreateAndInitializeOutput();
+    ASSERT_TRUE(output2);
+  });
+
   // The second display is located to the right of first display
   gfx::Rect output2_rect(output1_rect.right(), 0, 800, 600);
-  output2->SetRect(output2_rect);
-  output2->Flush();
-  Sync();
+  PostToServerAndWait(
+      [output2, &output2_rect](wl::TestWaylandServerThread* server) {
+        output2->SetRect(output2_rect);
+        output2->Flush();
+      });
 
   // Add a third display.
-  wl::TestOutput* output3 = server_.CreateAndInitializeOutput();
-  Sync();
+  PostToServerAndWait([&output3](wl::TestWaylandServerThread* server) {
+    output3 = server->CreateAndInitializeOutput();
+    ASSERT_TRUE(output3);
+  });
+
   // The third display is located to the right of second display
   gfx::Rect output3_rect(output2_rect.right(), 0, 800, 600);
-  output3->SetRect(output3_rect);
-  output3->Flush();
-  Sync();
+  PostToServerAndWait(
+      [output3, &output3_rect](wl::TestWaylandServerThread* server) {
+        output3->SetRect(output3_rect);
+        output3->Flush();
+      });
 
   EXPECT_EQ(3u, platform_screen_->GetAllDisplays().size());
 
-  wl::MockSurface* surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  ASSERT_TRUE(surface);
+  const uint32_t surface_id = window_->root_surface()->get_surface_id();
+  PostToServerAndWait(
+      [output1, output2, surface_id](wl::TestWaylandServerThread* server) {
+        auto* surface = server->GetObject<wl::MockSurface>(surface_id);
+        wl_surface_send_enter(surface->resource(), output1->resource());
+        wl_surface_send_enter(surface->resource(), output2->resource());
+      });
 
-  wl_surface_send_enter(surface->resource(), output1->resource());
-  wl_surface_send_enter(surface->resource(), output2->resource());
-  Sync();
   // The window entered two outputs
   auto entered_outputs = window_->root_surface()->entered_outputs();
   EXPECT_EQ(2u, entered_outputs.size());
 
-  wl_surface_send_enter(surface->resource(), output3->resource());
-  Sync();
+  PostToServerAndWait(
+      [output3, surface_id](wl::TestWaylandServerThread* server) {
+        auto* surface = server->GetObject<wl::MockSurface>(surface_id);
+        wl_surface_send_enter(surface->resource(), output3->resource());
+      });
+
   // The window entered three outputs
   entered_outputs = window_->root_surface()->entered_outputs();
   EXPECT_EQ(3u, entered_outputs.size());
 
   // Destroy third display
-  output3->DestroyGlobal();
-  Sync();
+  PostToServerAndWait([&output3](wl::TestWaylandServerThread* server) {
+    output3->DestroyGlobal();
+    output3 = nullptr;
+  });
+
   entered_outputs = window_->root_surface()->entered_outputs();
   EXPECT_EQ(2u, entered_outputs.size());
 
   // Destroy second display
-  output2->DestroyGlobal();
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2->DestroyGlobal();
+    output2 = nullptr;
+  });
+
   entered_outputs = window_->root_surface()->entered_outputs();
   EXPECT_EQ(1u, entered_outputs.size());
 
   // Add a second display.
-  output2 = server_.CreateAndInitializeOutput();
-  Sync();
-  // The second display is located to the right of first display
-  output2->SetRect(output2_rect);
-  output2->Flush();
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    ASSERT_FALSE(output2);
+    output2 = server->CreateAndInitializeOutput();
+    ASSERT_TRUE(output2);
+  });
 
-  wl_surface_send_enter(surface->resource(), output2->resource());
-  Sync();
+  // The second display is located to the right of first display
+  PostToServerAndWait(
+      [output2, &output2_rect](wl::TestWaylandServerThread* server) {
+        output2->SetRect(output2_rect);
+        output2->Flush();
+      });
+
+  PostToServerAndWait(
+      [output2, surface_id](wl::TestWaylandServerThread* server) {
+        auto* surface = server->GetObject<wl::MockSurface>(surface_id);
+        wl_surface_send_enter(surface->resource(), output2->resource());
+      });
 
   // The window entered two outputs
   entered_outputs = window_->root_surface()->entered_outputs();
@@ -232,48 +276,63 @@
 }
 
 TEST_P(WaylandScreenTest, MultipleOutputsAddedAndRemoved) {
+  // This has to be stored on the client thread, but must be used only on the
+  // server thread.
+  wl::TestOutput* output2 = nullptr;
+
   TestDisplayObserver observer;
   platform_screen_->AddObserver(&observer);
 
   const int64_t old_primary_display_id =
       platform_screen_->GetPrimaryDisplay().id();
-  gfx::Rect output1_rect = server_.output()->GetRect();
+  gfx::Rect output1_rect;
+  PostToServerAndWait([&output1_rect](wl::TestWaylandServerThread* server) {
+    output1_rect = server->output()->GetRect();
+  });
+  ASSERT_FALSE(output1_rect.IsEmpty());
 
   // Add a second display.
-  wl::TestOutput* output2 = server_.CreateAndInitializeOutput();
-
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2 = server->CreateAndInitializeOutput();
+    ASSERT_TRUE(output2);
+  });
 
   // The second display is located to the right of first display like
   // | || |.
   gfx::Rect output2_rect(output1_rect.width(), 0, 800, 600);
-  output2->SetRect(output2_rect);
-  output2->Flush();
-
-  Sync();
+  PostToServerAndWait(
+      [output2, &output2_rect](wl::TestWaylandServerThread* server) {
+        output2->SetRect(output2_rect);
+        output2->Flush();
+      });
 
   // Ensure that second display is not a primary one and have a different id.
   int64_t added_display_id = observer.GetDisplay().id();
   EXPECT_NE(platform_screen_->GetPrimaryDisplay().id(), added_display_id);
 
-  output2->DestroyGlobal();
-
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2->DestroyGlobal();
+    output2 = nullptr;
+  });
+  ASSERT_FALSE(output2);
 
   // Ensure that removed display has correct id.
   int64_t removed_display_id = observer.GetRemovedDisplay().id();
   EXPECT_EQ(added_display_id, removed_display_id);
 
   // Create another display again.
-  output2 = server_.CreateAndInitializeOutput();
-
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    ASSERT_FALSE(output2);
+    output2 = server->CreateAndInitializeOutput();
+    ASSERT_TRUE(output2);
+  });
 
   // Updates rect again.
-  output2->SetRect(output2_rect);
-  output2->Flush();
-
-  Sync();
+  PostToServerAndWait(
+      [output2, &output2_rect](wl::TestWaylandServerThread* server) {
+        output2->SetRect(output2_rect);
+        output2->Flush();
+      });
 
   // The newly added display is not a primary yet.
   added_display_id = observer.GetDisplay().id();
@@ -281,22 +340,26 @@
 
   // Now, rearrange displays so that second display becomes the primary one.
   output1_rect = gfx::Rect(1024, 0, 1024, 768);
-  output_->SetRect(output1_rect);
-  output_->Flush();
-
   output2_rect = gfx::Rect(0, 0, 1024, 768);
-  output2->SetRect(output2_rect);
-  output2->Flush();
+  PostToServerAndWait([&output1_rect, &output2_rect,
+                       output2](wl::TestWaylandServerThread* server) {
+    auto* output = server->output();
+    output->SetRect(output1_rect);
+    output->Flush();
 
-  Sync();
+    output2->SetRect(output2_rect);
+    output2->Flush();
+  });
 
   // Ensure that output2 is now the primary one.
   EXPECT_EQ(platform_screen_->GetPrimaryDisplay().id(), added_display_id);
 
   // Remove the primary display now.
-  output2->DestroyGlobal();
-
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2->DestroyGlobal();
+    output2 = nullptr;
+  });
+  ASSERT_FALSE(output2);
 
   // Ensure that output1 is a primary display now.
   EXPECT_EQ(platform_screen_->GetPrimaryDisplay().id(), old_primary_display_id);
@@ -384,13 +447,13 @@
 }
 
 TEST_P(WaylandScreenTest, GetAcceleratedWidgetAtScreenPoint) {
-  // Now, send enter event for the surface, which was created before.
-  wl::MockSurface* surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  ASSERT_TRUE(surface);
-  wl_surface_send_enter(surface->resource(), output_->resource());
-
-  Sync();
+  const uint32_t surface_id = window_->root_surface()->get_surface_id();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    // Now, send enter event for the surface, which was created before.
+    wl::MockSurface* surface = server->GetObject<wl::MockSurface>(surface_id);
+    ASSERT_TRUE(surface);
+    wl_surface_send_enter(surface->resource(), server->output()->resource());
+  });
 
   // If there is no focused window (focus is set whenever a pointer enters any
   // of the windows), there must be kNullAcceleratedWidget returned. There is no
@@ -422,8 +485,6 @@
                                         PlatformWindowType::kMenu,
                                         window_->GetWidget(), &delegate);
 
-  Sync();
-
   // Imagine the mouse enters a menu window, which is located on top of the main
   // window, and gathers focus.
   SetPointerFocusedWindow(menu_window.get());
@@ -446,10 +507,10 @@
 
   // Part 2: test that the window is found when display's scale changes.
   // Update scale.
-  output_->SetScale(2);
-  output_->Flush();
-
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    server->output()->SetScale(2);
+    server->output()->Flush();
+  });
 
   auto menu_bounds = menu_window->GetBoundsInDIP();
   auto point_in_screen = menu_bounds.origin();
@@ -484,17 +545,22 @@
   const display::Display primary_display =
       platform_screen_->GetPrimaryDisplay();
 
-  wl::TestOutput* output2 = server_.CreateAndInitializeOutput();
-
-  Sync();
+  // This has to be stored on the client thread, but must be used only on the
+  // server thread.
+  wl::TestOutput* output2 = nullptr;
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2 = server->CreateAndInitializeOutput();
+    ASSERT_TRUE(output2);
+  });
 
   // Place it on the right side of the primary display.
   const gfx::Rect output2_rect =
       gfx::Rect(primary_display.bounds().width(), 0, 1024, 768);
-  output2->SetRect(output2_rect);
-  output2->Flush();
-
-  Sync();
+  PostToServerAndWait(
+      [output2, output2_rect](wl::TestWaylandServerThread* server) {
+        output2->SetRect(output2_rect);
+        output2->Flush();
+      });
 
   const display::Display second_display = observer.GetDisplay();
   EXPECT_EQ(second_display.bounds(), output2_rect);
@@ -523,12 +589,13 @@
       platform_screen_->GetDisplayMatching(gfx::Rect(1019, 0, 10, 10)).id());
 
   // Place second display 700 pixels below along y axis (1024:700,1024x768)
-  output2->SetRect(
-      gfx::Rect(gfx::Point(output2_rect.x(), output2_rect.y() + 700),
-                output2_rect.size()));
-  output2->Flush();
-
-  Sync();
+  PostToServerAndWait(
+      [output2, output2_rect](wl::TestWaylandServerThread* server) {
+        output2->SetRect(
+            gfx::Rect(gfx::Point(output2_rect.x(), output2_rect.y() + 700),
+                      output2_rect.size()));
+        output2->Flush();
+      });
 
   // The match rect is located outside the displays. Primary display must be
   // returned.
@@ -551,8 +618,10 @@
             platform_screen_->GetDisplayMatching(gfx::Rect(0, 0, 0, 0)).id());
 
   platform_screen_->RemoveObserver(&observer);
-  output2->DestroyGlobal();
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2->DestroyGlobal();
+    output2 = nullptr;
+  });
 }
 
 // Regression test for https://crbug.com/1362872.
@@ -573,8 +642,9 @@
     auto display = platform_screen_->GetPrimaryDisplay();
     EXPECT_EQ(display::kDefaultDisplayId, display.id());
   }));
-  output_->DestroyGlobal();
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    server->output()->DestroyGlobal();
+  });
 
   platform_screen_->RemoveObserver(&observer);
 }
@@ -586,19 +656,23 @@
   const display::Display primary_display =
       platform_screen_->GetPrimaryDisplay();
 
-  // Create an additional display.
-  wl::TestOutput* output2 = server_.CreateAndInitializeOutput();
-
-  Sync();
+  // Create an additional display. This has to be stored on the client thread,
+  // but must be used only on the server thread.
+  wl::TestOutput* output2 = nullptr;
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2 = server->CreateAndInitializeOutput();
+    ASSERT_TRUE(output2);
+  });
 
   // Place it on the right side of the primary
   // display.
   const gfx::Rect output2_rect =
       gfx::Rect(primary_display.bounds().width(), 0, 1024, 768);
-  output2->SetRect(output2_rect);
-  output2->Flush();
-
-  Sync();
+  PostToServerAndWait(
+      [output2, output2_rect](wl::TestWaylandServerThread* server) {
+        output2->SetRect(output2_rect);
+        output2->Flush();
+      });
 
   const display::Display secondary_display = observer.GetDisplay();
   EXPECT_EQ(secondary_display.bounds(), output2_rect);
@@ -608,31 +682,34 @@
   // enter event yet.
   ValidateTheDisplayForWidget(widget, primary_display.id());
 
+  const uint32_t surface_id = window_->root_surface()->get_surface_id();
   // Now, send enter event for the surface, which was created before.
-  wl::MockSurface* surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  ASSERT_TRUE(surface);
-  wl_surface_send_enter(surface->resource(), output_->resource());
-
-  Sync();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    wl::MockSurface* surface = server->GetObject<wl::MockSurface>(surface_id);
+    ASSERT_TRUE(surface);
+    wl_surface_send_enter(surface->resource(), server->output()->resource());
+  });
 
   // The id of the entered display must correspond to the primary output.
   ValidateTheDisplayForWidget(widget, primary_display.id());
 
-  Sync();
-
   // Enter the second output now.
-  wl_surface_send_enter(surface->resource(), output2->resource());
-
-  Sync();
+  PostToServerAndWait(
+      [output2, surface_id](wl::TestWaylandServerThread* server) {
+        wl_surface_send_enter(
+            server->GetObject<wl::MockSurface>(surface_id)->resource(),
+            output2->resource());
+      });
 
   // The id of the entered display must still correspond to the primary output.
   ValidateTheDisplayForWidget(widget, primary_display.id());
 
   // Leave the first output.
-  wl_surface_send_leave(surface->resource(), output_->resource());
-
-  Sync();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    wl_surface_send_leave(
+        server->GetObject<wl::MockSurface>(surface_id)->resource(),
+        server->output()->resource());
+  });
 
   // The id of the entered display must correspond to the second output.
   ValidateTheDisplayForWidget(widget, secondary_display.id());
@@ -640,15 +717,19 @@
   // Leaving the same output twice (check comment in
   // WaylandWindow::OnEnteredOutputIdRemoved), must be ok and nothing must
   // change.
-  wl_surface_send_leave(surface->resource(), output_->resource());
-
-  Sync();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    wl_surface_send_leave(
+        server->GetObject<wl::MockSurface>(surface_id)->resource(),
+        server->output()->resource());
+  });
 
   // The id of the entered display must correspond to the second output.
   ValidateTheDisplayForWidget(widget, secondary_display.id());
 
-  output2->DestroyGlobal();
-  Sync();
+  PostToServerAndWait([&output2](wl::TestWaylandServerThread* server) {
+    output2->DestroyGlobal();
+    output2 = nullptr;
+  });
 }
 
 TEST_P(WaylandScreenTest, GetCursorScreenPoint) {
@@ -658,58 +739,66 @@
                                         PlatformWindowType::kWindow,
                                         gfx::kNullAcceleratedWidget, &delegate);
 
-  auto* surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  ASSERT_TRUE(surface);
+  const uint32_t surface_id = window_->root_surface()->get_surface_id();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    auto* surface = server->GetObject<wl::MockSurface>(surface_id);
+    ASSERT_TRUE(surface);
 
-  // Announce pointer capability so that WaylandPointer is created on the client
-  // side.
-  wl_seat_send_capabilities(server_.seat()->resource(),
-                            WL_SEAT_CAPABILITY_POINTER);
+    // Announce pointer capability so that WaylandPointer is created on the
+    // client side.
+    wl_seat_send_capabilities(server->seat()->resource(),
+                              WL_SEAT_CAPABILITY_POINTER);
+  });
 
-  Sync();
+  ASSERT_TRUE(connection_->seat()->pointer());
 
-  wl::MockPointer* pointer = server_.seat()->pointer();
-  ASSERT_TRUE(pointer);
-
-  uint32_t serial = 0;
-  uint32_t time = 1002;
-  wl_pointer_send_enter(pointer->resource(), ++serial, surface->resource(), 0,
-                        0);
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_motion(pointer->resource(), ++time, wl_fixed_from_int(10),
-                         wl_fixed_from_int(20));
-  wl_pointer_send_frame(pointer->resource());
-
-  Sync();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    wl::MockPointer* pointer = server->seat()->pointer();
+    auto* surface = server->GetObject<wl::MockSurface>(surface_id);
+    wl_pointer_send_enter(pointer->resource(), server->GetNextSerial(),
+                          surface->resource(), 0, 0);
+    wl_pointer_send_frame(pointer->resource());
+    wl_pointer_send_motion(pointer->resource(), server->GetNextTime(),
+                           wl_fixed_from_int(10), wl_fixed_from_int(20));
+    wl_pointer_send_frame(pointer->resource());
+  });
 
   // WaylandScreen must return the last pointer location.
   EXPECT_EQ(gfx::Point(10, 20), platform_screen_->GetCursorScreenPoint());
 
-  auto* second_surface = server_.GetObject<wl::MockSurface>(
-      second_window->root_surface()->get_surface_id());
-  ASSERT_TRUE(second_surface);
-  // Now, leave the first surface and enter second one.
-  wl_pointer_send_leave(pointer->resource(), ++serial, surface->resource());
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_enter(pointer->resource(), ++serial,
-                        second_surface->resource(), 0, 0);
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_motion(pointer->resource(), ++time, wl_fixed_from_int(20),
-                         wl_fixed_from_int(10));
-  wl_pointer_send_frame(pointer->resource());
-
-  Sync();
+  const uint32_t second_surface_id =
+      second_window->root_surface()->get_surface_id();
+  PostToServerAndWait(
+      [surface_id, second_surface_id](wl::TestWaylandServerThread* server) {
+        wl::MockPointer* pointer = server->seat()->pointer();
+        auto* surface = server->GetObject<wl::MockSurface>(surface_id);
+        auto* second_surface =
+            server->GetObject<wl::MockSurface>(second_surface_id);
+        ASSERT_TRUE(second_surface);
+        // Now, leave the first surface and enter second one.
+        wl_pointer_send_leave(pointer->resource(), server->GetNextSerial(),
+                              surface->resource());
+        wl_pointer_send_frame(pointer->resource());
+        wl_pointer_send_enter(pointer->resource(), server->GetNextSerial(),
+                              second_surface->resource(), 0, 0);
+        wl_pointer_send_frame(pointer->resource());
+        wl_pointer_send_motion(pointer->resource(), server->GetNextTime(),
+                               wl_fixed_from_int(20), wl_fixed_from_int(10));
+        wl_pointer_send_frame(pointer->resource());
+      });
 
   // WaylandScreen must return the last pointer location.
   EXPECT_EQ(gfx::Point(20, 10), platform_screen_->GetCursorScreenPoint());
 
   // Clear pointer focus.
-  wl_pointer_send_leave(pointer->resource(), ++serial,
-                        second_surface->resource());
-  wl_pointer_send_frame(pointer->resource());
-
-  Sync();
+  PostToServerAndWait([second_surface_id](wl::TestWaylandServerThread* server) {
+    wl::MockPointer* pointer = server->seat()->pointer();
+    auto* second_surface =
+        server->GetObject<wl::MockSurface>(second_surface_id);
+    wl_pointer_send_leave(pointer->resource(), server->GetNextSerial(),
+                          second_surface->resource());
+    wl_pointer_send_frame(pointer->resource());
+  });
 
   // WaylandScreen must return a point, which is located outside of bounds of
   // any window. Basically, it means that it takes the largest window and adds
@@ -730,20 +819,21 @@
                     second_window_bounds.height() - 10, 10, 20),
           PlatformWindowType::kMenu, second_window->GetWidget(), &delegate);
 
-  Sync();
+  const uint32_t menu_surface_id =
+      menu_window->root_surface()->get_surface_id();
+  PostToServerAndWait([menu_surface_id](wl::TestWaylandServerThread* server) {
+    auto* menu_surface = server->GetObject<wl::MockSurface>(menu_surface_id);
+    ASSERT_TRUE(menu_surface);
 
-  auto* menu_surface = server_.GetObject<wl::MockSurface>(
-      menu_window->root_surface()->get_surface_id());
-  ASSERT_TRUE(menu_surface);
+    wl::MockPointer* pointer = server->seat()->pointer();
 
-  wl_pointer_send_enter(pointer->resource(), ++serial, menu_surface->resource(),
-                        0, 0);
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_motion(pointer->resource(), ++time, wl_fixed_from_int(2),
-                         wl_fixed_from_int(1));
-  wl_pointer_send_frame(pointer->resource());
-
-  Sync();
+    wl_pointer_send_enter(pointer->resource(), server->GetNextSerial(),
+                          menu_surface->resource(), 0, 0);
+    wl_pointer_send_frame(pointer->resource());
+    wl_pointer_send_motion(pointer->resource(), server->GetNextTime(),
+                           wl_fixed_from_int(2), wl_fixed_from_int(1));
+    wl_pointer_send_frame(pointer->resource());
+  });
 
   // The cursor screen point must be converted to the top-level window
   // coordinates as long as Wayland doesn't provide global coordinates of
@@ -753,25 +843,37 @@
   EXPECT_EQ(gfx::Point(1912, 1071), platform_screen_->GetCursorScreenPoint());
 
   // Leave the menu window and enter the top level window.
-  wl_pointer_send_leave(pointer->resource(), ++serial,
-                        menu_surface->resource());
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_enter(pointer->resource(), ++serial,
-                        second_surface->resource(), 0, 0);
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_motion(pointer->resource(), ++time, wl_fixed_from_int(1912),
-                         wl_fixed_from_int(1071));
-  wl_pointer_send_frame(pointer->resource());
+  PostToServerAndWait([menu_surface_id,
+                       second_surface_id](wl::TestWaylandServerThread* server) {
+    auto* menu_surface = server->GetObject<wl::MockSurface>(menu_surface_id);
+    ASSERT_TRUE(menu_surface);
+    auto* second_surface =
+        server->GetObject<wl::MockSurface>(second_surface_id);
 
-  Sync();
+    wl::MockPointer* pointer = server->seat()->pointer();
+    wl_pointer_send_leave(pointer->resource(), server->GetNextSerial(),
+                          menu_surface->resource());
+    wl_pointer_send_frame(pointer->resource());
+    wl_pointer_send_enter(pointer->resource(), server->GetNextSerial(),
+                          second_surface->resource(), 0, 0);
+    wl_pointer_send_frame(pointer->resource());
+    wl_pointer_send_motion(pointer->resource(), server->GetNextTime(),
+                           wl_fixed_from_int(1912), wl_fixed_from_int(1071));
+    wl_pointer_send_frame(pointer->resource());
+  });
 
   // WaylandWindow::UpdateCursorPositionFromEvent mustn't convert this point,
   // because it has already been located on the top-level window.
   EXPECT_EQ(gfx::Point(1912, 1071), platform_screen_->GetCursorScreenPoint());
 
-  wl_pointer_send_leave(pointer->resource(), ++serial,
-                        second_surface->resource());
-  wl_pointer_send_frame(pointer->resource());
+  PostToServerAndWait([second_surface_id](wl::TestWaylandServerThread* server) {
+    wl::MockPointer* pointer = server->seat()->pointer();
+    auto* second_surface =
+        server->GetObject<wl::MockSurface>(second_surface_id);
+    wl_pointer_send_leave(pointer->resource(), server->GetNextSerial(),
+                          second_surface->resource());
+    wl_pointer_send_frame(pointer->resource());
+  });
 
   // Now, create a nested menu window and make sure that the cursor screen point
   // still has been correct. The location of the window is on the right side of
@@ -783,36 +885,43 @@
                     menu_window_bounds.y() + 2, 10, 20),
           PlatformWindowType::kMenu, second_window->GetWidget(), &delegate);
 
-  Sync();
+  const uint32_t nested_menu_surface_id =
+      nested_menu_window->root_surface()->get_surface_id();
+  PostToServerAndWait(
+      [nested_menu_surface_id](wl::TestWaylandServerThread* server) {
+        wl::MockPointer* pointer = server->seat()->pointer();
+        auto* nested_menu_surface =
+            server->GetObject<wl::MockSurface>(nested_menu_surface_id);
+        ASSERT_TRUE(nested_menu_surface);
 
-  auto* nested_menu_surface = server_.GetObject<wl::MockSurface>(
-      nested_menu_window->root_surface()->get_surface_id());
-  ASSERT_TRUE(nested_menu_surface);
-
-  wl_pointer_send_enter(pointer->resource(), ++serial,
-                        nested_menu_surface->resource(), 0, 0);
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_motion(pointer->resource(), ++time, wl_fixed_from_int(2),
-                         wl_fixed_from_int(3));
-  wl_pointer_send_frame(pointer->resource());
-
-  Sync();
+        wl_pointer_send_enter(pointer->resource(), server->GetNextSerial(),
+                              nested_menu_surface->resource(), 0, 0);
+        wl_pointer_send_frame(pointer->resource());
+        wl_pointer_send_motion(pointer->resource(), server->GetNextTime(),
+                               wl_fixed_from_int(2), wl_fixed_from_int(3));
+        wl_pointer_send_frame(pointer->resource());
+      });
 
   EXPECT_EQ(gfx::Point(1922, 1075), platform_screen_->GetCursorScreenPoint());
 
   // Leave the nested surface and enter main menu surface. The cursor screen
   // point still must be reported correctly.
-  wl_pointer_send_leave(pointer->resource(), ++serial,
-                        nested_menu_surface->resource());
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_enter(pointer->resource(), ++serial, menu_surface->resource(),
-                        0, 0);
-  wl_pointer_send_frame(pointer->resource());
-  wl_pointer_send_motion(pointer->resource(), ++time, wl_fixed_from_int(2),
-                         wl_fixed_from_int(1));
-  wl_pointer_send_frame(pointer->resource());
-
-  Sync();
+  PostToServerAndWait([nested_menu_surface_id,
+                       menu_surface_id](wl::TestWaylandServerThread* server) {
+    wl::MockPointer* pointer = server->seat()->pointer();
+    auto* nested_menu_surface =
+        server->GetObject<wl::MockSurface>(nested_menu_surface_id);
+    auto* menu_surface = server->GetObject<wl::MockSurface>(menu_surface_id);
+    wl_pointer_send_leave(pointer->resource(), server->GetNextSerial(),
+                          nested_menu_surface->resource());
+    wl_pointer_send_frame(pointer->resource());
+    wl_pointer_send_enter(pointer->resource(), server->GetNextSerial(),
+                          menu_surface->resource(), 0, 0);
+    wl_pointer_send_frame(pointer->resource());
+    wl_pointer_send_motion(pointer->resource(), server->GetNextTime(),
+                           wl_fixed_from_int(2), wl_fixed_from_int(1));
+    wl_pointer_send_frame(pointer->resource());
+  });
 
   EXPECT_EQ(gfx::Point(1912, 1071), platform_screen_->GetCursorScreenPoint());
 }
@@ -820,17 +929,22 @@
 // Checks that the surface that backs the window receives new scale of the
 // output that it is in.
 TEST_P(WaylandScreenTest, SetWindowScale) {
-  // Place the window onto the output.
-  wl_surface_send_enter(surface_->resource(), output_->resource());
+  constexpr int32_t kTripleScale = 3;
 
-  // Change the scale of the output.  Windows looking into that output must get
-  // the new scale and update scale of their buffers.  The default UI scale
-  // equals the output scale.
-  const int32_t kTripleScale = 3;
-  output_->SetScale(kTripleScale);
-  output_->Flush();
+  const uint32_t surface_id = window_->root_surface()->get_surface_id();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    auto* output = server->output();
+    // Place the window onto the output.
+    wl_surface_send_enter(
+        server->GetObject<wl::MockSurface>(surface_id)->resource(),
+        output->resource());
 
-  Sync();
+    // Change the scale of the output.  Windows looking into that output must
+    // get the new scale and update scale of their buffers.  The default UI
+    // scale equals the output scale.
+    output->SetScale(kTripleScale);
+    output->Flush();
+  });
 
   EXPECT_EQ(window_->window_scale(), kTripleScale);
   EXPECT_EQ(window_->ui_scale_, kTripleScale);
@@ -845,13 +959,13 @@
 
   // Change the scale of the output again.  Windows must update scale of
   // their buffers but the UI scale must get the forced value.
-  const int32_t kDoubleScale = 2;
+  constexpr int32_t kDoubleScale = 2;
   // Question ourselves before questioning others!
   EXPECT_NE(kForcedUIScale, kDoubleScale);
-  output_->SetScale(kDoubleScale);
-  output_->Flush();
-
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    server->output()->SetScale(kDoubleScale);
+    server->output()->Flush();
+  });
 
   EXPECT_EQ(window_->window_scale(), kDoubleScale);
   EXPECT_EQ(window_->ui_scale_, kForcedUIScale);
@@ -870,20 +984,27 @@
   // Test pre-conditions: single output setup whereas |output_| is the primary
   // output managed by |output_manager_|, with initial scale == 1.
   ASSERT_EQ(1u, output_manager_->GetAllOutputs().size());
-  ASSERT_TRUE(output_);
-  ASSERT_EQ(1, output_->GetScale());
 
   // Ensure |surface_| has not entered any wl_output. Assuming |window_| has
   // been already initialized with |output_|'s scale.
-  wl_surface_send_leave(surface_->resource(), output_->resource());
-  Sync();
+  const uint32_t surface_id = window_->root_surface()->get_surface_id();
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    auto* output = server->output();
+    ASSERT_TRUE(output);
+    ASSERT_EQ(1, output->GetScale());
+    wl_surface_send_leave(
+        server->GetObject<wl::MockSurface>(surface_id)->resource(),
+        server->output()->resource());
+  });
+
   EXPECT_FALSE(window_->GetPreferredEnteredOutputId());
 
   // Change |output_|'s scale and make sure |window_|'s scale is update
   // accordingly.
-  output_->SetScale(2);
-  output_->Flush();
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    server->output()->SetScale(2);
+    server->output()->Flush();
+  });
 
   EXPECT_EQ(window_->window_scale(), 2);
   EXPECT_EQ(window_->ui_scale(), 2);
@@ -906,10 +1027,11 @@
       };
 
   for (const auto& [transform, expected_rotation] : kTestData) {
-    output_->SetTransform(transform);
-    output_->Flush();
-
-    Sync();
+    PostToServerAndWait(
+        [new_transform = transform](wl::TestWaylandServerThread* server) {
+          server->output()->SetTransform(new_transform);
+          server->output()->Flush();
+        });
 
     auto main_display = platform_screen_->GetPrimaryDisplay();
     EXPECT_EQ(main_display.rotation(), expected_rotation);
@@ -922,18 +1044,19 @@
     : public WaylandTest,
       public wl::TestWaylandServerThread::OutputDelegate {
  public:
-  LazilyConfiguredScreenTest() = default;
+  // TODO(crbug.com/1365887): TestServerMode::kAsync must be removed once all
+  // tests switch to asynchronous mode.
+  LazilyConfiguredScreenTest()
+      : WaylandTest(WaylandTest::TestServerMode::kAsync) {}
   LazilyConfiguredScreenTest(const LazilyConfiguredScreenTest&) = delete;
   LazilyConfiguredScreenTest& operator=(const LazilyConfiguredScreenTest&) =
       delete;
   ~LazilyConfiguredScreenTest() override = default;
 
   void SetUp() override {
-    // Being the server's output delegate allows LazilyConfiguredScreenTest to
-    // manipulate wl_outputs during the server's global objects initialization
-    // phase. See SetupOutputs() function below.
+    // This can be set on the client thread as the server is not running yet.
+    ASSERT_FALSE(server_.IsRunning());
     server_.set_output_delegate(this);
-
     WaylandTest::SetUp();
 
     output_manager_ = connection_->wayland_output_manager();
@@ -942,12 +1065,22 @@
 
   void TearDown() override {
     WaylandTest::TearDown();
-    server_.set_output_delegate(nullptr);
+
+    PostToServerAndWait(
+        [output = aux_output_](wl::TestWaylandServerThread* server) {
+          output->DestroyGlobal();
+          server->set_output_delegate(nullptr);
+        });
+    aux_output_ = nullptr;
+    primary_output_ = nullptr;
   }
 
  protected:
   // wl::TestWaylandServerThread::OutputDelegate:
   void SetupOutputs(wl::TestOutput* primary) override {
+    // This happens before the server starts to run.
+    ASSERT_FALSE(server_.IsRunning());
+
     // Keep the first wl_output announced "unconfigured" and just caches it for
     // now, so we can exercise WaylandOutputManager::IsOutputReady() function
     // when wl_output events come in unordered.
@@ -960,10 +1093,11 @@
     aux_output_->SetRect({0, 0, 800, 600});
   }
 
+  // Must only be accessed on the server thread.
   raw_ptr<wl::TestOutput> primary_output_ = nullptr;
   raw_ptr<wl::TestOutput> aux_output_ = nullptr;
+
   raw_ptr<WaylandOutputManager> output_manager_ = nullptr;
-  bool auto_configure;
 };
 
 }  // namespace
@@ -977,14 +1111,15 @@
   EXPECT_TRUE(output_manager_->IsOutputReady());
   EXPECT_TRUE(screen_);
   EXPECT_EQ(1u, screen_->GetAllDisplays().size());
-  Sync();
 
   // Send wl_output configuration events for the first advertised wl_output
   // object. ie: |primary_output_| at server side.
-  primary_output_->SetRect({800, 0, kOutputWidth, kOutputHeight});
-  primary_output_->SetScale(1);
-  primary_output_->Flush();
-  Sync();
+  PostToServerAndWait(
+      [output = primary_output_](wl::TestWaylandServerThread* server) {
+        output->SetRect({800, 0, kOutputWidth, kOutputHeight});
+        output->SetScale(1);
+        output->Flush();
+      });
 
   // And make sure it makes its way into the WaylandScreen's display list at
   // client side.
@@ -997,11 +1132,11 @@
   TestDisplayObserver observer;
   platform_screen_->AddObserver(&observer);
 
-  const gfx::Rect physical_bounds{800, 600};
-  output_->SetRect(physical_bounds);
-  output_->Flush();
-
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    const gfx::Rect physical_bounds{800, 600};
+    server->output()->SetRect(physical_bounds);
+    server->output()->Flush();
+  });
 
   uint32_t changed_values = display::DisplayObserver::DISPLAY_METRIC_BOUNDS |
                             display::DisplayObserver::DISPLAY_METRIC_WORK_AREA;
@@ -1015,11 +1150,12 @@
   // Test work area.
   const gfx::Rect new_work_area{10, 20, 700, 500};
   const gfx::Insets expected_inset = expected_bounds.InsetsFrom(new_work_area);
-  ASSERT_TRUE(output_->GetAuraOutput());
-  output_->GetAuraOutput()->SetInsets(expected_inset);
-  output_->Flush();
-
-  Sync();
+  PostToServerAndWait([expected_inset](wl::TestWaylandServerThread* server) {
+    auto* output = server->output();
+    ASSERT_TRUE(output->GetAuraOutput());
+    output->GetAuraOutput()->SetInsets(expected_inset);
+    output->Flush();
+  });
 
   changed_values = display::DisplayObserver::DISPLAY_METRIC_WORK_AREA;
   EXPECT_EQ(observer.GetAndClearChangedMetrics(), changed_values);
@@ -1030,18 +1166,19 @@
   EXPECT_EQ(observer.GetDisplay().work_area(), new_work_area);
 
   // Test scaling.
-  const int32_t new_scale_value = 2;
-  output_->SetScale(new_scale_value);
-  output_->Flush();
-
-  Sync();
+  constexpr int32_t kNewScaleValue = 2;
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* output = server->output();
+    output->SetScale(kNewScaleValue);
+    output->Flush();
+  });
 
   changed_values =
       display::DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR |
       display::DisplayObserver::DISPLAY_METRIC_WORK_AREA |
       display::DisplayObserver::DISPLAY_METRIC_BOUNDS;
   EXPECT_EQ(observer.GetAndClearChangedMetrics(), changed_values);
-  EXPECT_EQ(observer.GetDisplay().device_scale_factor(), new_scale_value);
+  EXPECT_EQ(observer.GetDisplay().device_scale_factor(), kNewScaleValue);
   // Logical bounds should shrink due to scaling.
   const gfx::Rect scaled_bounds{400, 300};
   EXPECT_EQ(observer.GetDisplay().bounds(), scaled_bounds);
@@ -1052,10 +1189,11 @@
   EXPECT_EQ(observer.GetDisplay().work_area(), scaled_work_area);
 
   // Test rotation.
-  output_->SetTransform(WL_OUTPUT_TRANSFORM_90);
-  output_->Flush();
-
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* output = server->output();
+    output->SetTransform(WL_OUTPUT_TRANSFORM_90);
+    output->Flush();
+  });
 
   changed_values = display::DisplayObserver::DISPLAY_METRIC_WORK_AREA |
                    display::DisplayObserver::DISPLAY_METRIC_BOUNDS |
@@ -1090,26 +1228,29 @@
 
   // wl_output.geometry origin is set in DIP screen coordinates.
   const gfx::Point origin(50, 70);
-  // wl_output.mode size is sent in physical coordinates, so it has portrait
-  // dimensions for a display panel with portrait natural orientation.
-  const gfx::Size physical_size(1200, 1600);
-  output_->SetRect({origin, physical_size});
+  PostToServerAndWait([origin](wl::TestWaylandServerThread* server) {
+    // wl_output.mode size is sent in physical coordinates, so it has portrait
+    // dimensions for a display panel with portrait natural orientation.
+    const gfx::Size physical_size(1200, 1600);
+    server->output()->SetRect({origin, physical_size});
+  });
 
   // Inset is sent in logical coordinates.
   const gfx::Insets insets = gfx::Insets::TLBR(10, 20, 30, 40);
-  ASSERT_TRUE(output_->GetAuraOutput());
-  output_->GetAuraOutput()->SetInsets(insets);
+  PostToServerAndWait([insets](wl::TestWaylandServerThread* server) {
+    auto* output = server->output();
+    ASSERT_TRUE(output->GetAuraOutput());
+    output->GetAuraOutput()->SetInsets(insets);
 
-  // Display panel's natural orientation is in portrait, so it needs a transform
-  // of 90 degrees to be in landscape.
-  output_->SetTransform(WL_OUTPUT_TRANSFORM_90);
-  // Begin with the logical transform at 0 degrees.
-  output_->GetAuraOutput()->SetLogicalTransform(WL_OUTPUT_TRANSFORM_NORMAL);
+    // Display panel's natural orientation is in portrait, so it needs a
+    // transform of 90 degrees to be in landscape.
+    output->SetTransform(WL_OUTPUT_TRANSFORM_90);
+    // Begin with the logical transform at 0 degrees.
+    output->GetAuraOutput()->SetLogicalTransform(WL_OUTPUT_TRANSFORM_NORMAL);
 
-  output_->SetScale(2);
-  output_->Flush();
-
-  Sync();
+    output->SetScale(2);
+    output->Flush();
+  });
 
   uint32_t changed_values =
       display::DisplayObserver::DISPLAY_METRIC_BOUNDS |
@@ -1136,11 +1277,12 @@
 
   // Further rotate the display to logical portrait orientation, which is 180
   // with the natural orientation offset.
-  output_->SetTransform(WL_OUTPUT_TRANSFORM_180);
-  output_->GetAuraOutput()->SetLogicalTransform(WL_OUTPUT_TRANSFORM_90);
-  output_->Flush();
-
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* output = server->output();
+    output->SetTransform(WL_OUTPUT_TRANSFORM_180);
+    output->GetAuraOutput()->SetLogicalTransform(WL_OUTPUT_TRANSFORM_90);
+    output->Flush();
+  });
 
   changed_values = display::DisplayObserver::DISPLAY_METRIC_BOUNDS |
                    display::DisplayObserver::DISPLAY_METRIC_WORK_AREA |
diff --git a/ui/ozone/platform/wayland/host/wayland_zaura_output_unittest.cc b/ui/ozone/platform/wayland/host/wayland_zaura_output_unittest.cc
index f90f1b8d..2c6afbf 100644
--- a/ui/ozone/platform/wayland/host/wayland_zaura_output_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_zaura_output_unittest.cc
@@ -4,60 +4,38 @@
 
 #include "ui/ozone/platform/wayland/host/wayland_zaura_output.h"
 
-#include <aura-shell-client-protocol.h>
-#include <aura-shell-server-protocol.h>
-#include <wayland-server-protocol.h>
-
 #include "base/memory/raw_ptr.h"
-#include "base/run_loop.h"
-#include "base/test/task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/ozone/platform/wayland/host/wayland_connection.h"
-#include "ui/ozone/platform/wayland/host/wayland_event_source.h"
 #include "ui/ozone/platform/wayland/host/wayland_output.h"
 #include "ui/ozone/platform/wayland/host/wayland_output_manager.h"
 #include "ui/ozone/platform/wayland/test/mock_zaura_shell.h"
-#include "ui/ozone/platform/wayland/test/server_object.h"
-#include "ui/ozone/platform/wayland/test/test_wayland_server_thread.h"
 #include "ui/ozone/platform/wayland/test/test_zaura_output.h"
-
-#include "base/logging.h"
+#include "ui/ozone/platform/wayland/test/wayland_test.h"
 
 namespace ui {
 
 using ::testing::Values;
 namespace {
-class WaylandZAuraOutputTest : public ::testing::Test {
+class WaylandZAuraOutputTest : public WaylandTest {
  public:
-  WaylandZAuraOutputTest()
-      : task_environment_(
-            base::test::SingleThreadTaskEnvironment::MainThreadType::UI) {}
-
+  WaylandZAuraOutputTest() : WaylandTest(TestServerMode::kAsync) {}
   WaylandZAuraOutputTest(const WaylandZAuraOutputTest&) = delete;
   WaylandZAuraOutputTest& operator=(const WaylandZAuraOutputTest&) = delete;
-
   ~WaylandZAuraOutputTest() override = default;
 
   void SetUp() override {
-    ::testing::Test::SetUp();
-
-    ASSERT_TRUE(server_.Start({}));
-    mock_zaura_shell_.Initialize(server_.display());
-
-    ASSERT_TRUE(connection_.Initialize());
-    connection_.event_source()->StartProcessingEvents();
-    base::RunLoop().RunUntilIdle();
+    WaylandTest::SetUp();
 
     // Set default values for the output.
-    wl::TestOutput* output = server_.output();
-    output->SetRect({800, 600});
-    output->SetScale(1);
-    output->Flush();
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      wl::TestOutput* output = server->output();
+      output->SetRect({800, 600});
+      output->SetScale(1);
+      output->Flush();
+    });
 
-    base::RunLoop().RunUntilIdle();
-    server_.Pause();
-
-    output_manager_ = connection_.wayland_output_manager();
+    output_manager_ = connection_->wayland_output_manager();
     ASSERT_TRUE(output_manager_);
     EXPECT_TRUE(output_manager_->IsOutputReady());
 
@@ -68,18 +46,13 @@
   }
 
  protected:
-  base::test::SingleThreadTaskEnvironment task_environment_;
-  wl::TestWaylandServerThread server_;
-  wl::MockZAuraShell mock_zaura_shell_;
-  WaylandConnection connection_;
-
   raw_ptr<WaylandOutputManager> output_manager_ = nullptr;
   std::unique_ptr<WaylandScreen> platform_screen_;
 };
 
 }  // namespace
 
-TEST_F(WaylandZAuraOutputTest, HandleInsets) {
+TEST_P(WaylandZAuraOutputTest, HandleInsets) {
   WaylandOutput* wayland_output = output_manager_->GetPrimaryOutput();
   ASSERT_TRUE(wayland_output);
   EXPECT_TRUE(wayland_output->IsReady());
@@ -87,28 +60,26 @@
   EXPECT_TRUE(wayland_output->insets().IsEmpty());
   EXPECT_TRUE(wayland_output->get_zaura_output());
 
-  // Simulate server sending updated insets to the client.
-  wl_resource* zaura_output_resource =
-      server_.output()->GetAuraOutput()->resource();
-  ASSERT_TRUE(zaura_output_resource);
-  const gfx::Insets sent_insets =
+  const gfx::Insets insets =
       gfx::Rect(800, 600).InsetsFrom(gfx::Rect(10, 10, 500, 400));
-  EXPECT_FALSE(sent_insets.IsEmpty());
-  zaura_output_send_insets(zaura_output_resource, sent_insets.top(),
-                           sent_insets.left(), sent_insets.bottom(),
-                           sent_insets.right());
 
-  server_.Resume();
-  base::RunLoop().RunUntilIdle();
-  server_.Pause();
+  // Simulate server sending updated insets to the client.
+  PostToServerAndWait([&insets](wl::TestWaylandServerThread* server) {
+    auto* const zaura_output = server->output()->GetAuraOutput()->resource();
+
+    ASSERT_TRUE(zaura_output);
+    EXPECT_FALSE(insets.IsEmpty());
+    zaura_output_send_insets(zaura_output, insets.top(), insets.left(),
+                             insets.bottom(), insets.right());
+  });
 
   // Verify that insets is updated.
   EXPECT_TRUE(wayland_output->IsReady());
   EXPECT_EQ(wayland_output->physical_size(), gfx::Size(800, 600));
-  EXPECT_EQ(wayland_output->insets(), sent_insets);
+  EXPECT_EQ(wayland_output->insets(), insets);
 }
 
-TEST_F(WaylandZAuraOutputTest, HandleLogicalTransform) {
+TEST_P(WaylandZAuraOutputTest, HandleLogicalTransform) {
   WaylandOutput* wayland_output = output_manager_->GetPrimaryOutput();
   ASSERT_TRUE(wayland_output);
   EXPECT_TRUE(wayland_output->IsReady());
@@ -116,22 +87,18 @@
   EXPECT_TRUE(wayland_output->get_zaura_output());
 
   // Simulate server sending updated transform offset to the client.
-  wl_resource* zaura_output_resource =
-      server_.output()->GetAuraOutput()->resource();
-  ASSERT_TRUE(zaura_output_resource);
-  zaura_output_send_logical_transform(zaura_output_resource,
-                                      WL_OUTPUT_TRANSFORM_270);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* const zaura_output = server->output()->GetAuraOutput()->resource();
 
-  server_.Resume();
-  base::RunLoop().RunUntilIdle();
-  server_.Pause();
+    zaura_output_send_logical_transform(zaura_output, WL_OUTPUT_TRANSFORM_270);
+  });
 
   EXPECT_TRUE(wayland_output->IsReady());
   EXPECT_EQ(wayland_output->logical_transform(), WL_OUTPUT_TRANSFORM_270);
 }
 
 // Test edge case display ids are converted correctly.
-TEST_F(WaylandZAuraOutputTest, DisplayIdConversions) {
+TEST_P(WaylandZAuraOutputTest, DisplayIdConversions) {
   const int64_t kTestIds[] = {
       std::numeric_limits<int64_t>::min(),
       std::numeric_limits<int64_t>::min() + 1,
@@ -155,4 +122,8 @@
   }
 }
 
+INSTANTIATE_TEST_SUITE_P(XdgVersionStableTest,
+                         WaylandZAuraOutputTest,
+                         Values(wl::ServerConfig{}));
+
 }  // namespace ui
diff --git a/ui/ozone/platform/wayland/test/mock_wp_presentation.cc b/ui/ozone/platform/wayland/test/mock_wp_presentation.cc
index 32229e7..fa8f6960 100644
--- a/ui/ozone/platform/wayland/test/mock_wp_presentation.cc
+++ b/ui/ozone/platform/wayland/test/mock_wp_presentation.cc
@@ -6,6 +6,7 @@
 
 #include <wayland-server-core.h>
 
+#include "base/logging.h"
 #include "ui/ozone/platform/wayland/test/server_object.h"
 
 namespace wl {
@@ -20,7 +21,8 @@
   wl_resource* presentation_feedback_resource =
       wl_resource_create(client, &wp_presentation_feedback_interface,
                          wl_resource_get_version(resource), callback);
-  wp_presentation->set_presentation_callback(presentation_feedback_resource);
+  DCHECK(presentation_feedback_resource);
+  wp_presentation->OnFeedback(presentation_feedback_resource);
   wp_presentation->Feedback(client, resource, surface, callback);
 }
 
@@ -34,36 +36,61 @@
 MockWpPresentation::MockWpPresentation()
     : GlobalObject(&wp_presentation_interface, &kMockWpPresentationImpl, 1) {}
 
-MockWpPresentation::~MockWpPresentation() {}
+MockWpPresentation::~MockWpPresentation() = default;
 
-wl_resource* MockWpPresentation::ReleasePresentationCallback() {
-  auto* presentation_callback = presentation_callback_.get();
-  presentation_callback_ = nullptr;
-  return presentation_callback;
+void MockWpPresentation::OnFeedback(wl_resource* callback_resource) {
+  DCHECK(callback_resource);
+  presentation_callbacks_.emplace_back(callback_resource);
+}
+
+void MockWpPresentation::DropPresentationCallback(bool last) {
+  wl_resource* callback_resource = GetPresentationCallbackResource(last);
+  wl_resource_destroy(callback_resource);
 }
 
 void MockWpPresentation::SendPresentationCallback() {
-  if (!presentation_callback_)
-    return;
-
-  // TODO(msisov): add support for test provided presentation feedback values.
-  wp_presentation_feedback_send_presented(
-      presentation_callback_, 0 /* tv_sec_hi */, 0 /* tv_sec_lo */,
-      0 /* tv_nsec */, 0 /* refresh */, 0 /* seq_hi */, 0 /* seq_lo */,
-      0 /* flags */);
-  wl_client_flush(wl_resource_get_client(presentation_callback_));
-  wl_resource_destroy(presentation_callback_);
-  presentation_callback_ = nullptr;
+  SendPresentationFeedbackToClient(/*last=*/false, /*discarded=*/false);
 }
 
-void MockWpPresentation::SendPresentationCallbackDiscarded() {
-  if (!presentation_callback_)
+void MockWpPresentation::SendPresentationCallbackDiscarded(bool last) {
+  SendPresentationFeedbackToClient(last, /*discarded=*/true);
+}
+
+void MockWpPresentation::SendPresentationFeedbackToClient(bool last,
+                                                          bool discarded) {
+  wl_resource* callback_resource = GetPresentationCallbackResource(last);
+  if (!callback_resource)
     return;
 
-  wp_presentation_feedback_send_discarded(presentation_callback_);
-  wl_client_flush(wl_resource_get_client(presentation_callback_));
-  wl_resource_destroy(presentation_callback_);
-  presentation_callback_ = nullptr;
+  if (discarded) {
+    wp_presentation_feedback_send_discarded(callback_resource);
+  } else {
+    // TODO(msisov): add support for test provided presentation feedback values.
+    wp_presentation_feedback_send_presented(
+        callback_resource, 0 /* tv_sec_hi */, 0 /* tv_sec_lo */,
+        0 /* tv_nsec */, 0 /* refresh */, 0 /* seq_hi */, 0 /* seq_lo */,
+        0 /* flags */);
+  }
+  wl_client_flush(wl_resource_get_client(callback_resource));
+  wl_resource_destroy(callback_resource);
+}
+
+wl_resource* MockWpPresentation::GetPresentationCallbackResource(bool last) {
+  if (presentation_callbacks_.empty()) {
+    LOG(WARNING) << "MockWpPresentation doesn't have pending requests for "
+                    "presentation feedbacks.";
+    return nullptr;
+  }
+
+  wl_resource* callback_resource = nullptr;
+  if (last) {
+    callback_resource = presentation_callbacks_.back();
+    presentation_callbacks_.pop_back();
+  } else {
+    callback_resource = presentation_callbacks_.front();
+    presentation_callbacks_.erase(presentation_callbacks_.begin());
+  }
+  return callback_resource;
 }
 
 }  // namespace wl
diff --git a/ui/ozone/platform/wayland/test/mock_wp_presentation.h b/ui/ozone/platform/wayland/test/mock_wp_presentation.h
index 14535ab..6a5cb3fc 100644
--- a/ui/ozone/platform/wayland/test/mock_wp_presentation.h
+++ b/ui/ozone/platform/wayland/test/mock_wp_presentation.h
@@ -33,18 +33,33 @@
                     struct wl_resource* surface,
                     uint32_t callback));
 
-  void set_presentation_callback(wl_resource* callback_resource) {
-    DCHECK(!presentation_callback_ || callback_resource == nullptr);
-    presentation_callback_ = callback_resource;
+  size_t num_of_presentation_callbacks() const {
+    return presentation_callbacks_.size();
   }
 
-  wl_resource* ReleasePresentationCallback();
+  void OnFeedback(wl_resource* callback_resource);
 
+  // Drops first presentation callback from |presentation_callbacks|. If |last|
+  // is true, the last item is dropped instead.
+  void DropPresentationCallback(bool last = false);
+
+  // Sends successful presentation callback for the first callback item in
+  // |presentation_callbacks| and deletes that.
   void SendPresentationCallback();
-  void SendPresentationCallbackDiscarded();
+  // Sends failed presentation callback for the first callback item (if |last|
+  // is true, then the very recent one) in |presentation_callbacks| and deletes
+  // that.
+  void SendPresentationCallbackDiscarded(bool last = false);
 
  private:
-  raw_ptr<wl_resource> presentation_callback_ = nullptr;
+  // Sends either discarded or succeeded, which is based on |discarded|,
+  // feedback to client and deletes the feedback resource. Which feedback is
+  // sent (the oldest or the most recent) is based on |last| value.
+  void SendPresentationFeedbackToClient(bool last, bool discarded);
+
+  wl_resource* GetPresentationCallbackResource(bool last);
+
+  std::vector<raw_ptr<wl_resource>> presentation_callbacks_;
 };
 
 }  // namespace wl
diff --git a/ui/ozone/platform/wayland/test/test_wayland_server_thread.cc b/ui/ozone/platform/wayland/test/test_wayland_server_thread.cc
index fae52d7..5a43400 100644
--- a/ui/ozone/platform/wayland/test/test_wayland_server_thread.cc
+++ b/ui/ozone/platform/wayland/test/test_wayland_server_thread.cc
@@ -228,7 +228,9 @@
   run_loop.Run();
 }
 
-MockWpPresentation* TestWaylandServerThread::EnsureWpPresentation() {
+MockWpPresentation* TestWaylandServerThread::EnsureAndGetWpPresentation() {
+  if (wp_presentation_.resource())
+    return &wp_presentation_;
   if (wp_presentation_.Initialize(display_.get()))
     return &wp_presentation_;
   return nullptr;
diff --git a/ui/ozone/platform/wayland/test/test_wayland_server_thread.h b/ui/ozone/platform/wayland/test/test_wayland_server_thread.h
index 4fafa4e..02e9e8e 100644
--- a/ui/ozone/platform/wayland/test/test_wayland_server_thread.h
+++ b/ui/ozone/platform/wayland/test/test_wayland_server_thread.h
@@ -114,8 +114,9 @@
   void RunAndWait(base::OnceCallback<void(TestWaylandServerThread*)> callback);
   void RunAndWait(base::OnceClosure closure);
 
-  // Initializes and returns WpPresentation.
-  MockWpPresentation* EnsureWpPresentation();
+  // Returns WpPresentation. If it hasn't been initialized yet, initializes that
+  // first and then returns.
+  MockWpPresentation* EnsureAndGetWpPresentation();
   // Initializes and returns SurfaceAugmenter.
   TestSurfaceAugmenter* EnsureSurfaceAugmenter();
 
diff --git a/ui/ozone/platform/wayland/test/wayland_test.cc b/ui/ozone/platform/wayland/test/wayland_test.cc
index 8d8c324..338d443 100644
--- a/ui/ozone/platform/wayland/test/wayland_test.cc
+++ b/ui/ozone/platform/wayland/test/wayland_test.cc
@@ -220,6 +220,12 @@
   SendConfigureEvent(xdg_surface, {0, 0}, 1, state.get());
 }
 
+void WaylandTest::ActivateSurface(uint32_t surface_id) {
+  ASSERT_EQ(server_mode_, TestServerMode::kAsync);
+  wl::ScopedWlArray state({XDG_TOPLEVEL_STATE_ACTIVATED});
+  SendConfigureEvent(surface_id, {0, 0}, state);
+}
+
 void WaylandTest::InitializeSurfaceAugmenter() {
   if (server_mode_ == TestServerMode::kAsync) {
     PostToServerAndWait([](wl::TestWaylandServerThread* server) {
diff --git a/ui/ozone/platform/wayland/test/wayland_test.h b/ui/ozone/platform/wayland/test/wayland_test.h
index dd0134b..a91e8b5 100644
--- a/ui/ozone/platform/wayland/test/wayland_test.h
+++ b/ui/ozone/platform/wayland/test/wayland_test.h
@@ -106,6 +106,9 @@
   // height set to 0, which results in asking the client to set the width and
   // height of the surface.
   void ActivateSurface(wl::MockXdgSurface* xdg_surface);
+  // Same as above, but uses surface_id. Requires the tests to use async test
+  // server.
+  void ActivateSurface(uint32_t surface_id);
 
   // Initializes SurfaceAugmenter in |server_|.
   void InitializeSurfaceAugmenter();
diff --git a/ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc b/ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc
index 70e1d6e..f24498e 100644
--- a/ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc
+++ b/ui/ozone/platform/wayland/wayland_buffer_manager_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/memory/raw_ptr.h"
+#include "base/run_loop.h"
 #include "base/test/mock_callback.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -101,7 +102,10 @@
 
 class WaylandBufferManagerTest : public WaylandTest {
  public:
-  WaylandBufferManagerTest() = default;
+  // TODO(crbug.com/1365887): TestServerMode::kAsync must be removed once all
+  // tests switch to asynchronous mode.
+  WaylandBufferManagerTest()
+      : WaylandTest(WaylandTest::TestServerMode::kAsync) {}
 
   WaylandBufferManagerTest(const WaylandBufferManagerTest&) = delete;
   WaylandBufferManagerTest& operator=(const WaylandBufferManagerTest&) = delete;
@@ -109,6 +113,12 @@
   ~WaylandBufferManagerTest() override = default;
 
   void SetUp() override {
+    // Set this bug fix so that WaylandFrameManager does not use a freeze
+    // counter. Otherwise, we won't be able to have a reliable test order of
+    // frame submissions. This must be set before any window is created
+    // (WaylandTest does that for us during the SetUp phase).
+    server_.zaura_shell()->SetBugFixes({1358908});
+
     WaylandTest::SetUp();
 
     manager_host_ = connection_->buffer_manager_host();
@@ -124,9 +134,40 @@
 
     window_->set_update_visual_size_immediately_for_testing(false);
     window_->set_apply_pending_state_on_update_visual_size_for_testing(false);
+    surface_id_ = window_->root_surface()->get_surface_id();
+  }
+
+  void TearDown() override {
+    // MockGpuSurface will unregister itself from the WaylandBuffermanagerGpu,
+    // which will remove objects associated with this surface on another thread.
+    // This run loop gives it a chance to do that.
+    base::RunLoop().RunUntilIdle();
+    WaylandTest::TearDown();
   }
 
  protected:
+  void SendFrameCallbackForSurface(uint32_t surface_id) {
+    PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+      auto* mock_surface = server->GetObject<wl::MockSurface>(surface_id);
+      ASSERT_TRUE(mock_surface);
+      mock_surface->SendFrameCallback();
+    });
+  }
+
+  // Might be null. Make sure to not manipulate the returned resource on the
+  // client thread. Though, if the client does that, the server is able to catch
+  // calls for libwayland-server on a wrong thread.
+  wl_resource* GetSurfaceAttachedBuffer(uint32_t surface_id) {
+    wl_resource* wl_buffer = nullptr;
+    PostToServerAndWait(
+        [&wl_buffer, surface_id](wl::TestWaylandServerThread* server) {
+          auto* mock_surface = server->GetObject<wl::MockSurface>(surface_id);
+          ASSERT_TRUE(mock_surface);
+          wl_buffer = mock_surface->attached_buffer();
+        });
+    return wl_buffer;
+  }
+
   base::ScopedFD MakeFD() {
     base::FilePath temp_path;
     EXPECT_TRUE(base::CreateTemporaryFile(&temp_path));
@@ -189,7 +230,7 @@
         std::move(fd), kDefaultSize, strides, offsets, modifiers, format,
         planes_count, buffer_id);
 
-    Sync();
+    base::RunLoop().RunUntilIdle();
   }
 
   void CreateShmBasedBufferAndSetTerminateExpecation(
@@ -204,7 +245,7 @@
     buffer_manager_gpu_->CreateShmBasedBuffer(MakeFD(), length, size,
                                               buffer_id);
 
-    Sync();
+    base::RunLoop().RunUntilIdle();
   }
 
   void DestroyBufferAndSetTerminateExpectation(uint32_t buffer_id, bool fail) {
@@ -212,23 +253,27 @@
 
     buffer_manager_gpu_->DestroyBuffer(buffer_id);
 
-    Sync();
+    base::RunLoop().RunUntilIdle();
   }
 
   void ProcessCreatedBufferResourcesWithExpectation(size_t expected_size,
                                                     bool fail) {
-    auto params_vector = server_.zwp_linux_dmabuf_v1()->buffer_params();
-    // To ensure, no other buffers are created, test the size of the vector.
-    EXPECT_EQ(params_vector.size(), expected_size);
+    PostToServerAndWait(
+        [expected_size, fail](wl::TestWaylandServerThread* server) {
+          auto params_vector = server->zwp_linux_dmabuf_v1()->buffer_params();
+          // To ensure, no other buffers are created, test the size of the
+          // vector.
+          EXPECT_EQ(params_vector.size(), expected_size);
 
-    for (auto* mock_params : params_vector) {
-      if (!fail) {
-        zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
-                                                mock_params->buffer_resource());
-      } else {
-        zwp_linux_buffer_params_v1_send_failed(mock_params->resource());
-      }
-    }
+          for (auto* mock_params : params_vector) {
+            if (!fail) {
+              zwp_linux_buffer_params_v1_send_created(
+                  mock_params->resource(), mock_params->buffer_resource());
+            } else {
+              zwp_linux_buffer_params_v1_send_failed(mock_params->resource());
+            }
+          }
+        });
   }
 
   std::unique_ptr<WaylandWindow> CreateWindow(
@@ -243,7 +288,7 @@
                                             std::move(properties));
     EXPECT_TRUE(new_window);
 
-    Sync();
+    SyncDisplay();
 
     EXPECT_NE(new_window->GetWidget(), gfx::kNullAcceleratedWidget);
     return new_window;
@@ -269,16 +314,34 @@
     return config;
   }
 
+  void CommitBuffer(gfx::AcceleratedWidget widget,
+                    uint32_t frame_id,
+                    uint32_t buffer_id,
+                    const gfx::Rect& bounds_rect,
+                    const gfx::RoundedCornersF& corners,
+                    float surface_scale_factor,
+                    const gfx::Rect& damage_region) {
+    buffer_manager_gpu_->CommitBuffer(widget, frame_id, buffer_id, bounds_rect,
+                                      corners, surface_scale_factor,
+                                      damage_region);
+    // Let the mojo message to be processed.
+    base::RunLoop().RunUntilIdle();
+  }
+
   MockTerminateGpuCallback callback_;
   raw_ptr<WaylandBufferManagerHost> manager_host_;
   // Error message that is received when the manager_host destroys the channel.
   std::string channel_destroyed_error_message_;
+
+  uint32_t surface_id_ = 0u;
 };
 
 TEST_P(WaylandBufferManagerTest, CreateDmabufBasedBuffers) {
   constexpr uint32_t kDmabufBufferId = 1;
 
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
 
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                     kDmabufBufferId);
@@ -296,13 +359,13 @@
   // Tests that fourcc format is added, but invalid modifier is ignored first.
   // Then, when valid modifier comes, it is stored.
   for (const auto& modifier : kFormatModifiers) {
-    uint32_t modifier_hi = modifier >> 32;
-    uint32_t modifier_lo = modifier & UINT32_MAX;
-    zwp_linux_dmabuf_v1_send_modifier(server_.zwp_linux_dmabuf_v1()->resource(),
-                                      kFourccFormatR8, modifier_hi,
-                                      modifier_lo);
-
-    Sync();
+    PostToServerAndWait([modifier](wl::TestWaylandServerThread* server) {
+      uint32_t modifier_hi = modifier >> 32;
+      uint32_t modifier_lo = modifier & UINT32_MAX;
+      zwp_linux_dmabuf_v1_send_modifier(
+          server->zwp_linux_dmabuf_v1()->resource(), kFourccFormatR8,
+          modifier_hi, modifier_lo);
+    });
 
     auto buffer_formats =
         connection_->wayland_buffer_factory()->GetSupportedBufferFormats();
@@ -319,18 +382,21 @@
     }
   }
 
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
 
   CreateDmabufBasedBufferAndSetTerminateExpectation(
       false /*fail*/, kDmabufBufferId, base::ScopedFD(), kDefaultSize, {1}, {2},
       {kFormatModiferLinear}, kFourccFormatR8, 1);
 
-  Sync();
-
-  auto params_vector = server_.zwp_linux_dmabuf_v1()->buffer_params();
-  EXPECT_EQ(params_vector.size(), 1u);
-  EXPECT_EQ(params_vector[0]->modifier_hi_, kFormatModiferLinear >> 32);
-  EXPECT_EQ(params_vector[0]->modifier_lo_, kFormatModiferLinear & UINT32_MAX);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto params_vector = server->zwp_linux_dmabuf_v1()->buffer_params();
+    EXPECT_EQ(params_vector.size(), 1u);
+    EXPECT_EQ(params_vector[0]->modifier_hi_, kFormatModiferLinear >> 32);
+    EXPECT_EQ(params_vector[0]->modifier_lo_,
+              kFormatModiferLinear & UINT32_MAX);
+  });
 
   // Clean up.
   DestroyBufferAndSetTerminateExpectation(kDmabufBufferId, false /*fail*/);
@@ -384,7 +450,10 @@
   // This section tests that it is impossible to create buffers with the same
   // id if they haven't been assigned to any surfaces yet.
   {
-    EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(2);
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _))
+          .Times(2);
+    });
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                       kBufferId1);
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
@@ -398,13 +467,16 @@
   // ... impossible to create buffers with the same id if one of them
   // has already been attached to a surface.
   {
-    EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _))
+          .Times(1);
+    });
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                       kBufferId1);
 
-    buffer_manager_gpu_->CommitBuffer(
-        widget, kBufferId1, kBufferId1, window_->GetBoundsInPixels(),
-        gfx::RoundedCornersF(), kDefaultScale, gfx::Rect(window_->size_px()));
+    CommitBuffer(widget, kBufferId1, kBufferId1, window_->GetBoundsInPixels(),
+                 gfx::RoundedCornersF(), kDefaultScale,
+                 gfx::Rect(window_->size_px()));
 
     CreateDmabufBasedBufferAndSetTerminateExpectation(true /*fail*/,
                                                       kBufferId1);
@@ -421,13 +493,16 @@
 
   // Can destroy the buffer without specifying the widget.
   {
-    EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _))
+          .Times(1);
+    });
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                       kBufferId1);
 
-    buffer_manager_gpu_->CommitBuffer(
-        widget, kBufferId1, kBufferId1, window_->GetBoundsInPixels(),
-        gfx::RoundedCornersF(), kDefaultScale, gfx::Rect(window_->size_px()));
+    CommitBuffer(widget, kBufferId1, kBufferId1, window_->GetBoundsInPixels(),
+                 gfx::RoundedCornersF(), kDefaultScale,
+                 gfx::Rect(window_->size_px()));
 
     DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
   }
@@ -435,7 +510,10 @@
   // Still can destroy the buffer even if it has not been attached to any
   // widgets.
   {
-    EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _))
+          .Times(1);
+    });
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                       kBufferId1);
     DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
@@ -443,13 +521,16 @@
 
   // ... impossible to destroy buffers twice.
   {
-    EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _))
+          .Times(3);
+    });
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                       kBufferId1);
     // Attach to a surface.
-    buffer_manager_gpu_->CommitBuffer(
-        widget, kBufferId1, kBufferId1, window_->GetBoundsInPixels(),
-        gfx::RoundedCornersF(), kDefaultScale, gfx::Rect(window_->size_px()));
+    CommitBuffer(widget, kBufferId1, kBufferId1, window_->GetBoundsInPixels(),
+                 gfx::RoundedCornersF(), kDefaultScale,
+                 gfx::Rect(window_->size_px()));
 
     // Created non-attached buffer as well.
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
@@ -473,43 +554,51 @@
 }
 
 TEST_P(WaylandBufferManagerTest, CommitBufferNonExistingBufferId) {
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, 1u);
-  Sync();
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-  // Can't commit for non-existing buffer id.
-  constexpr uint32_t kNumberOfCommits = 0;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+    // Can't commit for non-existing buffer id.
+    constexpr uint32_t kNumberOfCommits = 0;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
-  buffer_manager_gpu_->CommitBuffer(
-      window_->GetWidget(), 1u, 5u, window_->GetBoundsInPixels(),
-      gfx::RoundedCornersF(), kDefaultScale, gfx::Rect(window_->size_px()));
+  CommitBuffer(window_->GetWidget(), 1u, 5u, window_->GetBoundsInPixels(),
+               gfx::RoundedCornersF(), kDefaultScale,
+               gfx::Rect(window_->size_px()));
 
-  Sync();
+  // Let the mojo call to go through.
+  base::RunLoop().RunUntilIdle();
+
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    testing::Mock::VerifyAndClearExpectations(
+        server->GetObject<wl::MockSurface>(id));
+  });
 }
 
 TEST_P(WaylandBufferManagerTest, CommitOverlaysNonExistingBufferId) {
   EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, 1u);
-  Sync();
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-  // Can't commit for non-existing buffer id.
-  constexpr uint32_t kNumberOfCommits = 0;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+    // Can't commit for non-existing buffer id.
+    constexpr uint32_t kNumberOfCommits = 0;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
   std::vector<wl::WaylandOverlayConfig> overlay_configs;
   overlay_configs.emplace_back(CreateBasicWaylandOverlayConfig(
@@ -520,15 +609,24 @@
   buffer_manager_gpu_->CommitOverlays(window_->GetWidget(), 1u,
                                       std::move(overlay_configs));
 
-  Sync();
+  // Let the mojo call to go through.
+  base::RunLoop().RunUntilIdle();
+
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    testing::Mock::VerifyAndClearExpectations(
+        server->GetObject<wl::MockSurface>(id));
+  });
 }
 
 TEST_P(WaylandBufferManagerTest, CommitOverlaysWithSameBufferId) {
   const size_t expected_number_of_buffers =
       connection_->linux_explicit_synchronization_v1() ? 1 : 2;
 
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _))
-      .Times(expected_number_of_buffers);
+  PostToServerAndWait(
+      [expected_number_of_buffers](wl::TestWaylandServerThread* server) {
+        EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _))
+            .Times(expected_number_of_buffers);
+      });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, 1u);
 
   // Re-using the same buffer id across multiple surfaces is allowed.
@@ -543,23 +641,28 @@
   buffer_manager_gpu_->CommitOverlays(window_->GetWidget(), 1u,
                                       std::move(overlay_configs));
 
-  Sync();
+  // Let the mojo call to go through.
+  base::RunLoop().RunUntilIdle();
+
   ProcessCreatedBufferResourcesWithExpectation(
       expected_number_of_buffers /* expected size */, false /* fail */);
 }
 
 TEST_P(WaylandBufferManagerTest, CommitBufferNullWidget) {
   constexpr uint32_t kBufferId = 1;
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId);
 
   // Can't commit for non-existing widget.
   SetTerminateCallbackExpectationAndDestroyChannel(&callback_, true /*fail*/);
-  buffer_manager_gpu_->CommitBuffer(
-      gfx::kNullAcceleratedWidget, 1u, kBufferId, window_->GetBoundsInPixels(),
-      gfx::RoundedCornersF(), kDefaultScale, gfx::Rect(window_->size_px()));
+  CommitBuffer(gfx::kNullAcceleratedWidget, 1u, kBufferId,
+               window_->GetBoundsInPixels(), gfx::RoundedCornersF(),
+               kDefaultScale, gfx::Rect(window_->size_px()));
 
-  Sync();
+  // Let the mojo call to go through.
+  base::RunLoop().RunUntilIdle();
 }
 
 // Tests that committing overlays with bounds_rect containing NaN or infinity
@@ -621,7 +724,7 @@
       buffer_manager_gpu_->CommitOverlays(window_->GetWidget(), 1u,
                                           std::move(overlay_configs));
 
-      Sync();
+      base::RunLoop().RunUntilIdle();
 
       if (!should_root_have_nan_bounds &&
           !connection_->linux_explicit_synchronization_v1()) {
@@ -629,25 +732,33 @@
         // during a frame playback if explicit sync is unavailable.
         ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                      false /* fail */);
-        Sync();
       }
 
       EXPECT_EQ("Overlay bounds_rect is invalid (NaN or infinity).",
                 channel_destroyed_error_message_);
 
-      // Clear all the possible frame and release callbacks.
-      auto* mock_surface = server_.GetObject<wl::MockSurface>(
-          window_->root_surface()->get_surface_id());
+      std::vector<uint32_t> ids_of_subsurfaces;
+      ids_of_subsurfaces.reserve(window_->wayland_subsurfaces_.size());
       for (auto& subsurface : window_->wayland_subsurfaces_) {
-        auto* mock_surface_of_subsurface = server_.GetObject<wl::MockSurface>(
+        ids_of_subsurfaces.emplace_back(
             subsurface->wayland_surface()->get_surface_id());
-        EXPECT_TRUE(mock_surface_of_subsurface);
-        mock_surface_of_subsurface->SendFrameCallback();
-        mock_surface_of_subsurface->ClearBufferReleases();
       }
 
-      mock_surface->SendFrameCallback();
-      mock_surface->ClearBufferReleases();
+      PostToServerAndWait([id = surface_id_, ids_of_subsurfaces](
+                              wl::TestWaylandServerThread* server) {
+        // Clear all the possible frame and release callbacks.
+        auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+        for (auto subsurface_id : ids_of_subsurfaces) {
+          auto* mock_surface_of_subsurface =
+              server->GetObject<wl::MockSurface>(subsurface_id);
+          EXPECT_TRUE(mock_surface_of_subsurface);
+          mock_surface_of_subsurface->SendFrameCallback();
+          mock_surface_of_subsurface->ClearBufferReleases();
+        }
+
+        mock_surface->SendFrameCallback();
+        mock_surface->ClearBufferReleases();
+      });
     }
   }
 }
@@ -662,23 +773,23 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget_);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(2);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(2);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
 
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(2u /* expected size */,
                                                false /* fail */);
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-  constexpr uint32_t kNumberOfCommits = 3;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+    constexpr uint32_t kNumberOfCommits = 3;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
   // All the other expectations must come in order.
   ::testing::InSequence sequence;
@@ -690,76 +801,74 @@
   ASSERT_TRUE(!connection_->presentation());
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  base::RunLoop().RunUntilIdle();
 
   // As long as there hasn't any previous buffer attached (nothing to release
   // yet), it must be enough to just send a frame callback back.
-  mock_surface->SendFrameCallback();
-
-  Sync();
+  SendFrameCallbackForSurface(surface_id_);
 
   // Commit second buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  base::RunLoop().RunUntilIdle();
 
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId2, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId2, _)).Times(1);
 
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
-  mock_surface->SendFrameCallback();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+    mock_surface->SendFrameCallback();
+  });
 
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    // wp_presentation is available now.
+    auto* mock_wp_presentation = server->EnsureAndGetWpPresentation();
+    ASSERT_TRUE(mock_wp_presentation);
 
-  // wp_presentation is available now.
-  auto* mock_wp_presentation = server_.EnsureWpPresentation();
-  ASSERT_TRUE(mock_wp_presentation);
-
-  Sync();
+    EXPECT_CALL(*mock_wp_presentation,
+                Feedback(_, _, mock_surface->resource(), _))
+        .Times(1);
+  });
 
   // Now, the wp_presentation object exists and there must be a real feedback
   // sent. Ensure the order now.
   ASSERT_TRUE(connection_->presentation());
 
-  EXPECT_CALL(*mock_wp_presentation,
-              Feedback(_, _, mock_surface->resource(), _))
-      .Times(1);
-
   // Commit second buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  base::RunLoop().RunUntilIdle();
 
-  // Even though, the server send the presentation feeedback, the host manager
+  // Even though, the server send the presentation feedback, the host manager
   // must make sure the order of the submission and presentation callbacks is
   // correct. Thus, no callbacks must be received by the MockSurfaceGpu.
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
-  mock_wp_presentation->SendPresentationCallback();
-
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    server->EnsureAndGetWpPresentation()->SendPresentationCallback();
+  });
 
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId1, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
 
-  // Now, send the release callback. The host manager must send the submission
-  // and presentation callbacks in correct order.
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
-
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    // Now, send the release callback. The host manager must send the submission
+    // and presentation callbacks in correct order.
+    mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+  });
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
   DestroyBufferAndSetTerminateExpectation(kBufferId2, false /*fail*/);
@@ -777,31 +886,30 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget_);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(3);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
+
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId3);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(3u /* expected size */,
                                                false /* fail */);
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  auto* mock_wp_presentation = server_.EnsureWpPresentation();
-  ASSERT_TRUE(mock_wp_presentation);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    ASSERT_TRUE(mock_surface);
+    auto* mock_wp_presentation = server->EnsureAndGetWpPresentation();
+    ASSERT_TRUE(mock_wp_presentation);
 
-  constexpr uint32_t kNumberOfCommits = 3;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_wp_presentation,
-              Feedback(_, _, mock_surface->resource(), _))
-      .Times(3);
-
-  Sync();
+    constexpr uint32_t kNumberOfCommits = 3;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_wp_presentation,
+                Feedback(_, _, mock_surface->resource(), _))
+        .Times(3);
+  });
 
   ::testing::InSequence s;
 
@@ -813,22 +921,27 @@
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId1, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  // Deliberately drop the presentation feedback for the first buffer,
-  // since we will destroy it.
-  mock_wp_presentation->set_presentation_callback(nullptr);
+  SendFrameCallbackForSurface(surface_id_);
+
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // Deliberately drop the presentation feedback for the first buffer,
+    // since we will destroy it.
+    auto* mock_wp_presentation = server->EnsureAndGetWpPresentation();
+    ;
+    EXPECT_EQ(1u, mock_wp_presentation->num_of_presentation_callbacks());
+    mock_wp_presentation->DropPresentationCallback();
+  });
+
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Commit second buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+
+  SendFrameCallbackForSurface(surface_id_);
 
   // Destroy the first buffer, which should trigger submission for the second
   // buffer.
@@ -836,29 +949,29 @@
               OnSubmission(kBufferId2, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
   DestroyBufferAndSetTerminateExpectation(kBufferId1, /*fail=*/false);
-  mock_surface->DestroyPrevAttachedBuffer();
-  mock_surface->SendFrameCallback();
-  Sync();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
-  // Deliberately drop the presentation feedback for the second buffer,
-  // since we will destroy it.
-  mock_wp_presentation->set_presentation_callback(nullptr);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->DestroyPrevAttachedBuffer();
+    mock_surface->SendFrameCallback();
+  });
+
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // Deliberately drop the presentation feedback for the second buffer,
+    // since we will destroy it.
+    auto* mock_wp_presentation = server->EnsureAndGetWpPresentation();
+    ;
+    EXPECT_EQ(1u, mock_wp_presentation->num_of_presentation_callbacks());
+    mock_wp_presentation->DropPresentationCallback();
+  });
 
   // Commit buffer 3 then send the presentation callback for it. This should
-  // not call OnPresentation as OnSubmission hasn't been called yet.
-  EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId3, kBufferId3, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  mock_wp_presentation->SendPresentationCallback();
-  Sync();
-
-  // Destroy buffer 2, which should trigger OnSubmission for buffer 3, and
-  // OnPresentation for buffer 1, 2, and 3.
-  EXPECT_CALL(mock_surface_gpu,
-              OnSubmission(kBufferId3, gfx::SwapResult::SWAP_ACK, _))
-      .Times(1);
+  // not call OnPresentation as OnSubmission hasn't been called yet. Though,
+  // the previously submitted buffers will have their presentation feedback
+  // discarded and sent to the |mock_surface_gpu| as those buffers have already
+  // been acked.
+  EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(
       mock_surface_gpu,
       OnPresentation(
@@ -875,12 +988,38 @@
               &gfx::PresentationFeedback::flags,
               ::testing::Eq(gfx::PresentationFeedback::Flags::kFailure))))
       .Times(1);
+  EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
+  CommitBuffer(widget, kBufferId3, kBufferId3, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    server->GetObject<wl::MockSurface>(id)->SendFrameCallback();
+    server->EnsureAndGetWpPresentation()->SendPresentationCallback();
+  });
+
+  // Let the mojo messages to be processed.
+  base::RunLoop().RunUntilIdle();
+
+  // Verify our expecations.
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
+
+  // Destroy buffer 2, which should trigger OnSubmission for buffer 3, and
+  // finally OnPresentation for buffer 3.
+  EXPECT_CALL(mock_surface_gpu,
+              OnSubmission(kBufferId3, gfx::SwapResult::SWAP_ACK, _))
+      .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId3, _)).Times(1);
   DestroyBufferAndSetTerminateExpectation(kBufferId2, /*fail=*/false);
-  mock_surface->DestroyPrevAttachedBuffer();
-  mock_surface->SendFrameCallback();
-  mock_wp_presentation->SendPresentationCallback();
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->DestroyPrevAttachedBuffer();
+    mock_surface->SendFrameCallback();
+    server->EnsureAndGetWpPresentation()->SendPresentationCallback();
+  });
+
+  // Let the mojo messages to be processed.
+  base::RunLoop().RunUntilIdle();
+
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId3, false /*fail*/);
 }
@@ -894,9 +1033,11 @@
   constexpr uint32_t kBufferId2 = 2;
   constexpr uint32_t kBufferId3 = 3;
 
-  // Enable wp_presentation support.
-  auto* mock_wp_presentation = server_.EnsureWpPresentation();
-  ASSERT_TRUE(mock_wp_presentation);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // Enable wp_presentation support.
+    auto* mock_wp_presentation = server->EnsureAndGetWpPresentation();
+    ASSERT_TRUE(mock_wp_presentation);
+  });
 
   const gfx::AcceleratedWidget widget = window_->GetWidget();
   const gfx::Rect bounds = gfx::Rect({0, 0}, kDefaultSize);
@@ -904,24 +1045,23 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget_);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(3);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId3);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(3u /* expected size */,
                                                false /* fail */);
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-  constexpr uint32_t kNumberOfCommits = 3;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+    constexpr uint32_t kNumberOfCommits = 3;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
   // All the other expectations must come in order.
   ::testing::InSequence sequence;
@@ -931,19 +1071,22 @@
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
   // Commit first buffer
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  // Let the mojo message for OnSubmission go back.
+  base::RunLoop().RunUntilIdle();
 
-  // Will be sent later.
-  auto* presentation_callback1 =
-      mock_wp_presentation->ReleasePresentationCallback();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
-  mock_surface->SendFrameCallback();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    // Verify we have a presentation callback now. This will be sent later.
+    EXPECT_EQ(
+        1u,
+        server->EnsureAndGetWpPresentation()->num_of_presentation_callbacks());
 
-  Sync();
+    server->GetObject<wl::MockSurface>(id)->SendFrameCallback();
+  });
 
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId2, gfx::SwapResult::SWAP_ACK, _))
@@ -951,21 +1094,25 @@
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
   // Commit second buffer
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    // Verify we have a presentation callback now. This will be sent later.
+    EXPECT_EQ(
+        2u,
+        server->EnsureAndGetWpPresentation()->num_of_presentation_callbacks());
 
-  // Will be sent later.
-  auto* presentation_callback2 =
-      mock_wp_presentation->ReleasePresentationCallback();
+    // Release previous buffer and commit third buffer.
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+    mock_surface->SendFrameCallback();
+  });
 
-  // Release previous buffer and commit third buffer.
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
-  mock_surface->SendFrameCallback();
+  // Let the mojo message for OnSubmission go back.
+  base::RunLoop().RunUntilIdle();
 
-  Sync();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId3, gfx::SwapResult::SWAP_ACK, _))
@@ -973,15 +1120,18 @@
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
   // Commit third buffer
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId3, kBufferId3, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId3, kBufferId3, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+  });
 
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+  // Let the mojo messages to be processed.
+  base::RunLoop().RunUntilIdle();
 
-  Sync();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Even though WaylandBufferManagerHost stores the previous stores
   // presentation feedbacks and waits for their value, the current last one
@@ -990,9 +1140,17 @@
   // order.
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
-  mock_wp_presentation->SendPresentationCallbackDiscarded();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* mock_wp_presentation = server->EnsureAndGetWpPresentation();
+    EXPECT_EQ(3u, mock_wp_presentation->num_of_presentation_callbacks());
+    mock_wp_presentation->SendPresentationCallbackDiscarded(/*last=*/true);
+  });
 
-  Sync();
+  // Let the mojo messages to be processed if any to ensure there are no pending
+  // messages.
+  base::RunLoop().RunUntilIdle();
+
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Now, start to send all the previous callbacks.
   EXPECT_CALL(mock_surface_gpu,
@@ -1003,10 +1161,16 @@
                       ::testing::Eq(gfx::PresentationFeedback::Flags::kVSync))))
       .Times(1);
 
-  mock_wp_presentation->set_presentation_callback(presentation_callback1);
-  mock_wp_presentation->SendPresentationCallback();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* mock_wp_presentation = server->EnsureAndGetWpPresentation();
+    EXPECT_EQ(2u, mock_wp_presentation->num_of_presentation_callbacks());
+    mock_wp_presentation->SendPresentationCallback();
+  });
 
-  Sync();
+  // Let the mojo messages to be processed.
+  base::RunLoop().RunUntilIdle();
+
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Now, send the second presentation feedback. It will send both second and
   // third feedback that was discarded.
@@ -1026,10 +1190,16 @@
               ::testing::Eq(gfx::PresentationFeedback::Flags::kFailure))))
       .Times(1);
 
-  mock_wp_presentation->set_presentation_callback(presentation_callback2);
-  mock_wp_presentation->SendPresentationCallback();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    auto* mock_wp_presentation = server->EnsureAndGetWpPresentation();
+    EXPECT_EQ(1u, mock_wp_presentation->num_of_presentation_callbacks());
+    mock_wp_presentation->SendPresentationCallback();
+  });
 
-  Sync();
+  // Let the mojo messages to be processed.
+  base::RunLoop().RunUntilIdle();
+
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
   DestroyBufferAndSetTerminateExpectation(kBufferId2, false /*fail*/);
@@ -1041,12 +1211,11 @@
   constexpr uint32_t kDmabufBufferId2 = 2;
 
   const gfx::AcceleratedWidget widget = window_->GetWidget();
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget_);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
 
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                     kDmabufBufferId);
@@ -1055,58 +1224,68 @@
   // zwp_linux_buffer_params_v1_send_created is called. Instead, the buffer must
   // be set as pending buffer.
 
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_surface, Commit()).Times(0);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_surface, Commit()).Times(0);
+  });
 
-  buffer_manager_gpu_->CommitBuffer(
-      widget, kDmabufBufferId, kDmabufBufferId, window_->GetBoundsInPixels(),
-      gfx::RoundedCornersF(), kDefaultScale, gfx::Rect(window_->size_px()));
-  Sync();
+  CommitBuffer(widget, kDmabufBufferId, kDmabufBufferId,
+               window_->GetBoundsInPixels(), gfx::RoundedCornersF(),
+               kDefaultScale, gfx::Rect(window_->size_px()));
 
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  });
 
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* linux_dmabuf = server->zwp_linux_dmabuf_v1();
+    // Once the client receives a "...send_created" call, it must destroy the
+    // params resource.
+    EXPECT_TRUE(linux_dmabuf->buffer_params().empty());
 
-  // Once the client receives a "...send_created" call, it must destroy the
-  // params resource.
-  EXPECT_TRUE(linux_dmabuf->buffer_params().empty());
+    // Part 2: the surface mustn't have a buffer attached until frame callback
+    // is sent by the server.
 
-  // Part 2: the surface mustn't have a buffer attached until frame callback is
-  // sent by the server.
+    EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
 
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+    testing::Mock::VerifyAndClearExpectations(
+        server->GetObject<wl::MockSurface>(id));
+  });
+
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                     kDmabufBufferId2);
 
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_surface, Commit()).Times(0);
+  });
 
-  Sync();
+  CommitBuffer(widget, kDmabufBufferId2, kDmabufBufferId2,
+               window_->GetBoundsInPixels(), gfx::RoundedCornersF(),
+               kDefaultScale, gfx::Rect(window_->size_px()));
 
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_surface, Commit()).Times(0);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    testing::Mock::VerifyAndClearExpectations(mock_surface);
+    // After the frame callback is sent, the pending buffer will be committed.
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_surface, Commit()).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(
-      widget, kDmabufBufferId2, kDmabufBufferId2, window_->GetBoundsInPixels(),
-      gfx::RoundedCornersF(), kDefaultScale, gfx::Rect(window_->size_px()));
-
-  Sync();
-
-  // After the frame callback is sent, the pending buffer will be committed.
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
-
-  mock_surface->SendFrameCallback();
-
-  Sync();
+    mock_surface->SendFrameCallback();
+  });
 
   DestroyBufferAndSetTerminateExpectation(kDmabufBufferId, false /*fail*/);
   DestroyBufferAndSetTerminateExpectation(kDmabufBufferId2, false /*fail*/);
@@ -1133,54 +1312,70 @@
 
     temp_window->Show(false);
 
-    Sync();
-
-    auto* mock_surface = server_.GetObject<wl::MockSurface>(
-        temp_window->root_surface()->get_surface_id());
+    const uint32_t temp_window_surface_id =
+        temp_window->root_surface()->get_surface_id();
     MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
-    auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-    EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _))
+          .Times(1);
+    });
 
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                       kDmabufBufferId);
 
-    Sync();
-
-    auto* xdg_surface = mock_surface->xdg_surface();
-    ASSERT_TRUE(xdg_surface);
+    PostToServerAndWait(
+        [temp_window_surface_id](wl::TestWaylandServerThread* server) {
+          auto* mock_surface =
+              server->GetObject<wl::MockSurface>(temp_window_surface_id);
+          auto* xdg_surface = mock_surface->xdg_surface();
+          ASSERT_TRUE(xdg_surface);
+        });
     ASSERT_FALSE(temp_window->IsSurfaceConfigured());
 
     ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                  false /* fail */);
 
-    EXPECT_CALL(*xdg_surface, SetWindowGeometry(_)).Times(0);
-    EXPECT_CALL(*xdg_surface, AckConfigure(_)).Times(0);
-    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
-    EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
-    EXPECT_CALL(*mock_surface, Commit()).Times(0);
+    PostToServerAndWait(
+        [temp_window_surface_id](wl::TestWaylandServerThread* server) {
+          auto* mock_surface =
+              server->GetObject<wl::MockSurface>(temp_window_surface_id);
+          auto* xdg_surface = mock_surface->xdg_surface();
+          EXPECT_CALL(*xdg_surface, SetWindowGeometry(_)).Times(0);
+          EXPECT_CALL(*xdg_surface, AckConfigure(_)).Times(0);
+          EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
+          EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
+          EXPECT_CALL(*mock_surface, Commit()).Times(0);
+        });
 
-    buffer_manager_gpu_->CommitBuffer(
-        widget, kDmabufBufferId, kDmabufBufferId, window_->GetBoundsInPixels(),
-        gfx::RoundedCornersF(), kDefaultScale, window_->GetBoundsInPixels());
-    Sync();
-    testing::Mock::VerifyAndClearExpectations(mock_surface);
+    CommitBuffer(widget, kDmabufBufferId, kDmabufBufferId,
+                 window_->GetBoundsInPixels(), gfx::RoundedCornersF(),
+                 kDefaultScale, window_->GetBoundsInPixels());
+    PostToServerAndWait(
+        [temp_window_surface_id](wl::TestWaylandServerThread* server) {
+          auto* mock_surface =
+              server->GetObject<wl::MockSurface>(temp_window_surface_id);
+          auto* xdg_surface = mock_surface->xdg_surface();
+          testing::Mock::VerifyAndClearExpectations(mock_surface);
 
-    EXPECT_CALL(*xdg_surface, SetWindowGeometry(gfx::Rect(800, 600))).Times(1);
-    EXPECT_CALL(*xdg_surface, AckConfigure(_)).Times(1);
-    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-    EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-    EXPECT_CALL(*mock_surface, Commit()).Times(1);
+          EXPECT_CALL(*xdg_surface, SetWindowGeometry(gfx::Rect(800, 600)))
+              .Times(1);
+          EXPECT_CALL(*xdg_surface, AckConfigure(_)).Times(1);
+          EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+          EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+          EXPECT_CALL(*mock_surface, Commit()).Times(1);
+        });
 
-    ActivateSurface(mock_surface->xdg_surface());
-    Sync();
-    testing::Mock::VerifyAndClearExpectations(mock_surface);
+    ActivateSurface(temp_window_surface_id);
+    PostToServerAndWait(
+        [temp_window_surface_id](wl::TestWaylandServerThread* server) {
+          testing::Mock::VerifyAndClearExpectations(
+              server->GetObject<wl::MockSurface>(temp_window_surface_id));
+        });
 
     SetPointerFocusedWindow(nullptr);
     temp_window.reset();
     DestroyBufferAndSetTerminateExpectation(kDmabufBufferId, false /*fail*/);
-
-    Sync();
   }
 }
 
@@ -1218,27 +1413,25 @@
   window->set_update_visual_size_immediately_for_testing(false);
   window->set_apply_pending_state_on_update_visual_size_for_testing(false);
 
-  Sync();
-
   gfx::Insets insets;
   window->SetDecorationInsets(&insets);
   window->Show(false);
-  Sync();
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window->root_surface()->get_surface_id());
+  const uint32_t surface_id = window->root_surface()->get_surface_id();
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
 
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                     kDmabufBufferId);
 
-  Sync();
-
-  auto* xdg_surface = mock_surface->xdg_surface();
-  ASSERT_TRUE(xdg_surface);
+  PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(surface_id);
+    auto* xdg_surface = mock_surface->xdg_surface();
+    ASSERT_TRUE(xdg_surface);
+  });
   ASSERT_FALSE(window->IsSurfaceConfigured());
 
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
@@ -1260,29 +1453,26 @@
   // amount. I.e: No buffer attaches before setting geometry + acking initial
   // configure sequence, etc.
 
-  EXPECT_CALL(*xdg_surface, SetWindowGeometry(kRestoredBounds)).Times(1);
-  EXPECT_CALL(*xdg_surface, AckConfigure(1)).Times(1);
-  EXPECT_CALL(*mock_surface, Attach(_, 0, 0)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  PostToServerAndWait([surface_id, bounds = kRestoredBounds](
+                          wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(surface_id);
+    auto* xdg_surface = mock_surface->xdg_surface();
+    EXPECT_CALL(*xdg_surface, SetWindowGeometry(bounds)).Times(1);
+    EXPECT_CALL(*xdg_surface, AckConfigure(1)).Times(1);
+    EXPECT_CALL(*mock_surface, Attach(_, 0, 0)).Times(1);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  });
 
-  buffer_manager_gpu_->CommitBuffer(widget, kDmabufBufferId, kDmabufBufferId,
-                                    gfx::Rect{55, 55}, gfx::RoundedCornersF(),
-                                    kDefaultScale, gfx::Rect{55, 55});
-  ActivateSurface(mock_surface->xdg_surface());
+  CommitBuffer(widget, kDmabufBufferId, kDmabufBufferId, gfx::Rect{55, 55},
+               gfx::RoundedCornersF(), kDefaultScale, gfx::Rect{55, 55});
+  ActivateSurface(surface_id);
 
-  Sync();
-
-  buffer_manager_gpu_->CommitBuffer(widget, kDmabufBufferId, kDmabufBufferId,
-                                    kRestoredBounds, gfx::RoundedCornersF(),
-                                    kDefaultScale, kRestoredBounds);
-  Sync();
-
+  CommitBuffer(widget, kDmabufBufferId, kDmabufBufferId, kRestoredBounds,
+               gfx::RoundedCornersF(), kDefaultScale, kRestoredBounds);
   SetPointerFocusedWindow(nullptr);
   window.reset();
   DestroyBufferAndSetTerminateExpectation(kDmabufBufferId, false /*fail*/);
-
-  Sync();
 }
 
 // The buffer that is not originally attached to any of the surfaces,
@@ -1300,22 +1490,22 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget_);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
 
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-  constexpr uint32_t kNumberOfCommits = 3;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+    constexpr uint32_t kNumberOfCommits = 3;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
   // All the other expectations must come in order.
   ::testing::InSequence sequence;
@@ -1325,23 +1515,24 @@
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
 
   // Commit second buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  SendFrameCallbackForSurface(surface_id_);
 
-  mock_surface->SendFrameCallback();
+  // Let mojo messages to be processed.
+  base::RunLoop().RunUntilIdle();
 
-  Sync();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
-  // Now synchronously create a second buffer and commit it. The release
-  // callback must be setup and OnSubmission must be called.
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // Now synchronously create a second buffer and commit it. The release
+    // callback must be setup and OnSubmission must be called.
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
+
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
 
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
@@ -1351,37 +1542,42 @@
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId2, _)).Times(1);
 
   // Commit second buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+  });
 
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+  SendFrameCallbackForSurface(surface_id_);
 
-  Sync();
+  // Let mojo messages to be processed.
+  base::RunLoop().RunUntilIdle();
 
-  mock_surface->SendFrameCallback();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Now asynchronously create another buffer so that a commit request
   // comes earlier than it is created by the Wayland compositor, but it can
   // released once the buffer is committed and processed (that is, it must be
   // able to setup a buffer release callback).
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId3);
 
-  Sync();
-
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId3, gfx::SwapResult::SWAP_ACK, _))
       .Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId3, _)).Times(0);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId3, kBufferId3, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId3, kBufferId3, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  // Let mojo messages to be processed from host to gpu (if any).
+  base::RunLoop().RunUntilIdle();
+
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId3, gfx::SwapResult::SWAP_ACK, _))
@@ -1392,12 +1588,15 @@
   // manager complete the commit request.
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+  });
 
-  Sync();
+  // Let mojo messages to be processed.
+  base::RunLoop().RunUntilIdle();
 
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
-
-  Sync();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
   DestroyBufferAndSetTerminateExpectation(kBufferId2, false /*fail*/);
@@ -1410,16 +1609,14 @@
   auto temp_window = CreateWindow();
   auto widget = temp_window->GetWidget();
 
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId);
 
-  Sync();
-
-  buffer_manager_gpu_->CommitBuffer(
-      widget, kBufferId, kBufferId, temp_window->GetBoundsInPixels(),
-      gfx::RoundedCornersF(), kDefaultScale, temp_window->GetBoundsInPixels());
-
-  Sync();
+  CommitBuffer(widget, kBufferId, kBufferId, temp_window->GetBoundsInPixels(),
+               gfx::RoundedCornersF(), kDefaultScale,
+               temp_window->GetBoundsInPixels());
 
   temp_window.reset();
   DestroyBufferAndSetTerminateExpectation(kBufferId, false /*fail*/);
@@ -1432,14 +1629,14 @@
   auto widget = temp_window->GetWidget();
   auto bounds = temp_window->GetBoundsInPixels();
 
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId);
 
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
-  Sync();
-
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
   // All the other expectations must come in order.
@@ -1449,11 +1646,8 @@
 
   temp_window.reset();
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId, kBufferId, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-
-  Sync();
+  CommitBuffer(widget, kBufferId, kBufferId, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId, false /*fail*/);
 }
@@ -1465,26 +1659,25 @@
   auto temp_window = CreateWindow();
   temp_window->Show(false);
 
-  Sync();
-
   auto widget = temp_window->GetWidget();
   auto bounds = temp_window->GetBoundsInPixels();
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      temp_window->root_surface()->get_surface_id());
-  ASSERT_TRUE(mock_surface);
+  const uint32_t temp_window_surface_id =
+      temp_window->root_surface()->get_surface_id();
+  PostToServerAndWait(
+      [temp_window_surface_id](wl::TestWaylandServerThread* server) {
+        ASSERT_TRUE(server->GetObject<wl::MockSurface>(temp_window_surface_id));
+      });
 
-  ActivateSurface(mock_surface->xdg_surface());
+  ActivateSurface(temp_window_surface_id);
 
-  Sync();
-
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
-  Sync();
-
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
   // All the other expectations must come in order.
@@ -1492,47 +1685,56 @@
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
 
-  mock_surface->SendFrameCallback();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
-  Sync();
+  PostToServerAndWait([temp_window_surface_id](
+                          wl::TestWaylandServerThread* server) {
+    server->GetObject<wl::MockSurface>(temp_window_surface_id)
+        ->SendFrameCallback();
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
 
-  EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
-  Sync();
-
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId2, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId2, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  PostToServerAndWait(
+      [temp_window_surface_id](wl::TestWaylandServerThread* server) {
+        auto* mock_surface =
+            server->GetObject<wl::MockSurface>(temp_window_surface_id);
+        mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+      });
 
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
 
-  Sync();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
   temp_window.reset();
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
+
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
   DestroyBufferAndSetTerminateExpectation(kBufferId2, false /*fail*/);
@@ -1546,18 +1748,14 @@
 
   const gfx::AcceleratedWidget widget = window_->GetWidget();
   const gfx::Rect bounds = window_->GetBoundsInPixels();
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
-
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(2);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(2);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
 
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(2u /* expected size */,
                                                false /* fail */);
 
@@ -1566,34 +1764,33 @@
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+
+  SendFrameCallbackForSurface(surface_id_);
+
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
+
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Can't call OnSubmission until there is a release.
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+  SendFrameCallbackForSurface(surface_id_);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
-
-  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+  SendFrameCallbackForSurface(surface_id_);
 
   // Destroying buffer2 should do nothing yet.
   DestroyBufferAndSetTerminateExpectation(kBufferId2, false /*fail*/);
-  Sync();
+
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
 
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
@@ -1603,7 +1800,9 @@
       .Times(2);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId2, _)).Times(2);
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
-  Sync();
+
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
 
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 }
@@ -1616,18 +1815,14 @@
 
   const gfx::AcceleratedWidget widget = window_->GetWidget();
   const gfx::Rect bounds = window_->GetBoundsInPixels();
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(2);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(2);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(2u /* expected size */,
                                                false /* fail */);
 
@@ -1636,30 +1831,33 @@
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+  SendFrameCallbackForSurface(surface_id_);
+
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
-  auto* wl_buffer1 = mock_surface->attached_buffer();
+
+  // Even though, this is stored on the client thread, but must only be used on
+  // the server thread.
+  wl_resource* wl_buffer1 = GetSurfaceAttachedBuffer(surface_id_);
+  ASSERT_TRUE(wl_buffer1);
 
   // Can't call OnSubmission until there is a release.
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+  SendFrameCallbackForSurface(surface_id_);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+  SendFrameCallbackForSurface(surface_id_);
 
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Releasing buffer1 should trigger two acks for buffer2.
@@ -1667,9 +1865,13 @@
               OnSubmission(kBufferId2, gfx::SwapResult::SWAP_ACK, _))
       .Times(2);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId2, _)).Times(2);
-  mock_surface->ReleaseBuffer(wl_buffer1);
-  Sync();
+  PostToServerAndWait(
+      [wl_buffer1, id = surface_id_](wl::TestWaylandServerThread* server) {
+        server->GetObject<wl::MockSurface>(id)->ReleaseBuffer(wl_buffer1);
+      });
 
+  // Let mojo messages to be processed back to the gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
@@ -1685,19 +1887,16 @@
 
   const gfx::AcceleratedWidget widget = window_->GetWidget();
   const gfx::Rect bounds = window_->GetBoundsInPixels();
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(3);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
+
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId3);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(3u /* expected size */,
                                                false /* fail */);
 
@@ -1705,41 +1904,63 @@
               OnSubmission(kBufferId1, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->GetObject<wl::MockSurface>(id), Attach(_, _, _))
+        .Times(1);
+  });
+
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+
+  SendFrameCallbackForSurface(surface_id_);
+
+  // Let mojo messages to be processed and passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
-  auto* wl_buffer1 = mock_surface->attached_buffer();
+
+  // Even though, this is stored on the client thread, but must only be used on
+  // the server thread.
+  wl_resource* wl_buffer1 = GetSurfaceAttachedBuffer(surface_id_);
+  ASSERT_TRUE(wl_buffer1);
 
   // Can't call OnSubmission until there is a release.
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(2);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->GetObject<wl::MockSurface>(id), Attach(_, _, _))
+        .Times(2);
+  });
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
-  auto* wl_buffer2 = mock_surface->attached_buffer();
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId3, kBufferId3, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  SendFrameCallbackForSurface(surface_id_);
 
+  // Even though, this is stored on the client thread, but must only be used on
+  // the server thread.
+  wl_resource* wl_buffer2 = GetSurfaceAttachedBuffer(surface_id_);
+  ASSERT_TRUE(wl_buffer2);
+
+  CommitBuffer(widget, kBufferId3, kBufferId3, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+  SendFrameCallbackForSurface(surface_id_);
+
+  // Let mojo messages to be processed and passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Releasing buffer2 can't trigger OnSubmission for buffer3, because
   // OnSubmission for buffer2 has not been sent yet.
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
-  mock_surface->ReleaseBuffer(wl_buffer2);
+  PostToServerAndWait(
+      [wl_buffer2, id = surface_id_](wl::TestWaylandServerThread* server) {
+        server->GetObject<wl::MockSurface>(id)->ReleaseBuffer(wl_buffer2);
+      });
+
+  // Let mojo messages to be processed and passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Releasing buffer1 should trigger acks for both.
@@ -1752,9 +1973,13 @@
               OnSubmission(kBufferId3, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId3, _)).Times(1);
-  mock_surface->ReleaseBuffer(wl_buffer1);
-  Sync();
+  PostToServerAndWait(
+      [wl_buffer1, id = surface_id_](wl::TestWaylandServerThread* server) {
+        server->GetObject<wl::MockSurface>(id)->ReleaseBuffer(wl_buffer1);
+      });
 
+  // Let mojo messages to be processed and passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
@@ -1775,13 +2000,11 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(2);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(2);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(2u /* expected size */,
                                                false /* fail */);
 
@@ -1790,65 +2013,71 @@
       .Times(1);
   ASSERT_TRUE(!connection_->presentation());
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_surface,
-              DamageBuffer(0, 0, bounds.width(), bounds.height()))
-      .Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  PostToServerAndWait(
+      [id = surface_id_, bounds](wl::TestWaylandServerThread* server) {
+        auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+        EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+        EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+        EXPECT_CALL(*mock_surface,
+                    DamageBuffer(0, 0, bounds.width(), bounds.height()))
+            .Times(1);
+        EXPECT_CALL(*mock_surface, Commit()).Times(1);
+      });
 
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
+  // Let mojo messages to be passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
-  testing::Mock::VerifyAndClearExpectations(mock_surface);
 
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
-  mock_surface->SendFrameCallback();
+  PostToServerAndWait(
+      [id = surface_id_, bounds](wl::TestWaylandServerThread* server) {
+        auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+        testing::Mock::VerifyAndClearExpectations(mock_surface);
+        mock_surface->SendFrameCallback();
 
-  Sync();
-
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_surface,
-              DamageBuffer(0, 0, bounds.width(), bounds.height()))
-      .Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+        EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+        EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+        EXPECT_CALL(*mock_surface,
+                    DamageBuffer(0, 0, bounds.width(), bounds.height()))
+            .Times(1);
+        EXPECT_CALL(*mock_surface, Commit()).Times(1);
+      });
 
   // Commit second buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
-
+  // Let mojo messages to be passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
-  testing::Mock::VerifyAndClearExpectations(mock_surface);
 
   EXPECT_CALL(mock_surface_gpu,
               OnSubmission(kBufferId2, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId2, _)).Times(1);
 
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_surface, DamageBuffer(_, _, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Commit()).Times(0);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    testing::Mock::VerifyAndClearExpectations(mock_surface);
 
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
-  mock_surface->SendFrameCallback();
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_surface, DamageBuffer(_, _, _, _)).Times(0);
+    EXPECT_CALL(*mock_surface, Commit()).Times(0);
 
-  Sync();
+    mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+    mock_surface->SendFrameCallback();
+  });
 
+  // Let mojo messages to be passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
-  testing::Mock::VerifyAndClearExpectations(mock_surface);
 
   // Now, commit the buffer with the |kBufferId2| again. The manager does not
   // sends the submission callback, the compositor is not going to release a
@@ -1858,58 +2087,70 @@
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId2, _)).Times(1);
 
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_surface,
-              DamageBuffer(0, 0, bounds.width(), bounds.height()))
-      .Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  PostToServerAndWait(
+      [id = surface_id_, bounds](wl::TestWaylandServerThread* server) {
+        auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+        testing::Mock::VerifyAndClearExpectations(mock_surface);
+
+        EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
+        EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
+        EXPECT_CALL(*mock_surface,
+                    DamageBuffer(0, 0, bounds.width(), bounds.height()))
+            .Times(1);
+        EXPECT_CALL(*mock_surface, Commit()).Times(1);
+      });
 
   // Commit second buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  Sync();
-
+  // Let mojo messages to be passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
-  testing::Mock::VerifyAndClearExpectations(mock_surface);
 
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_surface, DamageBuffer(_, _, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Commit()).Times(0);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    testing::Mock::VerifyAndClearExpectations(mock_surface);
 
-  mock_surface->SendFrameCallback();
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_surface, DamageBuffer(_, _, _, _)).Times(0);
+    EXPECT_CALL(*mock_surface, Commit()).Times(0);
 
-  Sync();
+    mock_surface->SendFrameCallback();
+  });
 
+  // Let mojo messages to be passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
-  testing::Mock::VerifyAndClearExpectations(mock_surface);
 
   // If we commit another buffer now, the manager host must not automatically
   // trigger OnSubmission and OnPresentation callbacks.
   EXPECT_CALL(mock_surface_gpu, OnSubmission(_, _, _)).Times(0);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
 
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_surface,
-              DamageBuffer(0, 0, bounds.width(), bounds.height()))
-      .Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  PostToServerAndWait(
+      [id = surface_id_, bounds](wl::TestWaylandServerThread* server) {
+        auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+        testing::Mock::VerifyAndClearExpectations(mock_surface);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
+        EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+        EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+        EXPECT_CALL(*mock_surface,
+                    DamageBuffer(0, 0, bounds.width(), bounds.height()))
+            .Times(1);
+        EXPECT_CALL(*mock_surface, Commit()).Times(1);
+      });
 
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
+  // Let mojo messages to be passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
-  testing::Mock::VerifyAndClearExpectations(mock_surface);
 
   // Now, they must be triggered once the buffer is released.
   EXPECT_CALL(mock_surface_gpu,
@@ -1917,11 +2158,16 @@
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
 
-  mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
-  mock_surface->SendFrameCallback();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    testing::Mock::VerifyAndClearExpectations(mock_surface);
 
-  Sync();
+    mock_surface->ReleaseBuffer(mock_surface->prev_attached_buffer());
+    mock_surface->SendFrameCallback();
+  });
 
+  // Let mojo messages to be passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
   testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
@@ -1939,12 +2185,11 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
 
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
@@ -1953,10 +2198,12 @@
       .Times(1);
   EXPECT_CALL(mock_surface_gpu, OnPresentation(kBufferId1, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+
+  // Let mojo messages to be passed from host to gpu.
+  base::RunLoop().RunUntilIdle();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
 }
@@ -1973,30 +2220,30 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(3);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId3);
 
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* linux_dmabuf = server->zwp_linux_dmabuf_v1();
+    // Ack creation for only the first 2 wl_buffers.
+    zwp_linux_buffer_params_v1_send_created(
+        linux_dmabuf->buffer_params()[0]->resource(),
+        linux_dmabuf->buffer_params()[0]->buffer_resource());
+    zwp_linux_buffer_params_v1_send_created(
+        linux_dmabuf->buffer_params()[1]->resource(),
+        linux_dmabuf->buffer_params()[1]->buffer_resource());
 
-  // Ack creation for only the first 2 wl_buffers.
-  zwp_linux_buffer_params_v1_send_created(
-      linux_dmabuf->buffer_params()[0]->resource(),
-      linux_dmabuf->buffer_params()[0]->buffer_resource());
-  zwp_linux_buffer_params_v1_send_created(
-      linux_dmabuf->buffer_params()[1]->resource(),
-      linux_dmabuf->buffer_params()[1]->buffer_resource());
-
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-
-  // root_surface shall not be committed as one of its subsurface is not
-  // committed yet due to pending wl_buffer creation.
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_surface, Commit()).Times(0);
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    // root_surface shall not be committed as one of its subsurface is not
+    // committed yet due to pending wl_buffer creation.
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_surface, Commit()).Times(0);
+  });
 
   std::vector<wl::WaylandOverlayConfig> overlay_configs;
   overlay_configs.emplace_back(
@@ -2007,19 +2254,23 @@
       CreateBasicWaylandOverlayConfig(1, kBufferId3, bounds));
   buffer_manager_gpu_->CommitOverlays(window_->GetWidget(), 1u,
                                       std::move(overlay_configs));
-  Sync();
-  testing::Mock::VerifyAndClearExpectations(mock_surface);
+  // Let mojo messages from gpu to host to go through.
+  base::RunLoop().RunUntilIdle();
 
-  // Once wl_buffer is created, all subsurfaces are committed, hence
-  // root_surface can be committed.
-  zwp_linux_buffer_params_v1_send_created(
-      linux_dmabuf->buffer_params()[0]->resource(),
-      linux_dmabuf->buffer_params()[0]->buffer_resource());
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    testing::Mock::VerifyAndClearExpectations(mock_surface);
 
-  Sync();
+    auto* linux_dmabuf = server->zwp_linux_dmabuf_v1();
+    // Once wl_buffer is created, all subsurfaces are committed, hence
+    // root_surface can be committed.
+    zwp_linux_buffer_params_v1_send_created(
+        linux_dmabuf->buffer_params()[0]->resource(),
+        linux_dmabuf->buffer_params()[0]->buffer_resource());
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(0);
+    EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  });
 }
 
 TEST_P(WaylandBufferManagerTest, FencedRelease) {
@@ -2029,7 +2280,6 @@
   constexpr uint32_t kBufferId1 = 1;
   constexpr uint32_t kBufferId2 = 2;
   constexpr uint32_t kBufferId3 = 3;
-  const int32_t kFenceFD = dup(1);
 
   const gfx::AcceleratedWidget widget = window_->GetWidget();
   const gfx::Rect bounds = gfx::Rect({0, 0}, kDefaultSize);
@@ -2037,26 +2287,23 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget_);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(3);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId3);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(3u /* expected size */,
                                                false /* fail */);
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-  constexpr uint32_t kNumberOfCommits = 3;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
-
-  Sync();
+    constexpr uint32_t kNumberOfCommits = 3;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
   ::testing::InSequence s;
 
@@ -2066,40 +2313,49 @@
       OnSubmission(kBufferId1, gfx::SwapResult::SWAP_ACK,
                    Truly([](const auto& fence) { return fence.is_null(); })))
       .Times(1);
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+
+  // Let mojo messages from gpu to host to go through.
+  base::RunLoop().RunUntilIdle();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
+
+  SendFrameCallbackForSurface(surface_id_);
 
   // Commit the second buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId2, kBufferId2, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId2, kBufferId2, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  // Release the first buffer via fenced release. This should trigger
-  // OnSubmission for the second buffer with a non-null fence.
-  gfx::GpuFenceHandle handle;
-  handle.owned_fd.reset(kFenceFD);
+  SendFrameCallbackForSurface(surface_id_);
+
   EXPECT_CALL(
       mock_surface_gpu,
       OnSubmission(kBufferId2, gfx::SwapResult::SWAP_ACK,
                    Truly([](const auto& fence) { return !fence.is_null(); })))
       .Times(1);
-  mock_surface->ReleaseBufferFenced(mock_surface->prev_attached_buffer(),
-                                    std::move(handle));
-  mock_surface->SendFrameCallback();
 
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    // Release the first buffer via fenced release. This should trigger
+    // OnSubmission for the second buffer with a non-null fence.
+    gfx::GpuFenceHandle handle;
+    const int32_t kFenceFD = dup(1);
+    handle.owned_fd.reset(kFenceFD);
+
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->ReleaseBufferFenced(mock_surface->prev_attached_buffer(),
+                                      std::move(handle));
+    mock_surface->SendFrameCallback();
+  });
+
+  // Let mojo messages from gpu to host to go through.
+  base::RunLoop().RunUntilIdle();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   // Commit the third buffer now.
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId3, kBufferId3, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  mock_surface->SendFrameCallback();
-  Sync();
+  CommitBuffer(widget, kBufferId3, kBufferId3, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+
+  SendFrameCallbackForSurface(surface_id_);
 
   // Release the second buffer via immediate explicit release. This should
   // trigger OnSubmission for the second buffer with a null fence.
@@ -2108,11 +2364,17 @@
       OnSubmission(kBufferId3, gfx::SwapResult::SWAP_ACK,
                    Truly([](const auto& fence) { return fence.is_null(); })))
       .Times(1);
-  mock_surface->ReleaseBufferFenced(mock_surface->prev_attached_buffer(),
-                                    gfx::GpuFenceHandle());
-  mock_surface->SendFrameCallback();
 
-  Sync();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    mock_surface->ReleaseBufferFenced(mock_surface->prev_attached_buffer(),
+                                      gfx::GpuFenceHandle());
+    mock_surface->SendFrameCallback();
+  });
+
+  // Let mojo messages from gpu to host to go through.
+  base::RunLoop().RunUntilIdle();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
   DestroyBufferAndSetTerminateExpectation(kBufferId2, false /*fail*/);
@@ -2128,22 +2390,21 @@
   const gfx::AcceleratedWidget widget = window_->GetWidget();
   const gfx::Rect bounds = window_->GetBoundsInPixels();
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_surface, Commit()).Times(1);
+
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
 
   auto mock_surface_gpu =
       std::make_unique<MockSurfaceGpu>(buffer_manager_gpu_.get(), widget);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
 
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
@@ -2152,16 +2413,21 @@
       .Times(1);
   EXPECT_CALL(*mock_surface_gpu.get(), OnPresentation(kBufferId1, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
 
-  // The root surface shouldn't get null buffer attached.
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  // Let mojo messages from host to gpu to go through.
+  base::RunLoop().RunUntilIdle();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
-  mock_surface->SendFrameCallback();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    // The root surface shouldn't get null buffer attached.
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(0);
+    EXPECT_CALL(*mock_surface, Commit()).Times(1);
+
+    mock_surface->SendFrameCallback();
+  });
 
   // After the channel has been destroyed and surface state has been reset, the
   // interface should bind again and it still should be possible to attach
@@ -2170,8 +2436,6 @@
   manager_host_->OnChannelDestroyed();
   manager_host_ = connection_->buffer_manager_host();
 
-  Sync();
-
   // The surface must has the buffer detached and all the buffers are destroyed.
   // Release the fence as there is no further need to hold that as the client
   // no longer expects that. Moreover, its next attach may result in a DCHECK,
@@ -2179,34 +2443,41 @@
   // resulting in a DCHECK when set_linux_buffer_release is called. The reason
   // is that wl_resource_create calls internally calls malloc, which may reuse
   // that memory.
-  mock_surface->ClearBufferReleases();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    server->GetObject<wl::MockSurface>(id)->ClearBufferReleases();
+  });
 
   auto interface_ptr = manager_host_->BindInterface();
   buffer_manager_gpu_->Initialize(std::move(interface_ptr), {}, false, true,
                                   false, kAugmentedSurfaceNotSupportedVersion);
 
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
+
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
-  // The buffer must be attached.
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
-  EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    // The buffer must be attached.
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(1);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(1);
+    EXPECT_CALL(*mock_surface, Commit()).Times(1);
+  });
 
   EXPECT_CALL(*mock_surface_gpu.get(),
               OnSubmission(kBufferId1, gfx::SwapResult::SWAP_ACK, _))
       .Times(1);
   EXPECT_CALL(*mock_surface_gpu.get(), OnPresentation(kBufferId1, _)).Times(1);
 
-  buffer_manager_gpu_->CommitBuffer(widget, kBufferId1, kBufferId1, bounds,
-                                    gfx::RoundedCornersF(), kDefaultScale,
-                                    bounds);
-  Sync();
+  CommitBuffer(widget, kBufferId1, kBufferId1, bounds, gfx::RoundedCornersF(),
+               kDefaultScale, bounds);
+
+  // Let mojo messages from host to gpu to go through.
+  base::RunLoop().RunUntilIdle();
+  testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
 
   DestroyBufferAndSetTerminateExpectation(kBufferId1, false /*fail*/);
 }
@@ -2224,14 +2495,13 @@
 
   const gfx::Rect bounds = window_->GetBoundsInPixels();
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(3);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
+
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId3);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(3u /* expected size */,
                                                false /* fail */);
 
@@ -2246,56 +2516,57 @@
       CreateBasicWaylandOverlayConfig(1, kBufferId3, bounds));
   buffer_manager_gpu_->CommitOverlays(window_->GetWidget(), 1u,
                                       std::move(overlay_configs));
-  Sync();
+
+  // Let mojo messages from gpu to host to go through.
+  base::RunLoop().RunUntilIdle();
 
   // 3 surfaces must exist - root surface, the primary subsurface and one
   // additional overlay surface. All of them must have buffers attached.
-
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  EXPECT_TRUE(mock_surface->attached_buffer());
-
-  auto* mock_surface_primary_subsurface = server_.GetObject<wl::MockSurface>(
-      window_->primary_subsurface()->wayland_surface()->get_surface_id());
-  EXPECT_TRUE(mock_surface_primary_subsurface->attached_buffer());
-
   EXPECT_EQ(1u, window_->wayland_subsurfaces().size());
-  auto* mock_surface_overlay_subsurface =
-      server_.GetObject<wl::MockSurface>(window_->wayland_subsurfaces()
-                                             .begin()
-                                             ->get()
-                                             ->wayland_surface()
-                                             ->get_surface_id());
-  EXPECT_TRUE(mock_surface_overlay_subsurface->attached_buffer());
-
-  Sync();
+  PostToServerAndWait(
+      [id = surface_id_,
+       primary_subsurface_id =
+           window_->primary_subsurface()->wayland_surface()->get_surface_id(),
+       overlay_surface_id =
+           window_->wayland_subsurfaces()
+               .begin()
+               ->get()
+               ->wayland_surface()
+               ->get_surface_id()](wl::TestWaylandServerThread* server) {
+        EXPECT_TRUE(server->GetObject<wl::MockSurface>(id)->attached_buffer());
+        EXPECT_TRUE(server->GetObject<wl::MockSurface>(primary_subsurface_id)
+                        ->attached_buffer());
+        EXPECT_TRUE(server->GetObject<wl::MockSurface>(overlay_surface_id)
+                        ->attached_buffer());
+      });
 
   // Pretend that the channel gets destroyed because of some internal reason.
   manager_host_->OnChannelDestroyed();
   manager_host_ = connection_->buffer_manager_host();
 
-  Sync();
-
   // The root surface should still have the buffer attached....
-  EXPECT_TRUE(mock_surface->attached_buffer());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    EXPECT_TRUE(server->GetObject<wl::MockSurface>(id)->attached_buffer());
+  });
   // ... and the primary and secondary subsurfaces must be hidden.
   EXPECT_FALSE(window_->primary_subsurface()->IsVisible());
   EXPECT_EQ(1u, window_->wayland_subsurfaces().size());
   EXPECT_FALSE(window_->wayland_subsurfaces().begin()->get()->IsVisible());
 
-  mock_surface->ClearBufferReleases();
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    server->GetObject<wl::MockSurface>(id)->ClearBufferReleases();
+  });
 
   auto interface_ptr = manager_host_->BindInterface();
   buffer_manager_gpu_->Initialize(std::move(interface_ptr), {}, false, true,
                                   false, kAugmentedSurfaceNotSupportedVersion);
 
-  // Now, create only one buffer and attach that to the root surface. The
-  // primary subsurface and secondary subsurface must remain invisible.
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(1);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    // Now, create only one buffer and attach that to the root surface. The
+    // primary subsurface and secondary subsurface must remain invisible.
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(1u /* expected size */,
                                                false /* fail */);
 
@@ -2305,14 +2576,12 @@
   buffer_manager_gpu_->CommitOverlays(window_->GetWidget(), 2u,
                                       std::move(overlay_configs2));
 
-  Sync();
+  base::RunLoop().RunUntilIdle();
 
-  mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-  EXPECT_TRUE(mock_surface->attached_buffer());
-
-  // The root surface should have the buffer detached.
-  EXPECT_TRUE(mock_surface->attached_buffer());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    // The root surface should have the buffer detached.
+    EXPECT_TRUE(server->GetObject<wl::MockSurface>(id)->attached_buffer());
+  });
 
   // The primary and secondary subsurfaces must remain hidden.
   EXPECT_FALSE(window_->primary_subsurface()->IsVisible());
@@ -2324,16 +2593,15 @@
        DoesNotAttachAndCommitOnHideIfNoBuffersAttached) {
   EXPECT_TRUE(window_->IsVisible());
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-  constexpr uint32_t kNumberOfCommits = 0;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+    constexpr uint32_t kNumberOfCommits = 0;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
   window_->Hide();
-
-  Sync();
 }
 
 TEST_P(WaylandBufferManagerTest, HasOverlayPrioritizer) {
@@ -2341,29 +2609,27 @@
 }
 
 TEST_P(WaylandBufferManagerTest, CanSubmitOverlayPriority) {
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-
   std::vector<uint32_t> kBufferIds = {1, 2, 3};
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(),
                                   window_->GetWidget());
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(3);
-  for (auto id : kBufferIds) {
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
+
+  for (auto id : kBufferIds)
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, id);
-  }
 
-  Sync();
-
-  for (size_t i = 0; i < kBufferIds.size(); i++) {
-    zwp_linux_buffer_params_v1_send_created(
-        linux_dmabuf->buffer_params()[i]->resource(),
-        linux_dmabuf->buffer_params()[i]->buffer_resource());
-  }
-
-  Sync();
+  PostToServerAndWait(
+      [size = kBufferIds.size()](wl::TestWaylandServerThread* server) {
+        auto* linux_dmabuf = server->zwp_linux_dmabuf_v1();
+        for (size_t i = 0; i < size; i++) {
+          zwp_linux_buffer_params_v1_send_created(
+              linux_dmabuf->buffer_params()[i]->resource(),
+              linux_dmabuf->buffer_params()[i]->buffer_resource());
+        }
+      });
 
   std::vector<std::pair<gfx::OverlayPriorityHint, uint32_t>> priorities = {
       {gfx::OverlayPriorityHint::kNone,
@@ -2389,20 +2655,24 @@
     buffer_manager_gpu_->CommitOverlays(window_->GetWidget(), ++frame_id,
                                         std::move(overlay_configs));
 
-    Sync();
+    base::RunLoop().RunUntilIdle();
 
     for (auto& subsurface : window_->wayland_subsurfaces_) {
-      auto* mock_surface_of_subsurface = server_.GetObject<wl::MockSurface>(
-          subsurface->wayland_surface()->get_surface_id());
-      EXPECT_TRUE(mock_surface_of_subsurface);
-      EXPECT_EQ(
-          mock_surface_of_subsurface->prioritized_surface()->overlay_priority(),
-          priority.second);
+      PostToServerAndWait(
+          [subsurface_id = subsurface->wayland_surface()->get_surface_id(),
+           &priority](wl::TestWaylandServerThread* server) {
+            auto* mock_surface_of_subsurface =
+                server->GetObject<wl::MockSurface>(subsurface_id);
+            EXPECT_TRUE(mock_surface_of_subsurface);
+            EXPECT_EQ(mock_surface_of_subsurface->prioritized_surface()
+                          ->overlay_priority(),
+                      priority.second);
 
-      mock_surface_of_subsurface->SendFrameCallback();
+            mock_surface_of_subsurface->SendFrameCallback();
+          });
     }
 
-    mock_surface->SendFrameCallback();
+    SendFrameCallbackForSurface(surface_id_);
   }
 }
 
@@ -2414,29 +2684,27 @@
 TEST_P(WaylandBufferManagerTest, CanSetRoundedCorners) {
   InitializeSurfaceAugmenter();
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-
   std::vector<uint32_t> kBufferIds = {1, 2, 3};
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(),
                                   window_->GetWidget());
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(3);
-  for (auto id : kBufferIds) {
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(3);
+  });
+
+  for (auto id : kBufferIds)
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, id);
-  }
 
-  Sync();
-
-  for (size_t i = 0; i < kBufferIds.size(); i++) {
-    zwp_linux_buffer_params_v1_send_created(
-        linux_dmabuf->buffer_params()[i]->resource(),
-        linux_dmabuf->buffer_params()[i]->buffer_resource());
-  }
-
-  Sync();
+  PostToServerAndWait(
+      [size = kBufferIds.size()](wl::TestWaylandServerThread* server) {
+        auto* linux_dmabuf = server->zwp_linux_dmabuf_v1();
+        for (size_t i = 0; i < size; i++) {
+          zwp_linux_buffer_params_v1_send_created(
+              linux_dmabuf->buffer_params()[i]->resource(),
+              linux_dmabuf->buffer_params()[i]->buffer_resource());
+        }
+      });
 
   std::vector<gfx::RRectF> rounded_corners_vec = {
       {{10, 10, 200, 200}, {1, 1, 1, 1}},  {{10, 10, 200, 200}, {0, 1, 0, 1}},
@@ -2468,13 +2736,9 @@
         buffer_manager_gpu_->CommitOverlays(window_->GetWidget(), ++frame_id,
                                             std::move(overlay_configs));
 
-        Sync();
+        base::RunLoop().RunUntilIdle();
 
         for (auto& subsurface : window_->wayland_subsurfaces_) {
-          auto* mock_surface_of_subsurface = server_.GetObject<wl::MockSurface>(
-              subsurface->wayland_surface()->get_surface_id());
-          EXPECT_TRUE(mock_surface_of_subsurface);
-
           gfx::RRectF rounded_clip_bounds_dip = rounded_corners;
           // If submission in px is allowed, there is no need to convert px to
           // dip.
@@ -2482,14 +2746,21 @@
             // Ozone/Wayland applies ceiled scale factor if it's fractional.
             rounded_clip_bounds_dip.Scale(1.f / std::ceil(scale_factor));
           }
+          PostToServerAndWait(
+              [subsurface_id = subsurface->wayland_surface()->get_surface_id(),
+               &rounded_clip_bounds_dip](wl::TestWaylandServerThread* server) {
+                auto* mock_surface_of_subsurface =
+                    server->GetObject<wl::MockSurface>(subsurface_id);
+                EXPECT_TRUE(mock_surface_of_subsurface);
 
-          EXPECT_EQ(mock_surface_of_subsurface->augmented_surface()
-                        ->rounded_clip_bounds(),
-                    rounded_clip_bounds_dip);
-          mock_surface_of_subsurface->SendFrameCallback();
+                EXPECT_EQ(mock_surface_of_subsurface->augmented_surface()
+                              ->rounded_clip_bounds(),
+                          rounded_clip_bounds_dip);
+                mock_surface_of_subsurface->SendFrameCallback();
+              });
         }
 
-        mock_surface->SendFrameCallback();
+        SendFrameCallbackForSurface(surface_id_);
       }
     }
   }
@@ -2500,8 +2771,9 @@
 // threshold, the feedbacks are marked as failed and discarded. See the comments
 // below in the test.
 TEST_P(WaylandBufferManagerTest, FeedbacksAreDiscardedIfClientMisbehaves) {
-  auto* mock_wp_presentation = server_.EnsureWpPresentation();
-  ASSERT_TRUE(mock_wp_presentation);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    ASSERT_TRUE(server->EnsureAndGetWpPresentation());
+  });
 
   // 2 buffers are enough.
   constexpr uint32_t kBufferId1 = 1;
@@ -2513,26 +2785,24 @@
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget_);
 
-  auto* linux_dmabuf = server_.zwp_linux_dmabuf_v1();
-  EXPECT_CALL(*linux_dmabuf, CreateParams(_, _, _)).Times(2);
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    EXPECT_CALL(*server->zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(2);
+  });
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId1);
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/, kBufferId2);
-
-  Sync();
-
   ProcessCreatedBufferResourcesWithExpectation(2u /* expected size */,
                                                false /* fail */);
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
-
   // There will be 235 frames/commits.
   constexpr uint32_t kNumberOfCommits = 235u;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_wp_presentation, Feedback(_, _, _, _))
-      .Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*server->EnsureAndGetWpPresentation(), Feedback(_, _, _, _))
+        .Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
   // The presentation feedbacks should fail after first 20 commits (that's the
   // threshold that WaylandFrameManager maintains). Next, the presentation
@@ -2569,21 +2839,23 @@
       EXPECT_CALL(mock_surface_gpu, OnPresentation(_, _)).Times(0);
     }
 
-    buffer_manager_gpu_->CommitBuffer(
-        widget, next_buffer_id_commit, next_buffer_id_commit, bounds,
-        gfx::RoundedCornersF(), kDefaultScale, bounds);
+    CommitBuffer(widget, next_buffer_id_commit, next_buffer_id_commit, bounds,
+                 gfx::RoundedCornersF(), kDefaultScale, bounds);
 
-    Sync();
+    PostToServerAndWait(
+        [id = surface_id_](wl::TestWaylandServerThread* server) {
+          auto* mock_surface = server->GetObject<wl::MockSurface>(id);
 
-    if (auto* buffer = mock_surface->prev_attached_buffer())
-      mock_surface->ReleaseBuffer(buffer);
+          if (auto* buffer = mock_surface->prev_attached_buffer())
+            mock_surface->ReleaseBuffer(buffer);
 
-    wl_resource_destroy(mock_wp_presentation->ReleasePresentationCallback());
+          server->EnsureAndGetWpPresentation()->DropPresentationCallback(
+              /*last=*/true);
 
-    mock_surface->SendFrameCallback();
+          mock_surface->SendFrameCallback();
+        });
 
-    Sync();
-
+    base::RunLoop().RunUntilIdle();
     testing::Mock::VerifyAndClearExpectations(&mock_surface_gpu);
   }
 
@@ -2603,10 +2875,9 @@
   constexpr uint32_t kDmabufBufferId = 1;
   CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                     kDmabufBufferId);
-  buffer_manager_gpu_->CommitBuffer(
-      window_->GetWidget(), kDmabufBufferId, kDmabufBufferId,
-      window_->GetBoundsInPixels(), gfx::RoundedCornersF(), kDefaultScale,
-      window_->GetBoundsInPixels());
+  CommitBuffer(window_->GetWidget(), kDmabufBufferId, kDmabufBufferId,
+               window_->GetBoundsInPixels(), gfx::RoundedCornersF(),
+               kDefaultScale, window_->GetBoundsInPixels());
   DestroyBufferAndSetTerminateExpectation(kDmabufBufferId, false /*fail*/);
 
   base::RunLoop().RunUntilIdle();
@@ -2626,9 +2897,9 @@
   if (!connection_->linux_explicit_synchronization_v1())
     GTEST_SKIP();
 
-  server_.EnsureSurfaceAugmenter();
-
-  Sync();
+  PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+    server->EnsureSurfaceAugmenter();
+  });
 
   MockSurfaceGpu mock_surface_gpu(buffer_manager_gpu_.get(), widget_);
 
@@ -2637,10 +2908,15 @@
       SkColor4f::FromColor(SK_ColorBLUE), gfx::Size(1, 1),
       solid_color_buffer_id);
 
-  Sync();
+  base::RunLoop().RunUntilIdle();
 
-  auto* mock_surface = server_.GetObject<wl::MockSurface>(
-      window_->root_surface()->get_surface_id());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    auto* mock_surface = server->GetObject<wl::MockSurface>(id);
+    constexpr uint32_t kNumberOfCommits = 1;
+    EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
+    EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  });
 
   std::vector<wl::WaylandOverlayConfig> overlay_configs;
   auto bounds = window_->GetBoundsInPixels();
@@ -2648,14 +2924,12 @@
       INT32_MIN, solid_color_buffer_id, bounds));
   buffer_manager_gpu_->CommitOverlays(widget_, 1u, std::move(overlay_configs));
 
-  constexpr uint32_t kNumberOfCommits = 1;
-  EXPECT_CALL(*mock_surface, Attach(_, _, _)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Frame(_)).Times(kNumberOfCommits);
-  EXPECT_CALL(*mock_surface, Commit()).Times(kNumberOfCommits);
+  base::RunLoop().RunUntilIdle();
 
-  Sync();
-
-  EXPECT_FALSE(mock_surface->has_linux_buffer_release());
+  PostToServerAndWait([id = surface_id_](wl::TestWaylandServerThread* server) {
+    EXPECT_FALSE(
+        server->GetObject<wl::MockSurface>(id)->has_linux_buffer_release());
+  });
 }
 
 class WaylandBufferManagerViewportTest : public WaylandBufferManagerTest {
@@ -2668,16 +2942,13 @@
                                      const gfx::RectF& expected_bounds_rect) {
     auto temp_window = CreateWindow();
     temp_window->Show(false);
+    const uint32_t surface_id = temp_window->root_surface()->get_surface_id();
 
-    Sync();
+    PostToServerAndWait([surface_id](wl::TestWaylandServerThread* server) {
+      ASSERT_TRUE(server->GetObject<wl::MockSurface>(surface_id));
+    });
 
-    auto* mock_surface = server_.GetObject<wl::MockSurface>(
-        temp_window->root_surface()->get_surface_id());
-    ASSERT_TRUE(mock_surface);
-
-    ActivateSurface(mock_surface->xdg_surface());
-
-    Sync();
+    ActivateSurface(surface_id);
 
     constexpr uint32_t kBufferId1 = 1;
     constexpr uint32_t kBufferId2 = 2;
@@ -2689,14 +2960,9 @@
                                                       kBufferId1);
     CreateDmabufBasedBufferAndSetTerminateExpectation(false /*fail*/,
                                                       kBufferId2);
-
-    Sync();
-
     ProcessCreatedBufferResourcesWithExpectation(2u /* expected size */,
                                                  false /* fail */);
 
-    Sync();
-
     std::vector<wl::WaylandOverlayConfig> overlay_configs;
     auto bounds = temp_window->GetBoundsInPixels();
     overlay_configs.emplace_back(
@@ -2708,26 +2974,27 @@
     buffer_manager_gpu_->CommitOverlays(temp_window->GetWidget(), 1u,
                                         std::move(overlay_configs));
 
-    Sync();
+    base::RunLoop().RunUntilIdle();
 
-    // Creates a handle for a subsurface.
-    auto params_vector = server_.zwp_linux_dmabuf_v1()->buffer_params();
-    for (auto* mock_params : params_vector) {
-      zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
-                                              mock_params->buffer_resource());
-    }
-
-    Sync();
+    PostToServerAndWait([](wl::TestWaylandServerThread* server) {
+      // Creates a handle for a subsurface.
+      const std::vector<wl::TestZwpLinuxBufferParamsV1*>& params_vector =
+          server->zwp_linux_dmabuf_v1()->buffer_params();
+      for (auto* mock_params : params_vector) {
+        zwp_linux_buffer_params_v1_send_created(mock_params->resource(),
+                                                mock_params->buffer_resource());
+      }
+    });
 
     EXPECT_EQ(temp_window->wayland_subsurfaces_.size(), 1u);
     WaylandSubsurface* subsurface =
         temp_window->wayland_subsurfaces_.begin()->get();
     ASSERT_TRUE(subsurface);
-    auto* mock_surface_of_subsurface = server_.GetObject<wl::MockSurface>(
-        subsurface->wayland_surface()->get_surface_id());
-    ASSERT_TRUE(mock_surface_of_subsurface);
-
-    auto* test_vp = mock_surface_of_subsurface->viewport();
+    const uint32_t subsurface_id =
+        subsurface->wayland_surface()->get_surface_id();
+    PostToServerAndWait([subsurface_id](wl::TestWaylandServerThread* server) {
+      ASSERT_TRUE(server->GetObject<wl::MockSurface>(subsurface_id));
+    });
 
     // The conversion from double to fixed and back is necessary because it
     // happens during the roundtrip, and it creates significant error.
@@ -2735,10 +3002,17 @@
                                  expected_bounds_rect.size().width())),
                              wl_fixed_to_double(wl_fixed_from_double(
                                  expected_bounds_rect.size().height())));
-    EXPECT_EQ(expected_size, test_vp->destination_size());
 
-    mock_surface_of_subsurface->SendFrameCallback();
-    mock_surface->SendFrameCallback();
+    PostToServerAndWait([surface_id, subsurface_id,
+                         &expected_size](wl::TestWaylandServerThread* server) {
+      auto* mock_surface_of_subsurface =
+          server->GetObject<wl::MockSurface>(subsurface_id);
+      auto* test_vp = mock_surface_of_subsurface->viewport();
+      EXPECT_EQ(expected_size, test_vp->destination_size());
+
+      mock_surface_of_subsurface->SendFrameCallback();
+      server->GetObject<wl::MockSurface>(surface_id)->SendFrameCallback();
+    });
 
     DestroyBufferAndSetTerminateExpectation(kBufferId1, false);
     DestroyBufferAndSetTerminateExpectation(kBufferId2, false);
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
index 714e0c35..6e79f007 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
@@ -409,7 +409,7 @@
     params.ownership = views::Widget::InitParams::CLIENT_OWNS_WIDGET;
     params.native_widget = desktop_native_widget;
     widget->Init(std::move(params));
-
+    widget->Show();
     // Widget will create a DefaultWidgetDelegate if no delegates are provided.
     // Call Widget::OnNativeWidgetDestroyed() to destroy
     // the WidgetDelegate properly.
@@ -458,6 +458,12 @@
   static_cast<aura::WindowDelegate*>(desktop_native_widget)->OnCaptureLost();
 }
 
+TEST_F(DesktopNativeWidgetAuraWithNoDelegateTest, OnGestureEventTest) {
+  ui::GestureEvent move(0, 0, 0, ui::EventTimeForNow(),
+                        ui::GestureEventDetails(ui::ET_GESTURE_TAP_DOWN));
+  static_cast<ui::EventHandler*>(desktop_native_widget)->OnGestureEvent(&move);
+}
+
 TEST_F(DesktopNativeWidgetAuraWithNoDelegateTest, OnHostMovedInPixelsTest) {
   static_cast<aura::WindowTreeHostObserver*>(desktop_native_widget)
       ->OnHostMovedInPixels(nullptr);
@@ -478,6 +484,12 @@
   static_cast<ui::EventHandler*>(desktop_native_widget)->OnKeyEvent(&key);
 }
 
+TEST_F(DesktopNativeWidgetAuraWithNoDelegateTest, OnMouseEventTest) {
+  ui::MouseEvent move(ui::ET_MOUSE_MOVED, gfx::Point(), gfx::Point(),
+                      ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE);
+  static_cast<ui::EventHandler*>(desktop_native_widget)->OnMouseEvent(&move);
+}
+
 TEST_F(DesktopNativeWidgetAuraWithNoDelegateTest, OnPaintTest) {
   static_cast<aura::WindowDelegate*>(desktop_native_widget)
       ->OnPaint(ui::PaintContext(nullptr, 0, gfx::Rect(), false));
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
index 7fe6a03a..ceee9102 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
@@ -799,6 +799,8 @@
 }
 
 FrameMode DesktopWindowTreeHostWin::GetFrameMode() const {
+  if (!GetWidget())
+    return FrameMode::SYSTEM_DRAWN;
   return GetWidget()->ShouldUseNativeFrame() ? FrameMode::SYSTEM_DRAWN
                                              : FrameMode::CUSTOM_DRAWN;
 }
@@ -808,11 +810,12 @@
 }
 
 void DesktopWindowTreeHostWin::SchedulePaint() {
-  GetWidget()->GetRootView()->SchedulePaint();
+  if (GetWidget())
+    GetWidget()->GetRootView()->SchedulePaint();
 }
 
 bool DesktopWindowTreeHostWin::ShouldPaintAsActive() const {
-  return GetWidget()->ShouldPaintAsActive();
+  return GetWidget() ? GetWidget()->ShouldPaintAsActive() : false;
 }
 
 bool DesktopWindowTreeHostWin::CanResize() const {
@@ -830,7 +833,8 @@
 bool DesktopWindowTreeHostWin::CanActivate() const {
   if (IsModalWindowActive())
     return true;
-  return native_widget_delegate_->CanActivate();
+  return native_widget_delegate_ ? native_widget_delegate_->CanActivate()
+                                 : false;
 }
 
 bool DesktopWindowTreeHostWin::WantsMouseEventsWhenInactive() const {
@@ -838,14 +842,13 @@
 }
 
 bool DesktopWindowTreeHostWin::WidgetSizeIsClientSize() const {
-  const Widget* widget = GetWidget()->GetTopLevelWidget();
+  const Widget* widget =
+      GetWidget() ? GetWidget()->GetTopLevelWidget() : nullptr;
   return IsMaximized() || (widget && widget->ShouldUseNativeFrame());
 }
 
 bool DesktopWindowTreeHostWin::IsModal() const {
-  if (native_widget_delegate_)
-    return native_widget_delegate_->IsModal();
-  return false;
+  return native_widget_delegate_ ? native_widget_delegate_->IsModal() : false;
 }
 
 int DesktopWindowTreeHostWin::GetInitialShowState() const {
@@ -1003,7 +1006,8 @@
 }
 
 void DesktopWindowTreeHostWin::HandleVisibilityChanged(bool visible) {
-  native_widget_delegate_->OnNativeWidgetVisibilityChanged(visible);
+  if (native_widget_delegate_)
+    native_widget_delegate_->OnNativeWidgetVisibilityChanged(visible);
 }
 
 void DesktopWindowTreeHostWin::HandleWindowMinimizedOrRestored(bool restored) {
@@ -1236,11 +1240,13 @@
 // DesktopWindowTreeHostWin, private:
 
 Widget* DesktopWindowTreeHostWin::GetWidget() {
-  return native_widget_delegate_->AsWidget();
+  return native_widget_delegate_ ? native_widget_delegate_->AsWidget()
+                                 : nullptr;
 }
 
 const Widget* DesktopWindowTreeHostWin::GetWidget() const {
-  return native_widget_delegate_->AsWidget();
+  return native_widget_delegate_ ? native_widget_delegate_->AsWidget()
+                                 : nullptr;
 }
 
 HWND DesktopWindowTreeHostWin::GetHWND() const {
diff --git a/ui/webui/resources/BUILD.gn b/ui/webui/resources/BUILD.gn
index 13826920..57def3b 100644
--- a/ui/webui/resources/BUILD.gn
+++ b/ui/webui/resources/BUILD.gn
@@ -141,10 +141,7 @@
 
 preprocessed_folder = "$target_gen_dir/preprocessed"
 
-checked_in_dts_files = [
-  "js/cr.m.d.ts",
-  "js/promise_resolver.d.ts",
-]
+checked_in_dts_files = [ "js/cr.m.d.ts" ]
 
 # Copies checked-in .d.ts files to the preprocess folder so that they are
 # discovered by TSC the same way generated .d.ts files are.
@@ -186,6 +183,7 @@
                "js/icon.ts",
                "js/keyboard_shortcut_list.ts",
                "js/parse_html_subset.ts",
+               "js/promise_resolver.ts",
                "js/platform.ts",
                "js/plural_string_proxy.ts",
                "js/static_types.ts",
diff --git a/ui/webui/resources/js/BUILD.gn b/ui/webui/resources/js/BUILD.gn
index 86c0816..2fdf4a77 100644
--- a/ui/webui/resources/js/BUILD.gn
+++ b/ui/webui/resources/js/BUILD.gn
@@ -54,6 +54,7 @@
     "parse_html_subset.ts",
     "platform.ts",
     "plural_string_proxy.ts",
+    "promise_resolver.ts",
     "search_highlight_utils.ts",
     "static_types.ts",
     "store_ts.ts",
@@ -83,7 +84,6 @@
     "cr/event_target.js",
     "load_time_data.m.js",
     "load_time_data_deprecated.js",
-    "promise_resolver.js",
     "util.js",
   ]
 
@@ -140,7 +140,6 @@
     ":assert",
     ":cr.m",
     ":load_time_data.m",
-    ":promise_resolver",
     ":util",
   ]
 }
@@ -154,10 +153,6 @@
 js_library("load_time_data.m") {
 }
 
-js_library("promise_resolver") {
-  deps = [ ":assert" ]
-}
-
 js_library("util") {
   deps = [ ":assert" ]
 }
diff --git a/ui/webui/resources/js/promise_resolver.ts b/ui/webui/resources/js/promise_resolver.ts
new file mode 100644
index 0000000..3a40589
--- /dev/null
+++ b/ui/webui/resources/js/promise_resolver.ts
@@ -0,0 +1,54 @@
+// Copyright 2016 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview PromiseResolver is a helper class that allows creating a
+ * Promise that will be fulfilled (resolved or rejected) some time later.
+ *
+ * Example:
+ *  const resolver = new PromiseResolver();
+ *  resolver.promise.then(function(result) {
+ *    console.log('resolved with', result);
+ *  });
+ *  ...
+ *  ...
+ *  resolver.resolve({hello: 'world'});
+ */
+
+export class PromiseResolver<T> {
+  private resolve_: (arg: T) => void;
+  private reject_: (arg: any) => void;
+  private isFulfilled_: boolean = false;
+  private promise_: Promise<T>;
+
+  constructor() {
+    this.promise_ = new Promise((resolve, reject) => {
+      this.resolve_ = (resolution: T) => {
+        resolve(resolution);
+        this.isFulfilled_ = true;
+      };
+      this.reject_ = (reason: any) => {
+        reject(reason);
+        this.isFulfilled_ = true;
+      };
+    });
+  }
+
+  /** Whether this resolver has been resolved or rejected. */
+  get isFulfilled(): boolean {
+    return this.isFulfilled_;
+  }
+
+  get promise(): Promise<T> {
+    return this.promise_;
+  }
+
+  get resolve(): ((arg: T) => void) {
+    return this.resolve_;
+  }
+
+  get reject(): ((arg?: any) => void) {
+    return this.reject_;
+  }
+}