diff --git a/DEPS b/DEPS
index c4c7c2e..2b58522 100644
--- a/DEPS
+++ b/DEPS
@@ -199,11 +199,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'a982c77a0af64a57c36cfcd8b941aeff4cea3886',
+  'skia_revision': 'b03f4a1dc831202cc7a68945c752ec56c4415607',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': 'd2db1ff1b7bf9d9adb3ae2c7fada1ed41717de49',
+  'v8_revision': 'f569a18017889537012ab0775ec21101f1b2f7c6',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -211,7 +211,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': 'a12edfa5cf68e8aefbe52db0ab7afadfe1c2ac3a',
+  'angle_revision': '4ce2e2135123407e09e37eb2f3400fd263febecc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -278,7 +278,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '41405825bdcea9a23bfc30b184138e21e62e2c2b',
+  'devtools_frontend_revision': '4afb63517e64e10da3a3a98c01576e2733b62246',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -559,7 +559,7 @@
   },
 
   'src/ios/third_party/material_components_ios/src': {
-      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '3a4270e82053fec7c215a7a766fdfe6c7f153bae',
+      'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + 'afe4105debedd8c7b3376b5a37e9beeafb9b368e',
       'condition': 'checkout_ios',
   },
 
@@ -1050,7 +1050,7 @@
     Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '18e09b9197a3b1d771c077c530d1a4ebad04c167',
 
   'src/third_party/icu':
-    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '2eefd9a18a2084e02b12691a60ff932f82cfb385',
+    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'f0979063b1f779134f88ba192b84265a578b2a54',
 
   'src/third_party/icu4j': {
       'packages': [
@@ -1275,7 +1275,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'a74aaf03d7c1d247452bb92b166cd432190e7eaf',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '91cc5be54402afc43605c15f07548e53741e0430',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1511,7 +1511,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '66460536ee975a3e98931b7b40a661a63fd9cd57',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '49dbad021e802197b3c0b966c03b4aa766a5b578',
+    Var('webrtc_git') + '/src.git' + '@' + 'b70c9531ee0c00d5d8aa104a3e5b76e6bc1412b1',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1583,7 +1583,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@2e2ad5035e2e6247a0aefa1e61ceface210a34c6',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@99666637f799ac21e532defe1d21f464f464bce0',
     'condition': 'checkout_src_internal',
   },
 
@@ -1591,7 +1591,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'R-1nbC-AmnodYzBYqrEzkht8v6fRYS6CmM5bWWtt6cMC',
+        'version': 'WZeWxWst2GWAsCK_SF6zg1SjsCkKBiAD96vKv8ZHOPIC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1602,7 +1602,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': 'gWs3eWGOWAPXzGA_h67xOXO9otnjSoMQx01RSmOl4hwC',
+        'version': 'miKrk3neFfZhODXMDGhEG4jylBAOf1BUcpvrJWpSlEIC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index ad2ab6f..de9528e 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -356,7 +356,6 @@
   '^chrome/browser/resources/chromeos/accessibility/',
   '^chrome/browser/rlz/chrome_rlz_tracker_delegate.cc',
   '^chrome/browser/search_engines/',
-  '^chrome/browser/service_process/',
   '^chrome/browser/signin/',
   '^chrome/browser/site_isolation/site_per_process_text_input_browsertest.cc',
   '^chrome/browser/sync_file_system/',
diff --git a/ash/ambient/ambient_photo_controller.cc b/ash/ambient/ambient_photo_controller.cc
index b935972..2999855 100644
--- a/ash/ambient/ambient_photo_controller.cc
+++ b/ash/ambient/ambient_photo_controller.cc
@@ -110,7 +110,7 @@
           FILE_PATH_LITERAL(kAmbientModeBackupCacheDirectoryName)))),
       task_runner_(
           base::ThreadPool::CreateSequencedTaskRunner(GetTaskTraits())) {
-  ambient_backend_model_observer_.Add(&ambient_backend_model_);
+  ambient_backend_model_observation_.Observe(&ambient_backend_model_);
   ScheduleFetchBackupImages();
 }
 
diff --git a/ash/ambient/ambient_photo_controller.h b/ash/ambient/ambient_photo_controller.h
index d5446ba..46150f7 100644
--- a/ash/ambient/ambient_photo_controller.h
+++ b/ash/ambient/ambient_photo_controller.h
@@ -21,7 +21,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/timer/timer.h"
 #include "net/base/backoff_entry.h"
 #include "services/network/public/cpp/simple_url_loader.h"
@@ -213,8 +213,8 @@
   // Backoff to resume fetch images.
   net::BackoffEntry resume_fetch_image_backoff_;
 
-  ScopedObserver<AmbientBackendModel, AmbientBackendModelObserver>
-      ambient_backend_model_observer_{this};
+  base::ScopedObservation<AmbientBackendModel, AmbientBackendModelObserver>
+      ambient_backend_model_observation_{this};
 
   std::unique_ptr<AmbientPhotoCache> photo_cache_;
   std::unique_ptr<AmbientPhotoCache> backup_photo_cache_;
diff --git a/ash/ambient/ambient_photo_controller_unittest.cc b/ash/ambient/ambient_photo_controller_unittest.cc
index 925ed78..34af921 100644
--- a/ash/ambient/ambient_photo_controller_unittest.cc
+++ b/ash/ambient/ambient_photo_controller_unittest.cc
@@ -25,7 +25,7 @@
 #include "base/hash/sha1.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/stl_util.h"
 #include "base/system/sys_info.h"
 #include "base/test/bind.h"
@@ -360,10 +360,10 @@
 
 TEST_F(AmbientPhotoControllerTest, ShouldNotLoadDuplicateImages) {
   testing::NiceMock<MockAmbientBackendModelObserver> mock_backend_observer;
-  ScopedObserver<AmbientBackendModel, AmbientBackendModelObserver>
+  base::ScopedObservation<AmbientBackendModel, AmbientBackendModelObserver>
       scoped_observer{&mock_backend_observer};
 
-  scoped_observer.Add(photo_controller()->ambient_backend_model());
+  scoped_observer.Observe(photo_controller()->ambient_backend_model());
 
   // All images downloaded will be identical.
   SetDownloadPhotoData("image data");
diff --git a/ash/ambient/ui/ambient_assistant_container_view.cc b/ash/ambient/ui/ambient_assistant_container_view.cc
index 35ff0ca9..94f75848 100644
--- a/ash/ambient/ui/ambient_assistant_container_view.cc
+++ b/ash/ambient/ui/ambient_assistant_container_view.cc
@@ -55,7 +55,7 @@
   SetID(AmbientViewID::kAmbientAssistantContainerView);
   InitLayout();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantUiController::Get()->GetModel()->AddObserver(this);
 }
 
@@ -66,7 +66,9 @@
 
 void AmbientAssistantContainerView::OnAssistantControllerDestroying() {
   AssistantUiController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void AmbientAssistantContainerView::OnUiVisibilityChanged(
diff --git a/ash/ambient/ui/ambient_assistant_container_view.h b/ash/ambient/ui/ambient_assistant_container_view.h
index 39be75f..7e7b662 100644
--- a/ash/ambient/ui/ambient_assistant_container_view.h
+++ b/ash/ambient/ui/ambient_assistant_container_view.h
@@ -9,7 +9,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/view.h"
 
 namespace views {
@@ -54,9 +54,8 @@
   views::ImageView* avatar_view_ = nullptr;
   views::Label* greeting_label_ = nullptr;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
-
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/ambient/ui/ambient_assistant_dialog_plate.cc b/ash/ambient/ui/ambient_assistant_dialog_plate.cc
index a952621..59f60a0 100644
--- a/ash/ambient/ui/ambient_assistant_dialog_plate.cc
+++ b/ash/ambient/ui/ambient_assistant_dialog_plate.cc
@@ -27,7 +27,7 @@
   SetID(AmbientViewID::kAmbientAssistantDialogPlate);
   InitLayout();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantInteractionController::Get()->GetModel()->AddObserver(this);
 }
 
@@ -42,7 +42,9 @@
 
 void AmbientAssistantDialogPlate::OnAssistantControllerDestroying() {
   AssistantInteractionController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void AmbientAssistantDialogPlate::OnCommittedQueryChanged(
diff --git a/ash/ambient/ui/ambient_assistant_dialog_plate.h b/ash/ambient/ui/ambient_assistant_dialog_plate.h
index c7132b9..eaa484df 100644
--- a/ash/ambient/ui/ambient_assistant_dialog_plate.h
+++ b/ash/ambient/ui/ambient_assistant_dialog_plate.h
@@ -48,9 +48,8 @@
   MicView* animated_voice_input_toggle_ = nullptr;
   AssistantQueryView* voice_query_view_ = nullptr;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
-
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/ambient/ui/ambient_background_image_view.cc b/ash/ambient/ui/ambient_background_image_view.cc
index 09871e3..7c71239 100644
--- a/ash/ambient/ui/ambient_background_image_view.cc
+++ b/ash/ambient/ui/ambient_background_image_view.cc
@@ -159,7 +159,7 @@
   // Set a place holder size for Flex layout to assign bounds.
   image_view_->SetPreferredSize(gfx::Size(1, 1));
   image_view_->SetProperty(views::kFlexBehaviorKey, kUnboundedScaleToZero);
-  observed_views_.Add(image_view_);
+  observed_views_.AddObservation(image_view_);
 
   related_image_view_ =
       image_container_->AddChildView(std::make_unique<views::ImageView>());
@@ -167,7 +167,7 @@
   related_image_view_->SetPreferredSize(gfx::Size(1, 1));
   related_image_view_->SetProperty(views::kFlexBehaviorKey,
                                    kUnboundedScaleToZero);
-  observed_views_.Add(related_image_view_);
+  observed_views_.AddObservation(related_image_view_);
 
   // Set spacing between two images.
   related_image_view_->SetProperty(
diff --git a/ash/ambient/ui/ambient_background_image_view.h b/ash/ambient/ui/ambient_background_image_view.h
index 63a215d..90f0a31 100644
--- a/ash/ambient/ui/ambient_background_image_view.h
+++ b/ash/ambient/ui/ambient_background_image_view.h
@@ -9,7 +9,7 @@
 
 #include "ash/ambient/ui/ambient_view_delegate.h"
 #include "ash/ash_export.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "ui/views/controls/image_view.h"
 #include "ui/views/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
@@ -83,7 +83,8 @@
 
   MediaStringView* media_string_view_ = nullptr;
 
-  ScopedObserver<views::View, views::ViewObserver> observed_views_{this};
+  base::ScopedMultiSourceObservation<views::View, views::ViewObserver>
+      observed_views_{this};
 };
 }  // namespace ash
 
diff --git a/ash/ambient/ui/media_string_view.cc b/ash/ambient/ui/media_string_view.cc
index 0660680..3e35d390 100644
--- a/ash/ambient/ui/media_string_view.cc
+++ b/ash/ambient/ui/media_string_view.cc
@@ -219,7 +219,7 @@
   text_layout->SetOrientation(views::LayoutOrientation::kHorizontal);
   text_layout->SetMainAxisAlignment(views::LayoutAlignment::kStart);
   text_layout->SetCrossAxisAlignment(views::LayoutAlignment::kCenter);
-  observed_view_.Add(media_text_container_);
+  observed_view_.Observe(media_text_container_);
 
   media_text_ =
       media_text_container_->AddChildView(std::make_unique<views::Label>());
diff --git a/ash/ambient/ui/media_string_view.h b/ash/ambient/ui/media_string_view.h
index 0ce2a4ff..cce0abc 100644
--- a/ash/ambient/ui/media_string_view.h
+++ b/ash/ambient/ui/media_string_view.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/media_session/public/mojom/media_controller.mojom.h"
@@ -98,7 +98,8 @@
   mojo::Receiver<media_session::mojom::MediaControllerObserver>
       observer_receiver_{this};
 
-  ScopedObserver<views::View, views::ViewObserver> observed_view_{this};
+  base::ScopedObservation<views::View, views::ViewObserver> observed_view_{
+      this};
 
   base::WeakPtrFactory<MediaStringView> weak_factory_{this};
 };
diff --git a/ash/app_list/app_list_presenter_delegate_impl.cc b/ash/app_list/app_list_presenter_delegate_impl.cc
index dcb2be5..a38f368 100644
--- a/ash/app_list/app_list_presenter_delegate_impl.cc
+++ b/ash/app_list/app_list_presenter_delegate_impl.cc
@@ -81,7 +81,7 @@
 AppListPresenterDelegateImpl::AppListPresenterDelegateImpl(
     AppListControllerImpl* controller)
     : controller_(controller) {
-  display_observer_.Add(display::Screen::GetScreen());
+  display_observation_.Observe(display::Screen::GetScreen());
 }
 
 AppListPresenterDelegateImpl::~AppListPresenterDelegateImpl() {
@@ -119,8 +119,8 @@
 
   Shelf* shelf =
       Shelf::ForWindow(view_->GetWidget()->GetNativeView()->GetRootWindow());
-  if (!shelf_observer_.IsObserving(shelf))
-    shelf_observer_.Add(shelf);
+  if (!shelf_observation_.IsObservingSource(shelf))
+    shelf_observation_.Observe(shelf);
 
   view_->SetShelfHasRoundedCorners(
       IsShelfBackgroundTypeWithRoundedCorners(shelf->GetBackgroundType()));
@@ -142,7 +142,7 @@
 
 void AppListPresenterDelegateImpl::OnClosed() {
   if (!is_visible_)
-    shelf_observer_.RemoveAll();
+    shelf_observation_.Reset();
   controller_->ViewClosed();
 }
 
diff --git a/ash/app_list/app_list_presenter_delegate_impl.h b/ash/app_list/app_list_presenter_delegate_impl.h
index 46d3515..214405ef 100644
--- a/ash/app_list/app_list_presenter_delegate_impl.h
+++ b/ash/app_list/app_list_presenter_delegate_impl.h
@@ -12,7 +12,7 @@
 #include "ash/shelf/shelf.h"
 #include "ash/shelf/shelf_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/display/display_observer.h"
 #include "ui/display/screen.h"
 #include "ui/events/event_handler.h"
@@ -88,11 +88,11 @@
   AppListControllerImpl* const controller_ = nullptr;
 
   // An observer that notifies AppListView when the display has changed.
-  ScopedObserver<display::Screen, display::DisplayObserver> display_observer_{
-      this};
+  base::ScopedObservation<display::Screen, display::DisplayObserver>
+      display_observation_{this};
 
   // An observer that notifies AppListView when the shelf state has changed.
-  ScopedObserver<Shelf, ShelfObserver> shelf_observer_{this};
+  base::ScopedObservation<Shelf, ShelfObserver> shelf_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AppListPresenterDelegateImpl);
 };
diff --git a/ash/app_list/model/app_list_folder_item.cc b/ash/app_list/model/app_list_folder_item.cc
index d34e57d..752f0a3 100644
--- a/ash/app_list/model/app_list_folder_item.cc
+++ b/ash/app_list/model/app_list_folder_item.cc
@@ -21,7 +21,7 @@
       {AppListConfigType::kLarge, AppListConfigType::kMedium,
        AppListConfigType::kSmall},
       false /*request_icon_update*/);
-  config_provider_observer_.Add(&AppListConfigProvider::Get());
+  config_provider_observation_.Observe(&AppListConfigProvider::Get());
   set_is_folder(true);
 }
 
diff --git a/ash/app_list/model/app_list_folder_item.h b/ash/app_list/model/app_list_folder_item.h
index f4abcb6..e2147c0c 100644
--- a/ash/app_list/model/app_list_folder_item.h
+++ b/ash/app_list/model/app_list_folder_item.h
@@ -20,7 +20,7 @@
 #include "ash/public/cpp/app_list/app_list_config_provider.h"
 #include "ash/public/cpp/app_list/app_list_types.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace gfx {
 class Rect;
@@ -115,8 +115,9 @@
   // Set when a folder item is being dragged.
   AppListItem* dragged_item_ = nullptr;
 
-  ScopedObserver<AppListConfigProvider, AppListConfigProvider::Observer>
-      config_provider_observer_{this};
+  base::ScopedObservation<AppListConfigProvider,
+                          AppListConfigProvider::Observer>
+      config_provider_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AppListFolderItem);
 };
diff --git a/ash/app_list/model/app_list_model.cc b/ash/app_list/model/app_list_model.cc
index fddd0fb..304b07e 100644
--- a/ash/app_list/model/app_list_model.cc
+++ b/ash/app_list/model/app_list_model.cc
@@ -16,11 +16,11 @@
 
 AppListModel::AppListModel()
     : top_level_item_list_(std::make_unique<AppListItemList>()) {
-  item_list_scoped_observer_.Add(top_level_item_list_.get());
+  item_list_scoped_observations_.AddObservation(top_level_item_list_.get());
 }
 
 AppListModel::~AppListModel() {
-  item_list_scoped_observer_.RemoveAll();
+  item_list_scoped_observations_.RemoveAllObservations();
 }
 
 void AppListModel::AddObserver(AppListModelObserver* observer) {
@@ -259,7 +259,7 @@
     for (auto& observer : observers_)
       observer.OnAppListItemWillBeDeleted(item);
     if (item->GetItemType() == AppListFolderItem::kItemType) {
-      item_list_scoped_observer_.Remove(
+      item_list_scoped_observations_.RemoveObservation(
           static_cast<AppListFolderItem*>(item)->item_list());
     }
     top_level_item_list_->DeleteItem(id);
@@ -303,7 +303,7 @@
     for (auto& observer : observers_)
       observer.OnAppListItemWillBeDeleted(item);
     if (item->GetItemType() == AppListFolderItem::kItemType) {
-      item_list_scoped_observer_.Remove(
+      item_list_scoped_observations_.RemoveObservation(
           static_cast<AppListFolderItem*>(item)->item_list());
     }
     top_level_item_list_->DeleteItemAt(0);
@@ -344,7 +344,7 @@
     std::unique_ptr<AppListItem> item_ptr) {
   DCHECK(!item_ptr->IsInFolder());
   if (item_ptr->GetItemType() == AppListFolderItem::kItemType) {
-    item_list_scoped_observer_.Add(
+    item_list_scoped_observations_.AddObservation(
         static_cast<AppListFolderItem*>(item_ptr.get())->item_list());
   }
   AppListItem* item = top_level_item_list_->AddItem(std::move(item_ptr));
@@ -376,7 +376,7 @@
 std::unique_ptr<AppListItem> AppListModel::RemoveItem(AppListItem* item) {
   if (!item->IsInFolder()) {
     if (item->GetItemType() == AppListFolderItem::kItemType) {
-      item_list_scoped_observer_.Remove(
+      item_list_scoped_observations_.RemoveObservation(
           static_cast<AppListFolderItem*>(item)->item_list());
     }
     return top_level_item_list_->RemoveItem(item->id());
diff --git a/ash/app_list/model/app_list_model.h b/ash/app_list/model/app_list_model.h
index 4108532..756d091 100644
--- a/ash/app_list/model/app_list_model.h
+++ b/ash/app_list/model/app_list_model.h
@@ -17,7 +17,7 @@
 #include "ash/public/cpp/app_list/app_list_types.h"
 #include "base/macros.h"
 #include "base/observer_list.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 
 namespace ash {
 
@@ -165,8 +165,8 @@
   // The AppListView state. Controlled by the AppListView.
   AppListViewState state_fullscreen_ = AppListViewState::kClosed;
   base::ObserverList<AppListModelObserver, true>::Unchecked observers_;
-  ScopedObserver<AppListItemList, AppListItemListObserver>
-      item_list_scoped_observer_{this};
+  base::ScopedMultiSourceObservation<AppListItemList, AppListItemListObserver>
+      item_list_scoped_observations_{this};
   DISALLOW_COPY_AND_ASSIGN(AppListModel);
 };
 
diff --git a/ash/app_list/views/assistant/assistant_dialog_plate.cc b/ash/app_list/views/assistant/assistant_dialog_plate.cc
index a632133..35154ee 100644
--- a/ash/app_list/views/assistant/assistant_dialog_plate.cc
+++ b/ash/app_list/views/assistant/assistant_dialog_plate.cc
@@ -104,7 +104,7 @@
   SetID(AssistantViewID::kDialogPlate);
   InitLayout();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantInteractionController::Get()->GetModel()->AddObserver(this);
   AssistantUiController::Get()->GetModel()->AddObserver(this);
 }
@@ -174,7 +174,9 @@
 void AssistantDialogPlate::OnAssistantControllerDestroying() {
   AssistantUiController::Get()->GetModel()->RemoveObserver(this);
   AssistantInteractionController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void AssistantDialogPlate::OnInputModalityChanged(
diff --git a/ash/app_list/views/assistant/assistant_dialog_plate.h b/ash/app_list/views/assistant/assistant_dialog_plate.h
index 6ea07c0..0a3deb6 100644
--- a/ash/app_list/views/assistant/assistant_dialog_plate.h
+++ b/ash/app_list/views/assistant/assistant_dialog_plate.h
@@ -17,7 +17,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/component_export.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/textfield/textfield_controller.h"
 #include "ui/views/view.h"
@@ -110,8 +110,8 @@
   std::unique_ptr<ui::CallbackLayerAnimationObserver> animation_observer_;
   std::unique_ptr<AssistantQueryHistory::Iterator> query_history_iterator_;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AssistantDialogPlate);
 };
diff --git a/ash/app_list/views/assistant/assistant_main_stage.cc b/ash/app_list/views/assistant/assistant_main_stage.cc
index 25a3ad7..c5fc998 100644
--- a/ash/app_list/views/assistant/assistant_main_stage.cc
+++ b/ash/app_list/views/assistant/assistant_main_stage.cc
@@ -121,7 +121,7 @@
   SetID(AssistantViewID::kMainStage);
   InitLayout();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantInteractionController::Get()->GetModel()->AddObserver(this);
   AssistantUiController::Get()->GetModel()->AddObserver(this);
 }
@@ -314,7 +314,9 @@
 void AppListAssistantMainStage::OnAssistantControllerDestroying() {
   AssistantUiController::Get()->GetModel()->RemoveObserver(this);
   AssistantInteractionController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void AppListAssistantMainStage::OnCommittedQueryChanged(
diff --git a/ash/app_list/views/assistant/assistant_main_stage.h b/ash/app_list/views/assistant/assistant_main_stage.h
index db775a8..47ed099 100644
--- a/ash/app_list/views/assistant/assistant_main_stage.h
+++ b/ash/app_list/views/assistant/assistant_main_stage.h
@@ -13,7 +13,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/view.h"
 #include "ui/views/view_observer.h"
 
@@ -85,8 +85,8 @@
   AssistantZeroStateView* zero_state_view_;
   AssistantFooterView* footer_;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AppListAssistantMainStage);
 };
diff --git a/ash/app_list/views/assistant/assistant_main_view.cc b/ash/app_list/views/assistant/assistant_main_view.cc
index 886248f..e7c76f38 100644
--- a/ash/app_list/views/assistant/assistant_main_view.cc
+++ b/ash/app_list/views/assistant/assistant_main_view.cc
@@ -37,7 +37,7 @@
   SetID(AssistantViewID::kMainView);
   InitLayout();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantUiController::Get()->GetModel()->AddObserver(this);
 }
 
@@ -79,7 +79,9 @@
 
 void AssistantMainView::OnAssistantControllerDestroying() {
   AssistantUiController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void AssistantMainView::OnUiVisibilityChanged(
diff --git a/ash/app_list/views/assistant/assistant_main_view.h b/ash/app_list/views/assistant/assistant_main_view.h
index effe4609..fa8d34fc 100644
--- a/ash/app_list/views/assistant/assistant_main_view.h
+++ b/ash/app_list/views/assistant/assistant_main_view.h
@@ -12,7 +12,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/view.h"
 
 namespace ash {
@@ -54,8 +54,8 @@
   AssistantDialogPlate* dialog_plate_;     // Owned by view hierarchy.
   AppListAssistantMainStage* main_stage_;  // Owned by view hierarchy.
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AssistantMainView);
 };
diff --git a/ash/app_list/views/assistant/assistant_page_view.cc b/ash/app_list/views/assistant/assistant_page_view.cc
index d31dc00..af7f9f0a 100644
--- a/ash/app_list/views/assistant/assistant_page_view.cc
+++ b/ash/app_list/views/assistant/assistant_page_view.cc
@@ -138,7 +138,7 @@
   InitLayout();
 
   if (AssistantController::Get())  // May be |nullptr| in tests.
-    assistant_controller_observer_.Add(AssistantController::Get());
+    assistant_controller_observation_.Observe(AssistantController::Get());
 
   if (AssistantUiController::Get())  // May be |nullptr| in tests.
     AssistantUiController::Get()->GetModel()->AddObserver(this);
@@ -392,8 +392,12 @@
   if (AssistantUiController::Get())  // May be |nullptr| in tests.
     AssistantUiController::Get()->GetModel()->RemoveObserver(this);
 
-  if (AssistantController::Get())  // May be |nullptr| in tests.
-    assistant_controller_observer_.Remove(AssistantController::Get());
+  if (AssistantController::Get()) {
+    // May be |nullptr| in tests.
+    DCHECK(assistant_controller_observation_.IsObservingSource(
+        AssistantController::Get()));
+    assistant_controller_observation_.Reset();
+  }
 }
 
 void AssistantPageView::OnUiVisibilityChanged(
diff --git a/ash/app_list/views/assistant/assistant_page_view.h b/ash/app_list/views/assistant/assistant_page_view.h
index 3e7de336..7d7204e 100644
--- a/ash/app_list/views/assistant/assistant_page_view.h
+++ b/ash/app_list/views/assistant/assistant_page_view.h
@@ -15,7 +15,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/macros.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace ash {
 
@@ -86,8 +86,8 @@
 
   std::unique_ptr<ViewShadow> view_shadow_;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AssistantPageView);
 };
diff --git a/ash/app_list/views/assistant/assistant_page_view_unittest.cc b/ash/app_list/views/assistant/assistant_page_view_unittest.cc
index 221a696..d481d03 100644
--- a/ash/app_list/views/assistant/assistant_page_view_unittest.cc
+++ b/ash/app_list/views/assistant/assistant_page_view_unittest.cc
@@ -10,7 +10,6 @@
 #include "ash/assistant/ui/main_stage/suggestion_chip_view.h"
 #include "ash/public/cpp/app_list/app_list_types.h"
 #include "base/run_loop.h"
-#include "base/scoped_observer.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
diff --git a/ash/app_list/views/search_result_container_view.cc b/ash/app_list/views/search_result_container_view.cc
index 8816b64..2b27880 100644
--- a/ash/app_list/views/search_result_container_view.cc
+++ b/ash/app_list/views/search_result_container_view.cc
@@ -52,12 +52,12 @@
 
 void SearchResultContainerView::AddObservedResultView(
     SearchResultBaseView* result_view) {
-  result_view_observer_.Add(result_view);
+  result_view_observations_.AddObservation(result_view);
 }
 
 void SearchResultContainerView::RemoveObservedResultView(
     SearchResultBaseView* result_view) {
-  result_view_observer_.Remove(result_view);
+  result_view_observations_.RemoveObservation(result_view);
 }
 
 void SearchResultContainerView::ListItemsAdded(size_t /*start*/,
diff --git a/ash/app_list/views/search_result_container_view.h b/ash/app_list/views/search_result_container_view.h
index fa2bf3e1..1012d38 100644
--- a/ash/app_list/views/search_result_container_view.h
+++ b/ash/app_list/views/search_result_container_view.h
@@ -14,7 +14,7 @@
 #include "ash/app_list/views/search_result_base_view.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "ui/views/view.h"
 #include "ui/views/view_observer.h"
 
@@ -116,7 +116,8 @@
   bool shown_ = false;
   AppListViewDelegate* const view_delegate_;
 
-  ScopedObserver<views::View, views::ViewObserver> result_view_observer_{this};
+  base::ScopedMultiSourceObservation<views::View, views::ViewObserver>
+      result_view_observations_{this};
 
   // The factory that consolidates multiple Update calls into one.
   base::WeakPtrFactory<SearchResultContainerView> update_factory_{this};
diff --git a/ash/app_list/views/search_result_page_anchored_dialog.cc b/ash/app_list/views/search_result_page_anchored_dialog.cc
index 134a690..c6059f5 100644
--- a/ash/app_list/views/search_result_page_anchored_dialog.cc
+++ b/ash/app_list/views/search_result_page_anchored_dialog.cc
@@ -36,12 +36,12 @@
   // The |dialog| ownership is passed to the window hierarchy.
   widget_ = views::DialogDelegate::CreateDialogWidget(
       dialog.release(), nullptr, parent->GetNativeWindow());
-  widget_observer_.Add(widget_);
-  widget_observer_.Add(parent);
+  widget_observations_.AddObservation(widget_);
+  widget_observations_.AddObservation(parent);
 }
 
 SearchResultPageAnchoredDialog::~SearchResultPageAnchoredDialog() {
-  widget_observer_.RemoveAll();
+  widget_observations_.RemoveAllObservations();
   if (widget_)
     widget_->Close();
 }
@@ -80,7 +80,7 @@
 
 void SearchResultPageAnchoredDialog::OnWidgetClosing(views::Widget* widget) {
   widget_ = nullptr;
-  widget_observer_.RemoveAll();
+  widget_observations_.RemoveAllObservations();
   if (callback_)
     std::move(callback_).Run();
 }
diff --git a/ash/app_list/views/search_result_page_anchored_dialog.h b/ash/app_list/views/search_result_page_anchored_dialog.h
index 2e380a2..297c483 100644
--- a/ash/app_list/views/search_result_page_anchored_dialog.h
+++ b/ash/app_list/views/search_result_page_anchored_dialog.h
@@ -8,7 +8,7 @@
 #include <memory>
 
 #include "base/callback.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_observer.h"
 
@@ -71,7 +71,8 @@
   // Most recent anchor bounds (in |host_view_| coordinates).
   gfx::Rect anchor_bounds_;
 
-  ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_{this};
+  base::ScopedMultiSourceObservation<views::Widget, views::WidgetObserver>
+      widget_observations_{this};
 };
 
 }  // namespace ash
diff --git a/ash/app_list/views/search_result_page_view.cc b/ash/app_list/views/search_result_page_view.cc
index 2b7cb08..58c425ca2 100644
--- a/ash/app_list/views/search_result_page_view.cc
+++ b/ash/app_list/views/search_result_page_view.cc
@@ -207,7 +207,7 @@
       base::BindRepeating(&SearchResultPageView::SelectedResultChanged,
                           base::Unretained(this)));
 
-  search_box_observer_.Add(search_model->search_box());
+  search_box_observation_.Observe(search_model->search_box());
 }
 
 SearchResultPageView::~SearchResultPageView() = default;
diff --git a/ash/app_list/views/search_result_page_view.h b/ash/app_list/views/search_result_page_view.h
index a9d1f93..bab73a29 100644
--- a/ash/app_list/views/search_result_page_view.h
+++ b/ash/app_list/views/search_result_page_view.h
@@ -194,8 +194,8 @@
   // The dialog anchored within the search results page.
   std::unique_ptr<SearchResultPageAnchoredDialog> anchored_dialog_;
 
-  ScopedObserver<SearchBoxModel, SearchBoxModelObserver> search_box_observer_{
-      this};
+  base::ScopedObservation<SearchBoxModel, SearchBoxModelObserver>
+      search_box_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(SearchResultPageView);
 };
diff --git a/ash/app_menu/notification_menu_controller.cc b/ash/app_menu/notification_menu_controller.cc
index 392ae44fc..b845346 100644
--- a/ash/app_menu/notification_menu_controller.cc
+++ b/ash/app_menu/notification_menu_controller.cc
@@ -19,10 +19,9 @@
     AppMenuModelAdapter* app_menu_model_adapter)
     : app_id_(app_id),
       root_menu_(root_menu),
-      app_menu_model_adapter_(app_menu_model_adapter),
-      message_center_observer_(this) {
+      app_menu_model_adapter_(app_menu_model_adapter) {
   DCHECK(app_menu_model_adapter_);
-  message_center_observer_.Add(message_center::MessageCenter::Get());
+  message_center_observation_.Observe(message_center::MessageCenter::Get());
   InitializeNotificationMenuView();
 }
 
diff --git a/ash/app_menu/notification_menu_controller.h b/ash/app_menu/notification_menu_controller.h
index d6e622e..ed72b5a 100644
--- a/ash/app_menu/notification_menu_controller.h
+++ b/ash/app_menu/notification_menu_controller.h
@@ -7,7 +7,7 @@
 
 #include "ash/app_menu/app_menu_export.h"
 #include "ash/app_menu/notification_menu_view.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/message_center/message_center.h"
 #include "ui/message_center/message_center_observer.h"
 #include "ui/views/animation/slide_out_controller_delegate.h"
@@ -69,9 +69,9 @@
   // views hierarchy.
   NotificationMenuView* notification_menu_view_ = nullptr;
 
-  ScopedObserver<message_center::MessageCenter,
-                 message_center::MessageCenterObserver>
-      message_center_observer_;
+  base::ScopedObservation<message_center::MessageCenter,
+                          message_center::MessageCenterObserver>
+      message_center_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(NotificationMenuController);
 };
diff --git a/ash/assistant/assistant_alarm_timer_controller_impl.cc b/ash/assistant/assistant_alarm_timer_controller_impl.cc
index 7bb52eb..35123a3 100644
--- a/ash/assistant/assistant_alarm_timer_controller_impl.cc
+++ b/ash/assistant/assistant_alarm_timer_controller_impl.cc
@@ -333,7 +333,7 @@
     AssistantControllerImpl* assistant_controller)
     : assistant_controller_(assistant_controller) {
   model_.AddObserver(this);
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
 }
 
 AssistantAlarmTimerControllerImpl::~AssistantAlarmTimerControllerImpl() {
diff --git a/ash/assistant/assistant_alarm_timer_controller_impl.h b/ash/assistant/assistant_alarm_timer_controller_impl.h
index b24300b..c7d05cd2 100644
--- a/ash/assistant/assistant_alarm_timer_controller_impl.h
+++ b/ash/assistant/assistant_alarm_timer_controller_impl.h
@@ -16,7 +16,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/timer/timer.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 
@@ -85,8 +85,8 @@
   // Owned by AssistantService.
   chromeos::assistant::Assistant* assistant_;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AssistantAlarmTimerControllerImpl);
 };
diff --git a/ash/assistant/assistant_controller_impl_unittest.cc b/ash/assistant/assistant_controller_impl_unittest.cc
index 9f4f277..351928a 100644
--- a/ash/assistant/assistant_controller_impl_unittest.cc
+++ b/ash/assistant/assistant_controller_impl_unittest.cc
@@ -12,7 +12,7 @@
 #include "ash/assistant/util/deep_link_util.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "ash/public/cpp/test/test_new_window_delegate.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
 namespace ash {
@@ -98,9 +98,9 @@
 // Tests that AssistantController observers are notified of deep link received.
 TEST_F(AssistantControllerImplTest, NotifiesDeepLinkReceived) {
   testing::NiceMock<MockAssistantControllerObserver> controller_observer_mock;
-  ScopedObserver<AssistantController, AssistantControllerObserver>
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
       scoped_controller_obs{&controller_observer_mock};
-  scoped_controller_obs.Add(controller());
+  scoped_controller_obs.Observe(controller());
 
   EXPECT_CALL(controller_observer_mock, OnDeepLinkReceived)
       .WillOnce(
@@ -122,9 +122,9 @@
 // before and after the URL is actually opened respectively.
 TEST_F(AssistantControllerImplTest, NotifiesOpeningUrlAndUrlOpened) {
   testing::NiceMock<MockAssistantControllerObserver> controller_observer_mock;
-  ScopedObserver<AssistantController, AssistantControllerObserver>
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
       scoped_controller_obs{&controller_observer_mock};
-  scoped_controller_obs.Add(controller());
+  scoped_controller_obs.Observe(controller());
 
   // Enforce ordering of events.
   testing::InSequence sequence;
@@ -155,9 +155,9 @@
 
 TEST_F(AssistantControllerImplTest, OpensFeedbackPageForFeedbackDeeplink) {
   testing::NiceMock<MockAssistantControllerObserver> controller_observer_mock;
-  ScopedObserver<AssistantController, AssistantControllerObserver>
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
       scoped_controller_obs{&controller_observer_mock};
-  scoped_controller_obs.Add(controller());
+  scoped_controller_obs.Observe(controller());
 
   EXPECT_CALL(controller_observer_mock, OnDeepLinkReceived)
       .WillOnce(
diff --git a/ash/assistant/assistant_interaction_controller_impl.cc b/ash/assistant/assistant_interaction_controller_impl.cc
index 43ca62a..a2dd2d27 100644
--- a/ash/assistant/assistant_interaction_controller_impl.cc
+++ b/ash/assistant/assistant_interaction_controller_impl.cc
@@ -90,9 +90,10 @@
     : assistant_controller_(assistant_controller) {
   model_.AddObserver(this);
 
-  assistant_controller_observer_.Add(AssistantController::Get());
-  highlighter_controller_observer_.Add(Shell::Get()->highlighter_controller());
-  tablet_mode_controller_observer_.Add(GetTabletModeController());
+  assistant_controller_observation_.Observe(AssistantController::Get());
+  highlighter_controller_observation_.Observe(
+      Shell::Get()->highlighter_controller());
+  tablet_mode_controller_observation_.Observe(GetTabletModeController());
 }
 
 AssistantInteractionControllerImpl::~AssistantInteractionControllerImpl() {
diff --git a/ash/assistant/assistant_interaction_controller_impl.h b/ash/assistant/assistant_interaction_controller_impl.h
index c83dc0b..c8095f93 100644
--- a/ash/assistant/assistant_interaction_controller_impl.h
+++ b/ash/assistant/assistant_interaction_controller_impl.h
@@ -22,7 +22,7 @@
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 
@@ -148,14 +148,15 @@
   // Owned by AssistantService.
   chromeos::assistant::Assistant* assistant_ = nullptr;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
-  ScopedObserver<HighlighterController, HighlighterController::Observer>
-      highlighter_controller_observer_{this};
+  base::ScopedObservation<HighlighterController,
+                          HighlighterController::Observer>
+      highlighter_controller_observation_{this};
 
-  ScopedObserver<TabletModeController, TabletModeObserver>
-      tablet_mode_controller_observer_{this};
+  base::ScopedObservation<TabletModeController, TabletModeObserver>
+      tablet_mode_controller_observation_{this};
 
   base::WeakPtrFactory<AssistantInteractionControllerImpl>
       screen_context_request_factory_{this};
diff --git a/ash/assistant/assistant_interaction_controller_impl_unittest.cc b/ash/assistant/assistant_interaction_controller_impl_unittest.cc
index 5914ec61..4a7b7814 100644
--- a/ash/assistant/assistant_interaction_controller_impl_unittest.cc
+++ b/ash/assistant/assistant_interaction_controller_impl_unittest.cc
@@ -20,7 +20,6 @@
 #include "ash/public/cpp/assistant/controller/assistant_suggestions_controller.h"
 #include "ash/test/fake_android_intent_helper.h"
 #include "base/bind.h"
-#include "base/scoped_observer.h"
 #include "base/test/scoped_feature_list.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 #include "chromeos/services/assistant/public/cpp/features.h"
diff --git a/ash/assistant/assistant_screen_context_controller_impl.cc b/ash/assistant/assistant_screen_context_controller_impl.cc
index aac33c0..1c9a1f4 100644
--- a/ash/assistant/assistant_screen_context_controller_impl.cc
+++ b/ash/assistant/assistant_screen_context_controller_impl.cc
@@ -182,7 +182,7 @@
 AssistantScreenContextControllerImpl::AssistantScreenContextControllerImpl(
     AssistantControllerImpl* assistant_controller)
     : assistant_controller_(assistant_controller) {
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
 }
 
 AssistantScreenContextControllerImpl::~AssistantScreenContextControllerImpl() =
diff --git a/ash/assistant/assistant_screen_context_controller_impl.h b/ash/assistant/assistant_screen_context_controller_impl.h
index 4a67fcf6..636fd38 100644
--- a/ash/assistant/assistant_screen_context_controller_impl.h
+++ b/ash/assistant/assistant_screen_context_controller_impl.h
@@ -18,7 +18,7 @@
 #include "base/callback_forward.h"
 #include "base/macros.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
@@ -104,8 +104,8 @@
 
   AssistantScreenContextModel model_;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   base::WeakPtrFactory<AssistantScreenContextControllerImpl> weak_factory_{
       this};
diff --git a/ash/assistant/assistant_setup_controller.cc b/ash/assistant/assistant_setup_controller.cc
index 26d36cc..4fbe95f 100644
--- a/ash/assistant/assistant_setup_controller.cc
+++ b/ash/assistant/assistant_setup_controller.cc
@@ -25,7 +25,7 @@
 AssistantSetupController::AssistantSetupController(
     AssistantControllerImpl* assistant_controller)
     : assistant_controller_(assistant_controller) {
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
 }
 
 AssistantSetupController::~AssistantSetupController() = default;
diff --git a/ash/assistant/assistant_setup_controller.h b/ash/assistant/assistant_setup_controller.h
index 6fa22d1..eadd721 100644
--- a/ash/assistant/assistant_setup_controller.h
+++ b/ash/assistant/assistant_setup_controller.h
@@ -14,7 +14,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace ash {
 
@@ -44,8 +44,8 @@
 
   AssistantControllerImpl* const assistant_controller_;  // Owned by Shell.
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   base::WeakPtrFactory<AssistantSetupController> weak_ptr_factory_{this};
 
diff --git a/ash/assistant/assistant_suggestions_controller_impl.cc b/ash/assistant/assistant_suggestions_controller_impl.cc
index 93343ae9..6c125e5f 100644
--- a/ash/assistant/assistant_suggestions_controller_impl.cc
+++ b/ash/assistant/assistant_suggestions_controller_impl.cc
@@ -80,7 +80,7 @@
   if (!IsConversationStartersV2Enabled())
     UpdateConversationStarters();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
 }
 
 AssistantSuggestionsControllerImpl::~AssistantSuggestionsControllerImpl() =
diff --git a/ash/assistant/assistant_suggestions_controller_impl.h b/ash/assistant/assistant_suggestions_controller_impl.h
index 3196cdd..8b9e406 100644
--- a/ash/assistant/assistant_suggestions_controller_impl.h
+++ b/ash/assistant/assistant_suggestions_controller_impl.h
@@ -14,7 +14,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "ash/public/cpp/assistant/controller/assistant_suggestions_controller.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace ash {
 
@@ -57,8 +57,8 @@
 
   AssistantSuggestionsModel model_;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   // A WeakPtrFactory used to manage lifecycle of conversation starter requests
   // to the server (via the dedicated ConversationStartersClient).
diff --git a/ash/assistant/assistant_ui_controller_impl.cc b/ash/assistant/assistant_ui_controller_impl.cc
index 2edce27..eaee791 100644
--- a/ash/assistant/assistant_ui_controller_impl.cc
+++ b/ash/assistant/assistant_ui_controller_impl.cc
@@ -67,9 +67,10 @@
     AssistantControllerImpl* assistant_controller)
     : assistant_controller_(assistant_controller) {
   model_.AddObserver(this);
-  assistant_controller_observer_.Add(AssistantController::Get());
-  highlighter_controller_observer_.Add(Shell::Get()->highlighter_controller());
-  overview_controller_observer_.Add(Shell::Get()->overview_controller());
+  assistant_controller_observation_.Observe(AssistantController::Get());
+  highlighter_controller_observation_.Observe(
+      Shell::Get()->highlighter_controller());
+  overview_controller_observation_.Observe(Shell::Get()->overview_controller());
 }
 
 AssistantUiControllerImpl::~AssistantUiControllerImpl() {
diff --git a/ash/assistant/assistant_ui_controller_impl.h b/ash/assistant/assistant_ui_controller_impl.h
index 06c6cd1..f3308edb 100644
--- a/ash/assistant/assistant_ui_controller_impl.h
+++ b/ash/assistant/assistant_ui_controller_impl.h
@@ -22,7 +22,7 @@
 #include "ash/wm/overview/overview_observer.h"
 #include "base/macros.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 class PrefRegistrySimple;
 
@@ -107,14 +107,15 @@
   // Owned by AssistantService.
   chromeos::assistant::Assistant* assistant_ = nullptr;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
-  ScopedObserver<HighlighterController, HighlighterController::Observer>
-      highlighter_controller_observer_{this};
+  base::ScopedObservation<HighlighterController,
+                          HighlighterController::Observer>
+      highlighter_controller_observation_{this};
 
-  ScopedObserver<OverviewController, OverviewObserver>
-      overview_controller_observer_{this};
+  base::ScopedObservation<OverviewController, OverviewObserver>
+      overview_controller_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AssistantUiControllerImpl);
 };
diff --git a/ash/assistant/assistant_web_ui_controller.cc b/ash/assistant/assistant_web_ui_controller.cc
index f8f7c6d5..21240df1b 100644
--- a/ash/assistant/assistant_web_ui_controller.cc
+++ b/ash/assistant/assistant_web_ui_controller.cc
@@ -66,7 +66,7 @@
 // AssistantWebUiController:
 
 AssistantWebUiController::AssistantWebUiController() {
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
 }
 
 AssistantWebUiController::~AssistantWebUiController() {
diff --git a/ash/assistant/assistant_web_ui_controller.h b/ash/assistant/assistant_web_ui_controller.h
index 78f863b4..4dc7d4f 100644
--- a/ash/assistant/assistant_web_ui_controller.h
+++ b/ash/assistant/assistant_web_ui_controller.h
@@ -13,7 +13,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/widget/widget_observer.h"
 
 namespace ash {
@@ -62,8 +62,8 @@
   // Observes key press events on the |web_container_view_|.
   std::unique_ptr<AssistantWebContainerEventObserver> event_observer_;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AssistantWebUiController);
 };
diff --git a/ash/assistant/ui/dialog_plate/mic_view.cc b/ash/assistant/ui/dialog_plate/mic_view.cc
index 689a84be..beeeaa0 100644
--- a/ash/assistant/ui/dialog_plate/mic_view.cc
+++ b/ash/assistant/ui/dialog_plate/mic_view.cc
@@ -33,7 +33,7 @@
     : AssistantButton(listener, button_id) {
   InitLayout();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantInteractionController::Get()->GetModel()->AddObserver(this);
 }
 
@@ -52,7 +52,9 @@
 
 void MicView::OnAssistantControllerDestroying() {
   AssistantInteractionController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void MicView::OnMicStateChanged(MicState mic_state) {
diff --git a/ash/assistant/ui/dialog_plate/mic_view.h b/ash/assistant/ui/dialog_plate/mic_view.h
index 5712645b..0c90516 100644
--- a/ash/assistant/ui/dialog_plate/mic_view.h
+++ b/ash/assistant/ui/dialog_plate/mic_view.h
@@ -11,7 +11,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/component_export.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/metadata/metadata_header_macros.h"
 
 namespace ash {
@@ -58,8 +58,8 @@
   // kUserSpeaks state.
   bool is_user_speaking_ = false;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/assistant/ui/main_stage/animated_container_view.cc b/ash/assistant/ui/main_stage/animated_container_view.cc
index 26e6b08..3aef32d 100644
--- a/ash/assistant/ui/main_stage/animated_container_view.cc
+++ b/ash/assistant/ui/main_stage/animated_container_view.cc
@@ -40,7 +40,7 @@
 
 AnimatedContainerView::AnimatedContainerView(AssistantViewDelegate* delegate)
     : delegate_(delegate) {
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantInteractionController::Get()->GetModel()->AddObserver(this);
 
   AddScrollViewObserver(this);
@@ -76,7 +76,9 @@
 
 void AnimatedContainerView::OnAssistantControllerDestroying() {
   AssistantInteractionController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void AnimatedContainerView::OnCommittedQueryChanged(
diff --git a/ash/assistant/ui/main_stage/animated_container_view.h b/ash/assistant/ui/main_stage/animated_container_view.h
index 917c88e..ac791478 100644
--- a/ash/assistant/ui/main_stage/animated_container_view.h
+++ b/ash/assistant/ui/main_stage/animated_container_view.h
@@ -13,7 +13,7 @@
 #include "ash/assistant/ui/base/assistant_scroll_view.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 #include "ui/views/metadata/metadata_header_macros.h"
 
@@ -169,8 +169,8 @@
   scoped_refptr<const AssistantResponse> response_;
   scoped_refptr<const AssistantResponse> queued_response_;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 
   base::WeakPtrFactory<AnimatedContainerView> weak_factory_{this};
 };
diff --git a/ash/assistant/ui/main_stage/assistant_onboarding_view.cc b/ash/assistant/ui/main_stage/assistant_onboarding_view.cc
index 9ea9829..1308efd 100644
--- a/ash/assistant/ui/main_stage/assistant_onboarding_view.cc
+++ b/ash/assistant/ui/main_stage/assistant_onboarding_view.cc
@@ -115,7 +115,7 @@
   SetID(AssistantViewID::kOnboardingView);
   InitLayout();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantSuggestionsController::Get()->GetModel()->AddObserver(this);
   AssistantUiController::Get()->GetModel()->AddObserver(this);
 }
@@ -143,7 +143,9 @@
 void AssistantOnboardingView::OnAssistantControllerDestroying() {
   AssistantUiController::Get()->GetModel()->RemoveObserver(this);
   AssistantSuggestionsController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void AssistantOnboardingView::OnOnboardingSuggestionsChanged(
diff --git a/ash/assistant/ui/main_stage/assistant_onboarding_view.h b/ash/assistant/ui/main_stage/assistant_onboarding_view.h
index e83d20f3..3fe1505a 100644
--- a/ash/assistant/ui/main_stage/assistant_onboarding_view.h
+++ b/ash/assistant/ui/main_stage/assistant_onboarding_view.h
@@ -12,7 +12,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/component_export.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/view.h"
 
 namespace views {
@@ -62,8 +62,8 @@
   views::Label* greeting_ = nullptr;       // Owned by view hierarchy.
   views::View* grid_ = nullptr;            // Owned by view hierarchy.
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/assistant/ui/main_stage/assistant_zero_state_view.cc b/ash/assistant/ui/main_stage/assistant_zero_state_view.cc
index 66e750e..73437b8 100644
--- a/ash/assistant/ui/main_stage/assistant_zero_state_view.cc
+++ b/ash/assistant/ui/main_stage/assistant_zero_state_view.cc
@@ -40,7 +40,7 @@
   InitLayout();
   UpdateLayout();
 
-  assistant_controller_observer_.Add(AssistantController::Get());
+  assistant_controller_observation_.Observe(AssistantController::Get());
   AssistantUiController::Get()->GetModel()->AddObserver(this);
 }
 
@@ -63,7 +63,9 @@
 
 void AssistantZeroStateView::OnAssistantControllerDestroying() {
   AssistantUiController::Get()->GetModel()->RemoveObserver(this);
-  assistant_controller_observer_.Remove(AssistantController::Get());
+  DCHECK(assistant_controller_observation_.IsObservingSource(
+      AssistantController::Get()));
+  assistant_controller_observation_.Reset();
 }
 
 void AssistantZeroStateView::OnUiVisibilityChanged(
diff --git a/ash/assistant/ui/main_stage/assistant_zero_state_view.h b/ash/assistant/ui/main_stage/assistant_zero_state_view.h
index 7ab0291..d31d324 100644
--- a/ash/assistant/ui/main_stage/assistant_zero_state_view.h
+++ b/ash/assistant/ui/main_stage/assistant_zero_state_view.h
@@ -9,7 +9,7 @@
 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
 #include "base/component_export.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/view.h"
 
 namespace views {
@@ -57,8 +57,8 @@
   AssistantOnboardingView* onboarding_view_ = nullptr;
   views::Label* greeting_label_ = nullptr;
 
-  ScopedObserver<AssistantController, AssistantControllerObserver>
-      assistant_controller_observer_{this};
+  base::ScopedObservation<AssistantController, AssistantControllerObserver>
+      assistant_controller_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/clipboard/clipboard_nudge.cc b/ash/clipboard/clipboard_nudge.cc
index b894f69f..88815c4 100644
--- a/ash/clipboard/clipboard_nudge.cc
+++ b/ash/clipboard/clipboard_nudge.cc
@@ -152,7 +152,8 @@
 ClipboardNudge::ClipboardNudge()
     : widget_(std::make_unique<views::Widget>()),
       root_window_(Shell::GetRootWindowForNewWindows()) {
-  shelf_observer_.Add(RootWindowController::ForWindow(root_window_)->shelf());
+  shelf_observation_.Observe(
+      RootWindowController::ForWindow(root_window_)->shelf());
 
   views::Widget::InitParams params(
       views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
diff --git a/ash/clipboard/clipboard_nudge.h b/ash/clipboard/clipboard_nudge.h
index 19d687e..4eee697 100644
--- a/ash/clipboard/clipboard_nudge.h
+++ b/ash/clipboard/clipboard_nudge.h
@@ -8,7 +8,7 @@
 #include "ash/ash_export.h"
 #include "ash/shelf/shelf.h"
 #include "ash/shelf/shelf_observer.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/widget/widget.h"
 
 namespace ash {
@@ -42,7 +42,7 @@
 
   aura::Window* const root_window_;
 
-  ScopedObserver<Shelf, ShelfObserver> shelf_observer_{this};
+  base::ScopedObservation<Shelf, ShelfObserver> shelf_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/detachable_base/detachable_base_handler.cc b/ash/detachable_base/detachable_base_handler.cc
index a4bc632..b77e165 100644
--- a/ash/detachable_base/detachable_base_handler.cc
+++ b/ash/detachable_base/detachable_base_handler.cc
@@ -49,13 +49,13 @@
 
 DetachableBaseHandler::DetachableBaseHandler(PrefService* local_state)
     : local_state_(local_state),
-      hammerd_observer_(this),
-      power_manager_observer_(this) {
+      hammerd_observation_(this),
+      power_manager_observation_(this) {
   if (chromeos::HammerdClient::Get())  // May be null in tests
-    hammerd_observer_.Add(chromeos::HammerdClient::Get());
+    hammerd_observation_.Observe(chromeos::HammerdClient::Get());
   chromeos::PowerManagerClient* power_manager_client =
       chromeos::PowerManagerClient::Get();
-  power_manager_observer_.Add(power_manager_client);
+  power_manager_observation_.Observe(power_manager_client);
 
   power_manager_client->GetSwitchStates(
       base::BindOnce(&DetachableBaseHandler::OnGotPowerManagerSwitchStates,
diff --git a/ash/detachable_base/detachable_base_handler.h b/ash/detachable_base/detachable_base_handler.h
index 2a3a440c..384be6d 100644
--- a/ash/detachable_base/detachable_base_handler.h
+++ b/ash/detachable_base/detachable_base_handler.h
@@ -15,7 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chromeos/dbus/hammerd/hammerd_client.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "components/account_id/account_id.h"
@@ -135,11 +135,12 @@
   DetachableBasePairingStatus pairing_status_ =
       DetachableBasePairingStatus::kNone;
 
-  ScopedObserver<chromeos::HammerdClient, chromeos::HammerdClient::Observer>
-      hammerd_observer_;
-  ScopedObserver<chromeos::PowerManagerClient,
-                 chromeos::PowerManagerClient::Observer>
-      power_manager_observer_;
+  base::ScopedObservation<chromeos::HammerdClient,
+                          chromeos::HammerdClient::Observer>
+      hammerd_observation_;
+  base::ScopedObservation<chromeos::PowerManagerClient,
+                          chromeos::PowerManagerClient::Observer>
+      power_manager_observation_;
 
   // In-memory map from a user account ID to last used device set for user using
   // SetPairedBaseAsLastUsedByUser().
diff --git a/ash/detachable_base/detachable_base_notification_controller.cc b/ash/detachable_base/detachable_base_notification_controller.cc
index ba489df..fcfe072 100644
--- a/ash/detachable_base/detachable_base_notification_controller.cc
+++ b/ash/detachable_base/detachable_base_notification_controller.cc
@@ -38,7 +38,7 @@
 DetachableBaseNotificationController::DetachableBaseNotificationController(
     DetachableBaseHandler* detachable_base_handler)
     : detachable_base_handler_(detachable_base_handler) {
-  detachable_base_observer_.Add(detachable_base_handler);
+  detachable_base_observation_.Observe(detachable_base_handler);
   ShowPairingNotificationIfNeeded();
 }
 
diff --git a/ash/detachable_base/detachable_base_notification_controller.h b/ash/detachable_base/detachable_base_notification_controller.h
index df0144b..8596e95 100644
--- a/ash/detachable_base/detachable_base_notification_controller.h
+++ b/ash/detachable_base/detachable_base_notification_controller.h
@@ -9,7 +9,7 @@
 #include "ash/detachable_base/detachable_base_handler.h"
 #include "ash/detachable_base/detachable_base_observer.h"
 #include "ash/public/cpp/session/session_observer.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace ash {
 
@@ -60,8 +60,8 @@
 
   DetachableBaseHandler* detachable_base_handler_;
 
-  ScopedObserver<DetachableBaseHandler, DetachableBaseObserver>
-      detachable_base_observer_{this};
+  base::ScopedObservation<DetachableBaseHandler, DetachableBaseObserver>
+      detachable_base_observation_{this};
   ScopedSessionObserver session_observer_{this};
 
   DISALLOW_COPY_AND_ASSIGN(DetachableBaseNotificationController);
diff --git a/ash/frame/header_view.cc b/ash/frame/header_view.cc
index 6810ac4..3d9f48d 100644
--- a/ash/frame/header_view.cc
+++ b/ash/frame/header_view.cc
@@ -76,7 +76,7 @@
   UpdateBackButton();
 
   frame_header_->UpdateFrameColors();
-  window_observer_.Add(window);
+  window_observation_.Observe(window);
   Shell::Get()->tablet_mode_controller()->AddObserver(this);
 }
 
@@ -213,7 +213,8 @@
 }
 
 void HeaderView::OnWindowDestroying(aura::Window* window) {
-  window_observer_.Remove(window);
+  DCHECK(window_observation_.IsObservingSource(window));
+  window_observation_.Reset();
   // A HeaderView may outlive the target widget.
   target_widget_ = nullptr;
 }
diff --git a/ash/frame/header_view.h b/ash/frame/header_view.h
index 7308568b..4310fe2 100644
--- a/ash/frame/header_view.h
+++ b/ash/frame/header_view.h
@@ -11,7 +11,7 @@
 #include "ash/public/cpp/tablet_mode_observer.h"
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chromeos/ui/frame/frame_header.h"
 #include "chromeos/ui/frame/immersive/immersive_fullscreen_controller_delegate.h"
 #include "third_party/skia/include/core/SkColor.h"
@@ -178,7 +178,8 @@
   mutable bool is_drawn_override_ = false;
 
   // Observes property changes to |target_widget_|'s window.
-  ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this};
+  base::ScopedObservation<aura::Window, aura::WindowObserver>
+      window_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(HeaderView);
 };
diff --git a/ash/home_screen/home_screen_controller.cc b/ash/home_screen/home_screen_controller.cc
index cd09b49f..875f3e9 100644
--- a/ash/home_screen/home_screen_controller.cc
+++ b/ash/home_screen/home_screen_controller.cc
@@ -286,13 +286,13 @@
 }
 
 void HomeScreenController::OnAppListViewShown() {
-  split_view_observer_.Add(
+  split_view_observation_.Observe(
       SplitViewController::Get(delegate_->GetHomeScreenWindow()));
   UpdateVisibility();
 }
 
 void HomeScreenController::OnAppListViewClosing() {
-  split_view_observer_.RemoveAll();
+  split_view_observation_.Reset();
 }
 
 void HomeScreenController::OnSplitViewStateChanged(
diff --git a/ash/home_screen/home_screen_controller.h b/ash/home_screen/home_screen_controller.h
index 307e702..792f9b3 100644
--- a/ash/home_screen/home_screen_controller.h
+++ b/ash/home_screen/home_screen_controller.h
@@ -17,7 +17,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace ui {
 class ThroughputTracker;
@@ -129,8 +129,8 @@
   // animations.
   base::Optional<ui::ThroughputTracker> smoothness_tracker_;
 
-  ScopedObserver<SplitViewController, SplitViewObserver> split_view_observer_{
-      this};
+  base::ScopedObservation<SplitViewController, SplitViewObserver>
+      split_view_observation_{this};
 
   base::WeakPtrFactory<HomeScreenController> weak_ptr_factory_{this};
 
diff --git a/ash/home_screen/window_scale_animation.cc b/ash/home_screen/window_scale_animation.cc
index 291f3d1..9ba3e4b 100644
--- a/ash/home_screen/window_scale_animation.cc
+++ b/ash/home_screen/window_scale_animation.cc
@@ -45,7 +45,7 @@
     : window_(window),
       opt_callback_(std::move(opt_callback)),
       scale_type_(scale_type) {
-  window_observer_.Add(window);
+  window_observation_.Observe(window);
   WindowBackdrop::Get(window)->DisableBackdrop();
 
   ui::ScopedLayerAnimationSettings settings(window_->layer()->GetAnimator());
diff --git a/ash/home_screen/window_scale_animation.h b/ash/home_screen/window_scale_animation.h
index 24b9c9c..23cb951 100644
--- a/ash/home_screen/window_scale_animation.h
+++ b/ash/home_screen/window_scale_animation.h
@@ -9,7 +9,7 @@
 #include "base/callback_helpers.h"
 #include "base/macros.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_observer.h"
 #include "ui/compositor/layer_animation_observer.h"
@@ -55,7 +55,8 @@
 
   const WindowScaleType scale_type_;
 
-  ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this};
+  base::ScopedObservation<aura::Window, aura::WindowObserver>
+      window_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(WindowScaleAnimation);
 };
diff --git a/ash/keyboard/ui/keyboard_ui_controller.cc b/ash/keyboard/ui/keyboard_ui_controller.cc
index 7cff1ae..99a2b645 100644
--- a/ash/keyboard/ui/keyboard_ui_controller.cc
+++ b/ash/keyboard/ui/keyboard_ui_controller.cc
@@ -257,7 +257,7 @@
   container_behavior_.reset();
   animation_observer_.reset();
 
-  ime_observer_.RemoveAll();
+  ime_observation_.Reset();
   ui_->SetController(nullptr);
   ui_.reset();
 
@@ -789,7 +789,7 @@
 
 void KeyboardUIController::OnInputMethodDestroyed(
     const ui::InputMethod* input_method) {
-  ime_observer_.RemoveAll();
+  ime_observation_.Reset();
   OnTextInputStateChanged(nullptr);
 }
 
@@ -1124,12 +1124,12 @@
   if (!ime)
     return;
 
-  if (ime_observer_.IsObserving(ime))
+  if (ime_observation_.IsObservingSource(ime))
     return;
 
   // Only observes the current active IME.
-  ime_observer_.RemoveAll();
-  ime_observer_.Add(ime);
+  ime_observation_.Reset();
+  ime_observation_.Observe(ime);
 
   // Note: We used to call OnTextInputStateChanged(ime->GetTextInputClient())
   // here, but that can trigger HideKeyboardImplicitlyBySystem() from a call to
diff --git a/ash/keyboard/ui/keyboard_ui_controller.h b/ash/keyboard/ui/keyboard_ui_controller.h
index 87d482a..359d407 100644
--- a/ash/keyboard/ui/keyboard_ui_controller.h
+++ b/ash/keyboard/ui/keyboard_ui_controller.h
@@ -24,7 +24,7 @@
 #include "ash/public/cpp/keyboard/keyboard_types.h"
 #include "base/macros.h"
 #include "base/observer_list.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/time/time.h"
 #include "ui/aura/window_observer.h"
 #include "ui/base/ime/input_method.h"
@@ -418,7 +418,8 @@
   std::unique_ptr<KeyboardUI> ui_;
   std::unique_ptr<ui::VirtualKeyboardController> virtual_keyboard_controller_;
   KeyboardLayoutDelegate* layout_delegate_ = nullptr;
-  ScopedObserver<ui::InputMethod, ui::InputMethodObserver> ime_observer_{this};
+  base::ScopedObservation<ui::InputMethod, ui::InputMethodObserver>
+      ime_observation_{this};
 
   // Container window that the keyboard window is a child of.
   aura::Window* parent_container_ = nullptr;
diff --git a/ash/lock_screen_action/lock_screen_action_background_controller_impl.cc b/ash/lock_screen_action/lock_screen_action_background_controller_impl.cc
index 1b32f36c..bedaa82a 100644
--- a/ash/lock_screen_action/lock_screen_action_background_controller_impl.cc
+++ b/ash/lock_screen_action/lock_screen_action_background_controller_impl.cc
@@ -85,7 +85,8 @@
     views::Widget* widget) {
   if (widget != background_widget_)
     return;
-  widget_observer_.Remove(widget);
+  DCHECK(widget_observation_.IsObservingSource(widget));
+  widget_observation_.Reset();
 
   background_widget_ = nullptr;
   contents_view_ = nullptr;
@@ -107,7 +108,7 @@
   views::Widget* widget = new views::Widget();
   widget->Init(std::move(params));
   widget->SetVisibilityChangedAnimationsEnabled(false);
-  widget_observer_.Add(widget);
+  widget_observation_.Observe(widget);
 
   return widget;
 }
diff --git a/ash/lock_screen_action/lock_screen_action_background_controller_impl.h b/ash/lock_screen_action/lock_screen_action_background_controller_impl.h
index 1b2979d..caa6373c 100644
--- a/ash/lock_screen_action/lock_screen_action_background_controller_impl.h
+++ b/ash/lock_screen_action/lock_screen_action_background_controller_impl.h
@@ -9,7 +9,7 @@
 #include "ash/lock_screen_action/lock_screen_action_background_controller.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_observer.h"
 
@@ -62,7 +62,8 @@
   views::Widget* background_widget_ = nullptr;
   LockScreenActionBackgroundView* contents_view_ = nullptr;
 
-  ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_{this};
+  base::ScopedObservation<views::Widget, views::WidgetObserver>
+      widget_observation_{this};
 
   base::WeakPtrFactory<LockScreenActionBackgroundControllerImpl>
       weak_ptr_factory_{this};
diff --git a/ash/lock_screen_action/lock_screen_note_display_state_handler.cc b/ash/lock_screen_action/lock_screen_note_display_state_handler.cc
index 7196979..4349b139 100644
--- a/ash/lock_screen_action/lock_screen_note_display_state_handler.cc
+++ b/ash/lock_screen_action/lock_screen_note_display_state_handler.cc
@@ -30,8 +30,8 @@
 LockScreenNoteDisplayStateHandler::LockScreenNoteDisplayStateHandler(
     BacklightsForcedOffSetter* backlights_forced_off_setter)
     : backlights_forced_off_setter_(backlights_forced_off_setter),
-      backlights_forced_off_observer_(this) {
-  backlights_forced_off_observer_.Add(backlights_forced_off_setter_);
+      backlights_forced_off_observation_(this) {
+  backlights_forced_off_observation_.Observe(backlights_forced_off_setter_);
 }
 
 LockScreenNoteDisplayStateHandler::~LockScreenNoteDisplayStateHandler() =
diff --git a/ash/lock_screen_action/lock_screen_note_display_state_handler.h b/ash/lock_screen_action/lock_screen_note_display_state_handler.h
index b93ed7e..7dc6e33 100644
--- a/ash/lock_screen_action/lock_screen_note_display_state_handler.h
+++ b/ash/lock_screen_action/lock_screen_note_display_state_handler.h
@@ -11,7 +11,7 @@
 #include "ash/system/power/backlights_forced_off_setter.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/timer/timer.h"
 
 namespace ash {
@@ -81,8 +81,8 @@
   // Timer used to set up timeout for lock screen note launch.
   base::OneShotTimer launch_timer_;
 
-  ScopedObserver<BacklightsForcedOffSetter, ScreenBacklightObserver>
-      backlights_forced_off_observer_;
+  base::ScopedObservation<BacklightsForcedOffSetter, ScreenBacklightObserver>
+      backlights_forced_off_observation_;
 
   base::WeakPtrFactory<LockScreenNoteDisplayStateHandler> weak_ptr_factory_{
       this};
diff --git a/ash/lock_screen_action/lock_screen_note_display_state_handler_unittest.cc b/ash/lock_screen_action/lock_screen_note_display_state_handler_unittest.cc
index 9167844..b6b63cf 100644
--- a/ash/lock_screen_action/lock_screen_note_display_state_handler_unittest.cc
+++ b/ash/lock_screen_action/lock_screen_note_display_state_handler_unittest.cc
@@ -36,7 +36,7 @@
  public:
   TestPowerManagerObserver()
       : power_manager_(chromeos::FakePowerManagerClient::Get()) {
-    scoped_observer_.Add(power_manager_);
+    scoped_observation_.Observe(power_manager_);
     power_manager_->set_user_activity_callback(base::BindRepeating(
         &TestPowerManagerObserver::OnUserActivity, base::Unretained(this)));
   }
@@ -67,9 +67,9 @@
   chromeos::FakePowerManagerClient* power_manager_;
   std::vector<double> brightness_changes_;
 
-  ScopedObserver<chromeos::PowerManagerClient,
-                 chromeos::PowerManagerClient::Observer>
-      scoped_observer_{this};
+  base::ScopedObservation<chromeos::PowerManagerClient,
+                          chromeos::PowerManagerClient::Observer>
+      scoped_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(TestPowerManagerObserver);
 };
diff --git a/ash/lock_screen_action/lock_screen_note_launcher.cc b/ash/lock_screen_action/lock_screen_note_launcher.cc
index aee1d828..1468df7 100644
--- a/ash/lock_screen_action/lock_screen_note_launcher.cc
+++ b/ash/lock_screen_action/lock_screen_note_launcher.cc
@@ -27,7 +27,7 @@
     return false;
 
   callback_ = std::move(callback);
-  tray_action_observer_.Add(Shell::Get()->tray_action());
+  tray_action_observation_.Observe(Shell::Get()->tray_action());
 
   Shell::Get()->tray_action()->RequestNewLockScreenNote(action_origin);
   return true;
@@ -42,7 +42,7 @@
 }
 
 void LockScreenNoteLauncher::OnLaunchDone(bool success) {
-  tray_action_observer_.RemoveAll();
+  tray_action_observation_.Reset();
   if (!callback_.is_null())
     std::move(callback_).Run(success);
 }
diff --git a/ash/lock_screen_action/lock_screen_note_launcher.h b/ash/lock_screen_action/lock_screen_note_launcher.h
index 320de3eb..4e816858 100644
--- a/ash/lock_screen_action/lock_screen_note_launcher.h
+++ b/ash/lock_screen_action/lock_screen_note_launcher.h
@@ -10,7 +10,7 @@
 #include "ash/tray_action/tray_action_observer.h"
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace ash {
 
@@ -48,7 +48,8 @@
   // The callback provided to |Run|.
   LaunchCallback callback_;
 
-  ScopedObserver<TrayAction, TrayActionObserver> tray_action_observer_{this};
+  base::ScopedObservation<TrayAction, TrayActionObserver>
+      tray_action_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(LockScreenNoteLauncher);
 };
diff --git a/ash/login/ui/lock_contents_view.cc b/ash/login/ui/lock_contents_view.cc
index ae438a0..04dd5b2 100644
--- a/ash/login/ui/lock_contents_view.cc
+++ b/ash/login/ui/lock_contents_view.cc
@@ -395,7 +395,7 @@
     : public ui::UserActivityObserver {
  public:
   AutoLoginUserActivityHandler() {
-    observer_.Add(ui::UserActivityDetector::Get());
+    observation_.Observe(ui::UserActivityDetector::Get());
   }
 
   ~AutoLoginUserActivityHandler() override = default;
@@ -407,8 +407,8 @@
   }
 
  private:
-  ScopedObserver<ui::UserActivityDetector, ui::UserActivityObserver> observer_{
-      this};
+  base::ScopedObservation<ui::UserActivityDetector, ui::UserActivityObserver>
+      observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(AutoLoginUserActivityHandler);
 };
@@ -576,7 +576,7 @@
         std::make_unique<AutoLoginUserActivityHandler>();
 
   data_dispatcher_->AddObserver(this);
-  display_observer_.Add(display::Screen::GetScreen());
+  display_observation_.Observe(display::Screen::GetScreen());
   Shell::Get()->system_tray_notifier()->AddSystemTrayFocusObserver(this);
   keyboard::KeyboardUIController::Get()->AddObserver(this);
 
diff --git a/ash/login/ui/lock_contents_view.h b/ash/login/ui/lock_contents_view.h
index 9a6a5ce..741ae1ee 100644
--- a/ash/login/ui/lock_contents_view.h
+++ b/ash/login/ui/lock_contents_view.h
@@ -27,7 +27,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
 #include "ui/display/display_observer.h"
@@ -450,8 +450,8 @@
   // all actions are executed.
   std::vector<DisplayLayoutAction> layout_actions_;
 
-  ScopedObserver<display::Screen, display::DisplayObserver> display_observer_{
-      this};
+  base::ScopedObservation<display::Screen, display::DisplayObserver>
+      display_observation_{this};
 
   // All error bubbles and the tooltip view are child views of LockContentsView,
   // and will be torn down when LockContentsView is torn down.
diff --git a/ash/login/ui/lock_screen.cc b/ash/login/ui/lock_screen.cc
index 4446ca7..3723968 100644
--- a/ash/login/ui/lock_screen.cc
+++ b/ash/login/ui/lock_screen.cc
@@ -55,7 +55,7 @@
 }
 
 LockScreen::LockScreen(ScreenType type) : type_(type) {
-  tray_action_observer_.Add(Shell::Get()->tray_action());
+  tray_action_observation_.Observe(Shell::Get()->tray_action());
   saved_clipboard_ = ui::Clipboard::TakeForCurrentThread();
 }
 
diff --git a/ash/login/ui/lock_screen.h b/ash/login/ui/lock_screen.h
index 664305e..e393f43 100644
--- a/ash/login/ui/lock_screen.h
+++ b/ash/login/ui/lock_screen.h
@@ -14,7 +14,7 @@
 #include "ash/tray_action/tray_action_observer.h"
 #include "base/callback.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/base/clipboard/clipboard.h"
 
 namespace views {
@@ -101,7 +101,8 @@
 
   std::unique_ptr<ui::Clipboard> saved_clipboard_;
 
-  ScopedObserver<TrayAction, TrayActionObserver> tray_action_observer_{this};
+  base::ScopedObservation<TrayAction, TrayActionObserver>
+      tray_action_observation_{this};
   ScopedSessionObserver session_observer_{this};
 
   std::vector<base::OnceClosure> on_shown_callbacks_;
diff --git a/ash/login/ui/login_big_user_view.cc b/ash/login/ui/login_big_user_view.cc
index 962aa44..bc37837 100644
--- a/ash/login/ui/login_big_user_view.cc
+++ b/ash/login/ui/login_big_user_view.cc
@@ -47,7 +47,7 @@
   // Creates either |auth_user_| or |public_account_|.
   CreateChildView(user);
 
-  observer_.Add(Shell::Get()->wallpaper_controller());
+  observation_.Observe(Shell::Get()->wallpaper_controller());
   // Adding the observer will not run OnWallpaperBlurChanged; run it now to set
   // the initial state.
   OnWallpaperBlurChanged();
diff --git a/ash/login/ui/login_big_user_view.h b/ash/login/ui/login_big_user_view.h
index 232bb82b..08f46c5 100644
--- a/ash/login/ui/login_big_user_view.h
+++ b/ash/login/ui/login_big_user_view.h
@@ -82,8 +82,8 @@
   LoginAuthUserView::Callbacks auth_user_callbacks_;
   LoginPublicAccountUserView::Callbacks public_account_callbacks_;
 
-  ScopedObserver<WallpaperController, WallpaperControllerObserver> observer_{
-      this};
+  base::ScopedObservation<WallpaperController, WallpaperControllerObserver>
+      observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(LoginBigUserView);
 };
diff --git a/ash/login/ui/login_detachable_base_model.cc b/ash/login/ui/login_detachable_base_model.cc
index 7fdf0a8..31c6771 100644
--- a/ash/login/ui/login_detachable_base_model.cc
+++ b/ash/login/ui/login_detachable_base_model.cc
@@ -12,7 +12,7 @@
 #include "ash/public/cpp/session/user_info.h"
 #include "ash/shell.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace ash {
 
@@ -24,7 +24,7 @@
   explicit LoginDetachableBaseModelImpl(
       DetachableBaseHandler* detachable_base_handler)
       : detachable_base_handler_(detachable_base_handler) {
-    detachable_base_observer_.Add(detachable_base_handler);
+    detachable_base_observation_.Observe(detachable_base_handler);
   }
 
   ~LoginDetachableBaseModelImpl() override = default;
@@ -52,8 +52,8 @@
 
  private:
   DetachableBaseHandler* detachable_base_handler_;
-  ScopedObserver<DetachableBaseHandler, DetachableBaseObserver>
-      detachable_base_observer_{this};
+  base::ScopedObservation<DetachableBaseHandler, DetachableBaseObserver>
+      detachable_base_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(LoginDetachableBaseModelImpl);
 };
diff --git a/ash/login/ui/pin_request_view.cc b/ash/login/ui/pin_request_view.cc
index 6a7bdd5..463e5fd 100644
--- a/ash/login/ui/pin_request_view.cc
+++ b/ash/login/ui/pin_request_view.cc
@@ -385,7 +385,7 @@
 
   pin_keyboard_view_->SetVisible(PinKeyboardVisible());
 
-  tablet_mode_observer_.Add(Shell::Get()->tablet_mode_controller());
+  tablet_mode_observation_.Observe(Shell::Get()->tablet_mode_controller());
 
   SetPreferredSize(GetPinRequestViewSize());
 }
@@ -440,7 +440,7 @@
 }
 
 void PinRequestView::OnTabletControllerDestroyed() {
-  tablet_mode_observer_.RemoveAll();
+  tablet_mode_observation_.Reset();
 }
 
 void PinRequestView::SubmitCode() {
diff --git a/ash/login/ui/pin_request_view.h b/ash/login/ui/pin_request_view.h
index 63bad88..3e8a90e 100644
--- a/ash/login/ui/pin_request_view.h
+++ b/ash/login/ui/pin_request_view.h
@@ -12,7 +12,7 @@
 #include "ash/public/cpp/login_types.h"
 #include "ash/public/cpp/tablet_mode_observer.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/window/dialog_delegate.h"
 
 namespace views {
@@ -202,8 +202,8 @@
   FocusableLabelButton* help_button_ = nullptr;
   ArrowButtonView* submit_button_ = nullptr;
 
-  ScopedObserver<TabletModeController, TabletModeObserver>
-      tablet_mode_observer_{this};
+  base::ScopedObservation<TabletModeController, TabletModeObserver>
+      tablet_mode_observation_{this};
 
   base::WeakPtrFactory<PinRequestView> weak_ptr_factory_{this};
 
diff --git a/ash/login/ui/scrollable_users_list_view.cc b/ash/login/ui/scrollable_users_list_view.cc
index de4bf583..0fbbad4a 100644
--- a/ash/login/ui/scrollable_users_list_view.cc
+++ b/ash/login/ui/scrollable_users_list_view.cc
@@ -337,7 +337,7 @@
   SetVerticalScrollBar(std::make_unique<UsersListScrollBar>(false));
   SetHorizontalScrollBar(std::make_unique<UsersListScrollBar>(true));
 
-  observer_.Add(Shell::Get()->wallpaper_controller());
+  observation_.Observe(Shell::Get()->wallpaper_controller());
 }
 
 ScrollableUsersListView::~ScrollableUsersListView() = default;
diff --git a/ash/login/ui/scrollable_users_list_view.h b/ash/login/ui/scrollable_users_list_view.h
index 22b0ecd..9fdc22ed 100644
--- a/ash/login/ui/scrollable_users_list_view.h
+++ b/ash/login/ui/scrollable_users_list_view.h
@@ -12,7 +12,7 @@
 #include "ash/login/ui/login_user_view.h"
 #include "ash/public/cpp/wallpaper_controller.h"
 #include "ash/public/cpp/wallpaper_controller_observer.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/views/controls/scroll_view.h"
 
@@ -96,8 +96,8 @@
 
   GradientParams gradient_params_;
 
-  ScopedObserver<WallpaperController, WallpaperControllerObserver> observer_{
-      this};
+  base::ScopedObservation<WallpaperController, WallpaperControllerObserver>
+      observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ScrollableUsersListView);
 };
diff --git a/ash/metrics/demo_session_metrics_recorder.cc b/ash/metrics/demo_session_metrics_recorder.cc
index 7b4ccd0..f84a8ccc 100644
--- a/ash/metrics/demo_session_metrics_recorder.cc
+++ b/ash/metrics/demo_session_metrics_recorder.cc
@@ -14,7 +14,7 @@
 #include "ash/shell.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "extensions/common/constants.h"
@@ -228,19 +228,22 @@
       VLOG(1) << "Got null ARC package name";
     }
 
-    scoped_observer_.Remove(window);
+    scoped_observations_.RemoveObservation(window);
   }
 
   void OnWindowDestroyed(aura::Window* window) override {
-    if (scoped_observer_.IsObserving(window))
-      scoped_observer_.Remove(window);
+    if (scoped_observations_.IsObservingSource(window))
+      scoped_observations_.RemoveObservation(window);
   }
 
-  void ObserveWindow(aura::Window* window) { scoped_observer_.Add(window); }
+  void ObserveWindow(aura::Window* window) {
+    scoped_observations_.AddObservation(window);
+  }
 
  private:
   DemoSessionMetricsRecorder* metrics_recorder_;
-  ScopedObserver<aura::Window, aura::WindowObserver> scoped_observer_{this};
+  base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
+      scoped_observations_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ActiveAppArcPackageNameObserver);
 };
@@ -269,19 +272,24 @@
       VLOG(1) << "Got null ARC package name";
     }
 
-    scoped_observer_.Remove(window);
+    DCHECK(scoped_observation_.IsObservingSource(window));
+    scoped_observation_.Reset();
   }
 
   void OnWindowDestroyed(aura::Window* window) override {
-    if (scoped_observer_.IsObserving(window))
-      scoped_observer_.Remove(window);
+    if (scoped_observation_.IsObservingSource(window))
+      DCHECK(scoped_observation_.IsObservingSource(window));
+    scoped_observation_.Reset();
   }
 
-  void ObserveWindow(aura::Window* window) { scoped_observer_.Add(window); }
+  void ObserveWindow(aura::Window* window) {
+    scoped_observation_.Observe(window);
+  }
 
  private:
   DemoSessionMetricsRecorder* metrics_recorder_;
-  ScopedObserver<aura::Window, aura::WindowObserver> scoped_observer_{this};
+  base::ScopedObservation<aura::Window, aura::WindowObserver>
+      scoped_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(UniqueAppsLaunchedArcPackageNameObserver);
 };
@@ -298,7 +306,7 @@
     timer_ = std::make_unique<base::RepeatingTimer>();
 
   StartRecording();
-  observer_.Add(ui::UserActivityDetector::Get());
+  observation_.Observe(ui::UserActivityDetector::Get());
 
   // Subscribe to window activation updates.  Even though this gets us
   // notifications for all window activations, we ignore the ARC
diff --git a/ash/metrics/demo_session_metrics_recorder.h b/ash/metrics/demo_session_metrics_recorder.h
index f5c6b957..8cdd247 100644
--- a/ash/metrics/demo_session_metrics_recorder.h
+++ b/ash/metrics/demo_session_metrics_recorder.h
@@ -13,7 +13,7 @@
 #include "ash/public/cpp/app_types.h"
 #include "base/containers/flat_set.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/aura/window_observer.h"
 #include "ui/base/user_activity/user_activity_detector.h"
 #include "ui/base/user_activity/user_activity_observer.h"
@@ -139,8 +139,8 @@
 
   std::unique_ptr<base::RepeatingTimer> timer_;
 
-  ScopedObserver<ui::UserActivityDetector, ui::UserActivityObserver> observer_{
-      this};
+  base::ScopedObservation<ui::UserActivityDetector, ui::UserActivityObserver>
+      observation_{this};
 
   class ActiveAppArcPackageNameObserver;
   class UniqueAppsLaunchedArcPackageNameObserver;
diff --git a/ash/public/cpp/external_arc/toast/arc_toast_surface_manager.cc b/ash/public/cpp/external_arc/toast/arc_toast_surface_manager.cc
index 538b12b..dc0403e 100644
--- a/ash/public/cpp/external_arc/toast/arc_toast_surface_manager.cc
+++ b/ash/public/cpp/external_arc/toast/arc_toast_surface_manager.cc
@@ -10,7 +10,7 @@
 
 ArcToastSurfaceManager::ArcToastSurfaceManager()
     : locked_(ash::SessionController::Get()->IsScreenLocked()) {
-  scoped_observer_.Add(ash::SessionController::Get());
+  scoped_observation_.Observe(ash::SessionController::Get());
 }
 
 ArcToastSurfaceManager::~ArcToastSurfaceManager() = default;
diff --git a/ash/public/cpp/external_arc/toast/arc_toast_surface_manager.h b/ash/public/cpp/external_arc/toast/arc_toast_surface_manager.h
index dab6944..d16cd7c 100644
--- a/ash/public/cpp/external_arc/toast/arc_toast_surface_manager.h
+++ b/ash/public/cpp/external_arc/toast/arc_toast_surface_manager.h
@@ -11,7 +11,7 @@
 #include "ash/public/cpp/session/session_controller.h"
 #include "ash/public/cpp/session/session_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "components/exo/toast_surface_manager.h"
 
 namespace ash {
@@ -43,7 +43,8 @@
 
   bool locked_;
 
-  ScopedObserver<SessionController, SessionObserver> scoped_observer_{this};
+  base::ScopedObservation<SessionController, SessionObserver>
+      scoped_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/shelf/drag_handle.cc b/ash/shelf/drag_handle.cc
index 3ee8d33..3c2d7d5 100644
--- a/ash/shelf/drag_handle.cc
+++ b/ash/shelf/drag_handle.cc
@@ -95,7 +95,7 @@
   SetSize(ShelfConfig::Get()->DragHandleSize());
   SetEventTargeter(std::make_unique<views::ViewTargeter>(this));
   SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
-  shell_observer_.Add(Shell::Get());
+  shell_observation_.Observe(Shell::Get());
 
   Shell::Get()->accessibility_controller()->AddObserver(this);
   shelf_->AddObserver(this);
@@ -122,7 +122,7 @@
 bool DragHandle::MaybeShowDragHandleNudge() {
   // Stop observing overview state if nudge show timer has fired.
   if (!show_drag_handle_nudge_timer_.IsRunning())
-    overview_observer_.RemoveAll();
+    overview_observation_.Reset();
 
   if (!features::AreContextualNudgesEnabled())
     return false;
@@ -152,7 +152,7 @@
   AnimateDragHandleShow();
   ShowDragHandleTooltip();
   gesture_nudge_target_visibility_ = true;
-  split_view_observer_.Add(
+  split_view_observation_.Observe(
       SplitViewController::Get(shelf_->shelf_widget()->GetNativeWindow()));
 
   if (!nudge_duration.is_zero()) {
@@ -175,7 +175,7 @@
 
   // Observe overview controller to detect overview session start - this should
   // cancel the scheduled nudge show.
-  overview_observer_.Add(Shell::Get()->overview_controller());
+  overview_observation_.Observe(Shell::Get()->overview_controller());
 
   show_drag_handle_nudge_timer_.Start(
       FROM_HERE, kShowNudgeDelay,
@@ -189,7 +189,7 @@
   if (!gesture_nudge_target_visibility())
     return;
 
-  split_view_observer_.RemoveAll();
+  split_view_observation_.Reset();
   hide_drag_handle_nudge_timer_.Stop();
 
   if (reason == contextual_tooltip::DismissNudgeReason::kPerformedGesture) {
@@ -303,7 +303,7 @@
 }
 
 void DragHandle::OnShellDestroying() {
-  shell_observer_.RemoveAll();
+  shell_observation_.Reset();
   // Removes the overview controller observer.
   StopDragHandleNudgeShowTimer();
   hide_drag_handle_nudge_timer_.Stop();
@@ -475,7 +475,7 @@
 
 void DragHandle::StopDragHandleNudgeShowTimer() {
   show_drag_handle_nudge_timer_.Stop();
-  overview_observer_.RemoveAll();
+  overview_observation_.Reset();
 }
 
 }  // namespace ash
diff --git a/ash/shelf/drag_handle.h b/ash/shelf/drag_handle.h
index bd1c381a..210c9bd9 100644
--- a/ash/shelf/drag_handle.h
+++ b/ash/shelf/drag_handle.h
@@ -16,7 +16,7 @@
 #include "ash/wm/splitview/split_view_controller.h"
 #include "ash/wm/splitview/split_view_observer.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/timer/timer.h"
 #include "ui/compositor/layer_animator.h"
 #include "ui/views/controls/button/button.h"
@@ -178,16 +178,17 @@
 
   base::ScopedClosureRunner force_show_hotseat_resetter_;
 
-  ScopedObserver<SplitViewController, SplitViewObserver> split_view_observer_{
-      this};
+  base::ScopedObservation<SplitViewController, SplitViewObserver>
+      split_view_observation_{this};
 
-  ScopedObserver<OverviewController, OverviewObserver> overview_observer_{this};
+  base::ScopedObservation<OverviewController, OverviewObserver>
+      overview_observation_{this};
 
-  ScopedObserver<Shell,
-                 ShellObserver,
-                 &Shell::AddShellObserver,
-                 &Shell::RemoveShellObserver>
-      shell_observer_{this};
+  base::ScopedObservation<Shell,
+                          ShellObserver,
+                          &Shell::AddShellObserver,
+                          &Shell::RemoveShellObserver>
+      shell_observation_{this};
 
   base::WeakPtrFactory<DragHandle> weak_factory_{this};
 };
diff --git a/ash/shelf/home_to_overview_nudge_controller.cc b/ash/shelf/home_to_overview_nudge_controller.cc
index 0c35fea..b95fa4d2 100644
--- a/ash/shelf/home_to_overview_nudge_controller.cc
+++ b/ash/shelf/home_to_overview_nudge_controller.cc
@@ -187,7 +187,7 @@
 
 void HomeToOverviewNudgeController::OnWidgetDestroying(views::Widget* widget) {
   nudge_ = nullptr;
-  widget_observer_.RemoveAll();
+  widget_observations_.RemoveAllObservations();
 }
 
 void HomeToOverviewNudgeController::OnWidgetBoundsChanged(
@@ -233,8 +233,8 @@
 
   UpdateNudgeAnchorBounds();
 
-  widget_observer_.Add(nudge_->GetWidget());
-  widget_observer_.Add(hotseat_widget_);
+  widget_observations_.AddObservation(nudge_->GetWidget());
+  widget_observations_.AddObservation(hotseat_widget_);
 
   nudge_->GetWidget()->Show();
   nudge_->GetWidget()->GetLayer()->SetTransform(gfx::Transform());
@@ -355,7 +355,7 @@
     nudge_->label()->layer()->SetOpacity(0.0f);
   }
 
-  widget_observer_.RemoveAll();
+  widget_observations_.RemoveAllObservations();
   nudge_ = nullptr;
 
   // Invalidated nudge tap handler callbacks.
diff --git a/ash/shelf/home_to_overview_nudge_controller.h b/ash/shelf/home_to_overview_nudge_controller.h
index a7e7b75..498b5ff 100644
--- a/ash/shelf/home_to_overview_nudge_controller.h
+++ b/ash/shelf/home_to_overview_nudge_controller.h
@@ -9,7 +9,7 @@
 
 #include "ash/ash_export.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "base/timer/timer.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_observer.h"
@@ -76,7 +76,8 @@
 
   // Observes hotseat widget to detect the hotseat bounds changes, and the
   // nudge widget to detect that the widget is being destroyed.
-  ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_{this};
+  base::ScopedMultiSourceObservation<views::Widget, views::WidgetObserver>
+      widget_observations_{this};
 
   base::WeakPtrFactory<HomeToOverviewNudgeController> weak_factory_{this};
 };
diff --git a/ash/shelf/login_shelf_view.cc b/ash/shelf/login_shelf_view.cc
index 9c2bd910..6d65c2e 100644
--- a/ash/shelf/login_shelf_view.cc
+++ b/ash/shelf/login_shelf_view.cc
@@ -563,11 +563,12 @@
                  ash::LoginAcceleratorAction::kStartEnrollment),
              IDS_ASH_ENTERPRISE_ENROLLMENT_BUTTON, chromeos::kEnterpriseIcon);
 
-  // Adds observers for states that affect the visiblity of different buttons.
-  tray_action_observer_.Add(Shell::Get()->tray_action());
-  shutdown_controller_observer_.Add(Shell::Get()->shutdown_controller());
-  lock_screen_action_background_observer_.Add(lock_screen_action_background);
-  login_data_dispatcher_observer_.Add(
+  // Adds observers for states that affect the visibility of different buttons.
+  tray_action_observation_.Observe(Shell::Get()->tray_action());
+  shutdown_controller_observation_.Observe(Shell::Get()->shutdown_controller());
+  lock_screen_action_background_observation_.Observe(
+      lock_screen_action_background);
+  login_data_dispatcher_observation_.Observe(
       Shell::Get()->login_screen_controller()->data_dispatcher());
   UpdateUi();
 }
diff --git a/ash/shelf/login_shelf_view.h b/ash/shelf/login_shelf_view.h
index 3cfb31e..b168906 100644
--- a/ash/shelf/login_shelf_view.h
+++ b/ash/shelf/login_shelf_view.h
@@ -20,7 +20,7 @@
 #include "ash/tray_action/tray_action.h"
 #include "ash/tray_action/tray_action_observer.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/view.h"
 
@@ -186,17 +186,19 @@
 
   LockScreenActionBackgroundController* lock_screen_action_background_;
 
-  ScopedObserver<TrayAction, TrayActionObserver> tray_action_observer_{this};
+  base::ScopedObservation<TrayAction, TrayActionObserver>
+      tray_action_observation_{this};
 
-  ScopedObserver<LockScreenActionBackgroundController,
-                 LockScreenActionBackgroundObserver>
-      lock_screen_action_background_observer_{this};
+  base::ScopedObservation<LockScreenActionBackgroundController,
+                          LockScreenActionBackgroundObserver>
+      lock_screen_action_background_observation_{this};
 
-  ScopedObserver<ShutdownControllerImpl, ShutdownControllerImpl::Observer>
-      shutdown_controller_observer_{this};
+  base::ScopedObservation<ShutdownControllerImpl,
+                          ShutdownControllerImpl::Observer>
+      shutdown_controller_observation_{this};
 
-  ScopedObserver<LoginDataDispatcher, LoginDataDispatcher::Observer>
-      login_data_dispatcher_observer_{this};
+  base::ScopedObservation<LoginDataDispatcher, LoginDataDispatcher::Observer>
+      login_data_dispatcher_observation_{this};
 
   // The kiosk app button will only be created for the primary display's login
   // shelf.
diff --git a/ash/shelf/shelf.cc b/ash/shelf/shelf.cc
index 9460ef56..1963d51 100644
--- a/ash/shelf/shelf.cc
+++ b/ash/shelf/shelf.cc
@@ -248,7 +248,7 @@
  public:
   explicit AutoDimEventHandler(Shelf* shelf) : shelf_(shelf) {
     Shell::Get()->AddPreTargetHandler(this);
-    shelf_observer_.Add(shelf_);
+    shelf_observation_.Observe(shelf_);
     UndimShelf();
   }
 
@@ -312,7 +312,7 @@
   base::OneShotTimer dim_shelf_timer_;
   // An observer that notifies the AutoDimHandler that shelf visibility has
   // changed.
-  ScopedObserver<Shelf, ShelfObserver> shelf_observer_{this};
+  base::ScopedObservation<Shelf, ShelfObserver> shelf_observation_{this};
 
   // Delay before dimming the shelf.
   const base::TimeDelta kDimDelay = base::TimeDelta::FromSeconds(5);
diff --git a/ash/shelf/shelf_config.cc b/ash/shelf/shelf_config.cc
index 4708ea43..4fe94d9 100644
--- a/ash/shelf/shelf_config.cc
+++ b/ash/shelf/shelf_config.cc
@@ -16,7 +16,7 @@
 #include "ash/wm/overview/overview_controller.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/gfx/color_analysis.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/color_utils.h"
@@ -77,7 +77,7 @@
       const base::RepeatingClosure& accessibility_state_changed_callback)
       : accessibility_state_changed_callback_(
             accessibility_state_changed_callback) {
-    observer_.Add(Shell::Get()->accessibility_controller());
+    observation_.Observe(Shell::Get()->accessibility_controller());
   }
 
   ShelfAccessibilityObserver(const ShelfAccessibilityObserver& other) = delete;
@@ -90,13 +90,13 @@
   void OnAccessibilityStatusChanged() override {
     accessibility_state_changed_callback_.Run();
   }
-  void OnAccessibilityControllerShutdown() override { observer_.RemoveAll(); }
+  void OnAccessibilityControllerShutdown() override { observation_.Reset(); }
 
  private:
   base::RepeatingClosure accessibility_state_changed_callback_;
 
-  ScopedObserver<AccessibilityControllerImpl, AccessibilityObserver> observer_{
-      this};
+  base::ScopedObservation<AccessibilityControllerImpl, AccessibilityObserver>
+      observation_{this};
 };
 
 ShelfConfig::ShelfConfig()
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index b22c5b4..79afaa56 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -392,7 +392,7 @@
   shell->locale_update_controller()->AddObserver(this);
   state_.session_state = shell->session_controller()->GetSessionState();
   shelf_background_type_ = GetShelfBackgroundType();
-  wallpaper_controller_observer_.Add(shell->wallpaper_controller());
+  wallpaper_controller_observation_.Observe(shell->wallpaper_controller());
   display::Screen::GetScreen()->AddObserver(this);
   message_center::MessageCenter::Get()->AddObserver(this);
 
diff --git a/ash/shelf/shelf_layout_manager.h b/ash/shelf/shelf_layout_manager.h
index 350d569..e4b62f78 100644
--- a/ash/shelf/shelf_layout_manager.h
+++ b/ash/shelf/shelf_layout_manager.h
@@ -30,7 +30,7 @@
 #include "base/macros.h"
 #include "base/observer_list.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/timer/timer.h"
 #include "ui/compositor/layer_animation_observer.h"
@@ -613,8 +613,8 @@
       ShelfBackgroundType::kDefaultBg;
 
   ScopedSessionObserver scoped_session_observer_{this};
-  ScopedObserver<WallpaperController, WallpaperControllerObserver>
-      wallpaper_controller_observer_{this};
+  base::ScopedObservation<WallpaperController, WallpaperControllerObserver>
+      wallpaper_controller_observation_{this};
 
   // Location of the most recent mouse drag event in screen coordinate.
   gfx::Point last_mouse_drag_position_;
diff --git a/ash/shelf/shelf_window_watcher.cc b/ash/shelf/shelf_window_watcher.cc
index 7ee5ae56..b8b9a27 100644
--- a/ash/shelf/shelf_window_watcher.cc
+++ b/ash/shelf/shelf_window_watcher.cc
@@ -116,7 +116,7 @@
     aura::Window* window,
     bool visible) {
   // This is also called for descendants; check that the window is observed.
-  if (window_watcher_->observed_user_windows_.IsObserving(window))
+  if (window_watcher_->observed_user_windows_.IsObservingSource(window))
     window_watcher_->OnUserWindowPropertyChanged(window);
 }
 
@@ -164,23 +164,23 @@
 }
 
 void ShelfWindowWatcher::OnContainerWindowDestroying(aura::Window* container) {
-  observed_container_windows_.Remove(container);
+  observed_container_windows_.RemoveObservation(container);
 }
 
 void ShelfWindowWatcher::OnUserWindowAdded(aura::Window* window) {
   // The window may already be tracked from a prior display or parent container.
-  if (observed_user_windows_.IsObserving(window))
+  if (observed_user_windows_.IsObservingSource(window))
     return;
 
-  observed_user_windows_.Add(window);
+  observed_user_windows_.AddObservation(window);
 
   // Add, update, or remove a ShelfItem for |window|, as needed.
   OnUserWindowPropertyChanged(window);
 }
 
 void ShelfWindowWatcher::OnUserWindowDestroying(aura::Window* window) {
-  if (observed_user_windows_.IsObserving(window))
-    observed_user_windows_.Remove(window);
+  if (observed_user_windows_.IsObservingSource(window))
+    observed_user_windows_.RemoveObservation(window);
 
   if (user_windows_with_items_.count(window) > 0)
     RemoveShelfItem(window);
@@ -228,7 +228,7 @@
   for (aura::Window* container : desks_util::GetDesksContainers(root_window)) {
     for (aura::Window* window : container->children())
       OnUserWindowAdded(window);
-    observed_container_windows_.Add(container);
+    observed_container_windows_.AddObservation(container);
   }
 }
 
diff --git a/ash/shelf/shelf_window_watcher.h b/ash/shelf/shelf_window_watcher.h
index ac9e8a3..e208ad1 100644
--- a/ash/shelf/shelf_window_watcher.h
+++ b/ash/shelf/shelf_window_watcher.h
@@ -9,7 +9,7 @@
 
 #include "ash/shell_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_observer.h"
 #include "ui/wm/public/activation_change_observer.h"
@@ -97,9 +97,10 @@
   ContainerWindowObserver container_window_observer_{this};
   UserWindowObserver user_window_observer_{this};
 
-  ScopedObserver<aura::Window, aura::WindowObserver>
+  base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
       observed_container_windows_;
-  ScopedObserver<aura::Window, aura::WindowObserver> observed_user_windows_;
+  base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
+      observed_user_windows_;
 
   // The set of windows with shelf items managed by this ShelfWindowWatcher.
   std::set<aura::Window*> user_windows_with_items_;
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sk.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sk.xtb
index 7533c5a..d61d3e1 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sk.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sk.xtb
@@ -49,7 +49,7 @@
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">Posunutie nadol na webovej stránke</translation>
 <translation id="2530896289327917474">Vypnutie alebo zapnutie prehliadania Caret</translation>
-<translation id="2574014812750545982">Obnovenie úrovne priblíženia/oddialenia na stránke</translation>
+<translation id="2574014812750545982">Resetovať na stránke úroveň lupy</translation>
 <translation id="2596078834055697711">Vytvorenie snímky obrazovky okna</translation>
 <translation id="2685170433750953446"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, potom <ph name="TAB" /> alebo <ph name="RIGHT" /></translation>
 <translation id="2750942583782703988">Obnovenie aktuálnej stránky</translation>
@@ -88,7 +88,7 @@
 <translation id="3837047332182291558">Zvýšenie jasu klávesnice (iba v prípade podsvietených klávesníc)</translation>
 <translation id="3949671998904569433">čiarka</translation>
 <translation id="3976863468609830880">Kliknutie na poslednú ikonu na poličke</translation>
-<translation id="3994783594793697310">Obnovenie úrovne priblíženia/oddialenia zobrazenia</translation>
+<translation id="3994783594793697310">Resetovať na obrazovke úroveň lupy</translation>
 <translation id="4026843240379844265">Presun aktívneho okna medzi obrazovkami</translation>
 <translation id="4035482366624727273">Výber celého obsahu stránky</translation>
 <translation id="4060703249685950734">Opätovné otvorenie poslednej zatvorenej karty alebo okna</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 21b6db7..9891e48f 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -729,7 +729,7 @@
 <translation id="742594950370306541">الكاميرا قيد الاستخدام.</translation>
 <translation id="742608627846767349">صباح الخير،</translation>
 <translation id="743058460480092004">الكاميرا والميكروفون قيد الاستخدام.</translation>
-<translation id="7434543979546293336">تم إبرازها كفكرة رئيسية</translation>
+<translation id="7434543979546293336">تم إبراز هذا الجزء كفكرة رئيسية</translation>
 <translation id="7452560014878697800">أحد التطبيقات يستخدم الكاميرا.</translation>
 <translation id="7456049842111127849">وضع تصوير الشاشة، الإعداد التلقائي هو <ph name="SOURCE" /> <ph name="TYPE" />.</translation>
 <translation id="7461924472993315131">تثبيت</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 864d873..4b60354 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -668,6 +668,7 @@
 <translation id="6818242057446442178">শব্দ অনুযায়ী পেছনে যান</translation>
 <translation id="6820676911989879663">বিরতি নিন!</translation>
 <translation id="6850010208275816200">আপনার বর্তমান অ্যাপ ফুল স্ক্রিনে দেখছেন। অ্যাপটি পাসওয়ার্ড চাইলে, আগে ফুল স্ক্রিন থেকে বেরিয়ে আসুন।</translation>
+<translation id="6852052252232534364">চালু করতে ক্লিক করুন</translation>
 <translation id="6857725247182211756"><ph name="SECONDS" /> সে</translation>
 <translation id="6857811139397017780">সক্রিয় করুন <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{আরও ১টি সংখ্যা লিখতে হবে}one{আরও #টি সংখ্যা লিখতে হবে}other{আরও #টি সংখ্যা লিখতে হবে}}</translation>
@@ -728,6 +729,7 @@
 <translation id="742594950370306541">ক্যামেরা ব্যবহার করা হচ্ছে।</translation>
 <translation id="742608627846767349">সুপ্রভাত,</translation>
 <translation id="743058460480092004">ক্যামেরা এবং মাইক্রোফোন ব্যবহার করা হচ্ছে।</translation>
+<translation id="7434543979546293336">এটিকে প্রধান বিচার্য বিষয় হিসেবে চিহ্নিত করা হয়েছে</translation>
 <translation id="7452560014878697800">কোনও অ্যাপ্লিকেশন আপনার ক্যামেরা ব্যবহার করছে</translation>
 <translation id="7456049842111127849">ক্যাপচার মোড, এই <ph name="SOURCE" /> <ph name="TYPE" /> ডিফল্ট হিসেবে সেট করা হয়েছে।</translation>
 <translation id="7461924472993315131">পিন</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index f58d548..37edfff 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -51,7 +51,7 @@
 <translation id="1302880136325416935">Bluetooth-Einstellungen anzeigen. <ph name="STATE_TEXT" /></translation>
 <translation id="1312604459020188865">Signalstärke bei <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="1316069254387866896">Ablage immer einblenden</translation>
-<translation id="1316811122439383437">Tote: Neuste Bildschirmaufnahmen, Downloads und angepinnte Dateien</translation>
+<translation id="1316811122439383437">Schnellzugriff: Neuste Bildschirmaufnahmen, Downloads und angepinnte Dateien</translation>
 <translation id="1333308631814936910"><ph name="DISPLAY_NAME" /> verbunden</translation>
 <translation id="1341651618736211726">Überlauf</translation>
 <translation id="1346748346194534595">Rechts</translation>
@@ -786,7 +786,7 @@
 <translation id="7886169021410746335">Datenschutzeinstellungen anpassen</translation>
 <translation id="7886277072580235377">Ihre Internetsitzung wird gelöscht, sobald Sie sich abmelden. <ph name="LEARN_MORE" /></translation>
 <translation id="788781083998633524">E-Mails senden</translation>
-<translation id="7895348134893321514">Tote</translation>
+<translation id="7895348134893321514">Schnellzugriff</translation>
 <translation id="7897375687985782769">Sie haben die Tastenkombination zum Drehen des Bildschirms gedrückt. Möchten Sie den Bildschirm drehen?</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7902625623987030061">Fingerabdrucksensor berühren</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index f59775cb..8b9c17f 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -668,6 +668,7 @@
 <translation id="6818242057446442178">Déplacer un mot vers l'arrière</translation>
 <translation id="6820676911989879663">Prenez une pause!</translation>
 <translation id="6850010208275816200">L'application actuelle s'affiche en plein écran. Si l'application vous demande votre mot de passe, quittez d'abord le mode plein écran.</translation>
+<translation id="6852052252232534364">Cliquer pour activer</translation>
 <translation id="6857725247182211756"><ph name="SECONDS" /> s</translation>
 <translation id="6857811139397017780">Activer <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Il reste 1 chiffre}one{Il reste # chiffre}other{Il reste # chiffres}}</translation>
@@ -728,6 +729,7 @@
 <translation id="742594950370306541">La caméra est en cours d'utilisation.</translation>
 <translation id="742608627846767349">Bonjour,</translation>
 <translation id="743058460480092004">La caméra et le microphone sont actuellement utilisés.</translation>
+<translation id="7434543979546293336">Indiquée comme idée clé</translation>
 <translation id="7452560014878697800">Une application utilise votre caméra</translation>
 <translation id="7456049842111127849">Mode de capture, la valeur par défaut est <ph name="TYPE" /> <ph name="SOURCE" />.</translation>
 <translation id="7461924472993315131">NIP</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 38e486a..a3faec8 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -639,6 +639,7 @@
 <translation id="6818242057446442178">एक शब्द मागे जा</translation>
 <translation id="6820676911989879663">ब्रेक घ्या!</translation>
 <translation id="6850010208275816200">तुमचे सध्याचे अ‍ॅप फुल स्क्रीन मोडमध्ये आहे. अ‍ॅपने तुमच्या पासवर्डची विनंती केल्यास, प्रथम फुल स्क्रीनमधून बाहेर पडा.</translation>
+<translation id="6852052252232534364">अ‍ॅक्टिव्हेट करण्यासाठी क्लिक करा</translation>
 <translation id="6857725247182211756"><ph name="SECONDS" /> सेकंद</translation>
 <translation id="6857811139397017780">सक्रिय करा<ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{एक अंक शिल्लक आहे}other{# अंक शिल्लक आहेत}}</translation>
@@ -698,6 +699,7 @@
 <translation id="742594950370306541">कॅमेरा वापरात आहे.</translation>
 <translation id="742608627846767349">सुप्रभात,</translation>
 <translation id="743058460480092004">कॅमेरा आणि मायक्रोफोन वापरात आहेत.</translation>
+<translation id="7434543979546293336">मुख्य कल्पना म्हणून मार्क केले</translation>
 <translation id="7461924472993315131">पिन</translation>
 <translation id="7466449121337984263">कृपया सेन्सरला स्पर्श करा</translation>
 <translation id="7477793887173910789">व्हिडिओ पाहा आणि बरेच काही नियंत्रित करा</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index efaa03d..f955fbf4 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -668,7 +668,7 @@
 <translation id="6818242057446442178">Dozadu o slovo</translation>
 <translation id="6820676911989879663">Urobte si prestávku.</translation>
 <translation id="6850010208275816200">Aktuálna aplikácia je spustená v režime celej obrazovky. Ak vás požiada o heslo, najprv ukončite režim celej obrazovky.</translation>
-<translation id="6852052252232534364">Klik. aktivuj.</translation>
+<translation id="6852052252232534364">Aktivovať kliknutím</translation>
 <translation id="6857725247182211756"><ph name="SECONDS" /> s</translation>
 <translation id="6857811139397017780">Aktivovať zariadenie <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Zostáva jedna číslica}few{Zostávajú # číslice}many{# digits remaining}other{Zostáva # číslic}}</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 7e16516..df96ca2f9 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -668,7 +668,7 @@
 <translation id="6818242057446442178">சொல் வாரியாகப் பின்செல்</translation>
 <translation id="6820676911989879663">சிறிது நேரம் இடைவேளை எடுத்துக்கொள்ளவும்!</translation>
 <translation id="6850010208275816200">தற்போதைய ஆப்ஸ் முழுத்திரையில் உள்ளது. கடவுச்சொல்லை உள்ளிடுமாறு ஆப்ஸில் கேட்கப்பட்டால் முதலில் முழுத்திரையிலிருந்து வெளியேறவும்.</translation>
-<translation id="6852052252232534364">கிளிக் செய்க</translation>
+<translation id="6852052252232534364">இயக்க கிளிக் செய்யவும்</translation>
 <translation id="6857725247182211756"><ph name="SECONDS" /> வி</translation>
 <translation id="6857811139397017780"><ph name="NETWORKSERVICE" /> ஐ செயல்படுத்து</translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{இன்னும் ஓர் இலக்கத்தை உள்ளிட வேண்டும்}other{இன்னும் # இலக்கங்களை உள்ளிட வேண்டும்}}</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index 042b96c..5bdb33e 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -668,6 +668,7 @@
 <translation id="6818242057446442178">ถอยกลับทีละคำ</translation>
 <translation id="6820676911989879663">พักสายตาหน่อย</translation>
 <translation id="6850010208275816200">แอปที่เปิดอยู่แสดงเต็มหน้าจอ หากแอปขอให้ป้อนรหัสผ่าน ขอแนะนำให้ออกจากโหมดเต็มหน้าจอก่อน</translation>
+<translation id="6852052252232534364">คลิกเพื่อเปิดใช้</translation>
 <translation id="6857725247182211756"><ph name="SECONDS" /> วินาที</translation>
 <translation id="6857811139397017780">เปิดใช้งาน <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{เหลือตัวเลขอีก 1 หลัก}other{เหลือตัวเลขอีก # หลัก}}</translation>
@@ -728,6 +729,7 @@
 <translation id="742594950370306541">ใช้กล้องถ่ายรูปอยู่</translation>
 <translation id="742608627846767349">สวัสดียามเช้า</translation>
 <translation id="743058460480092004">ใช้กล้องถ่ายรูปและไมโครโฟนอยู่</translation>
+<translation id="7434543979546293336">ทำเครื่องหมายเป็นแนวคิดหลักแล้ว</translation>
 <translation id="7452560014878697800">มีแอปพลิเคชันกำลังใช้กล้อง</translation>
 <translation id="7456049842111127849">โหมดจับภาพ ค่าเริ่มต้นคือ<ph name="TYPE" /><ph name="SOURCE" /></translation>
 <translation id="7461924472993315131">ตรึง</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb
index 5d26ec06..4489519 100644
--- a/ash/strings/ash_strings_uz.xtb
+++ b/ash/strings/ash_strings_uz.xtb
@@ -347,6 +347,7 @@
 <translation id="3901991538546252627"><ph name="NAME" /> tarmog‘iga ulanilmoqda</translation>
 <translation id="3943857333388298514">Joylash</translation>
 <translation id="394485226368336402">Audio sozlamalari</translation>
+<translation id="3945319193631853098">Sozlashni yakunlash uchun bosing</translation>
 <translation id="3945867833895287237">Hotspotga ulanmoqda...</translation>
 <translation id="3962859241508114581">Avvalgi trek</translation>
 <translation id="3969043077941541451">Yoqilmagan</translation>
@@ -724,6 +725,7 @@
 <translation id="7392563512730092880">Buni istalgan vaqtda Sozlamalar orqali sozlash mumkin.</translation>
 <translation id="7398254312354928459">Boshqa tarmoqqa ulanildi</translation>
 <translation id="7405710164030118432">Bu qurilma qulfini ochish uchun Family Link ota-ona kodini kiriting</translation>
+<translation id="7406608787870898861">Mobil tarmoqni sozlashni yakunlash</translation>
 <translation id="741244894080940828">konversiya</translation>
 <translation id="7413851974711031813">Yopish uchun Escape tugmasini bosing</translation>
 <translation id="742594950370306541">Kamera ish faoliyatida.</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index fd06118..523dd653 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -668,6 +668,7 @@
 <translation id="6818242057446442178">后退一个字词</translation>
 <translation id="6820676911989879663">休息一下!</translation>
 <translation id="6850010208275816200">您当前所用的应用处于全屏模式。如果该应用要求您提供密码,请先退出全屏模式。</translation>
+<translation id="6852052252232534364">点击即可启用</translation>
 <translation id="6857725247182211756"><ph name="SECONDS" /> 秒</translation>
 <translation id="6857811139397017780">激活 <ph name="NETWORKSERVICE" /></translation>
 <translation id="685782768769951078">{NUM_DIGITS,plural, =1{还差 1 位数字}other{还差 # 位数字}}</translation>
@@ -728,6 +729,7 @@
 <translation id="742594950370306541">摄像头处于使用状态。</translation>
 <translation id="742608627846767349">上午好!</translation>
 <translation id="743058460480092004">摄像头和麦克风处于使用状态。</translation>
+<translation id="7434543979546293336">已标记为核心观点</translation>
 <translation id="7452560014878697800">有一个应用正在使用您的摄像头</translation>
 <translation id="7456049842111127849">截屏/录屏模式,默认为<ph name="SOURCE" /><ph name="TYPE" />。</translation>
 <translation id="7461924472993315131">固定</translation>
diff --git a/ash/system/gesture_education/gesture_education_notification_controller.cc b/ash/system/gesture_education/gesture_education_notification_controller.cc
index ce559c9..8a17577 100644
--- a/ash/system/gesture_education/gesture_education_notification_controller.cc
+++ b/ash/system/gesture_education/gesture_education_notification_controller.cc
@@ -29,13 +29,13 @@
 GestureEducationNotificationController::
     GestureEducationNotificationController() {
   Shell::Get()->session_controller()->AddObserver(this);
-  tablet_mode_observer_.Add(Shell::Get()->tablet_mode_controller());
+  tablet_mode_observation_.Observe(Shell::Get()->tablet_mode_controller());
 }
 
 GestureEducationNotificationController::
     ~GestureEducationNotificationController() {
   Shell::Get()->session_controller()->RemoveObserver(this);
-  tablet_mode_observer_.RemoveAll();
+  tablet_mode_observation_.Reset();
 }
 
 void GestureEducationNotificationController::MaybeShowNotification() {
@@ -68,7 +68,7 @@
 }
 
 void GestureEducationNotificationController::OnTabletControllerDestroyed() {
-  tablet_mode_observer_.RemoveAll();
+  tablet_mode_observation_.Reset();
 }
 
 void GestureEducationNotificationController::RegisterProfilePrefs(
diff --git a/ash/system/gesture_education/gesture_education_notification_controller.h b/ash/system/gesture_education/gesture_education_notification_controller.h
index ea6cc71..52249843 100644
--- a/ash/system/gesture_education/gesture_education_notification_controller.h
+++ b/ash/system/gesture_education/gesture_education_notification_controller.h
@@ -12,7 +12,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/strings/string16.h"
 
 class PrefRegistrySimple;
@@ -53,8 +53,8 @@
 
   void ResetPrefForTest();
 
-  ScopedObserver<TabletModeController, TabletModeObserver>
-      tablet_mode_observer_{this};
+  base::ScopedObservation<TabletModeController, TabletModeObserver>
+      tablet_mode_observation_{this};
 
   PrefService* active_user_prefs_ = nullptr;  // Not owned.
 
diff --git a/ash/system/holding_space/holding_space_item_view_delegate.cc b/ash/system/holding_space/holding_space_item_view_delegate.cc
index d2bb8ae..cae82006 100644
--- a/ash/system/holding_space/holding_space_item_view_delegate.cc
+++ b/ash/system/holding_space/holding_space_item_view_delegate.cc
@@ -84,7 +84,7 @@
 
 void HoldingSpaceItemViewDelegate::OnHoldingSpaceItemViewCreated(
     HoldingSpaceItemView* view) {
-  view_observer_.Add(view);
+  view_observations_.AddObservation(view);
   views_.push_back(view);
 }
 
@@ -326,7 +326,7 @@
 
 void HoldingSpaceItemViewDelegate::OnViewIsDeleting(views::View* view) {
   base::Erase(views_, view);
-  view_observer_.Remove(view);
+  view_observations_.RemoveObservation(view);
 }
 
 void HoldingSpaceItemViewDelegate::ExecuteCommand(int command_id,
diff --git a/ash/system/holding_space/holding_space_item_view_delegate.h b/ash/system/holding_space/holding_space_item_view_delegate.h
index 62374c8..d151966 100644
--- a/ash/system/holding_space/holding_space_item_view_delegate.h
+++ b/ash/system/holding_space/holding_space_item_view_delegate.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "ash/ash_export.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "ui/base/models/simple_menu_model.h"
 #include "ui/views/context_menu_controller.h"
 #include "ui/views/drag_controller.h"
@@ -141,7 +141,8 @@
   HoldingSpaceItemView* ignore_mouse_released_ = nullptr;
 
   // We observe `views_` for their lifetime so we can track selected state.
-  ScopedObserver<views::View, views::ViewObserver> view_observer_{this};
+  base::ScopedMultiSourceObservation<views::View, views::ViewObserver>
+      view_observations_{this};
 };
 
 }  // namespace ash
diff --git a/ash/system/holding_space/holding_space_tray_bubble.cc b/ash/system/holding_space/holding_space_tray_bubble.cc
index 3df0a2b..97c15ce 100644
--- a/ash/system/holding_space/holding_space_tray_bubble.cc
+++ b/ash/system/holding_space/holding_space_tray_bubble.cc
@@ -342,8 +342,8 @@
   FindVisibleHoldingSpaceItems(bubble_view, &visible_items);
   holding_space_metrics::RecordItemCounts(visible_items);
 
-  shelf_observer_.Add(holding_space_tray_->shelf());
-  tablet_mode_observer_.Add(Shell::Get()->tablet_mode_controller());
+  shelf_observation_.Observe(holding_space_tray_->shelf());
+  tablet_mode_observation_.Observe(Shell::Get()->tablet_mode_controller());
 }
 
 HoldingSpaceTrayBubble::~HoldingSpaceTrayBubble() {
diff --git a/ash/system/holding_space/holding_space_tray_bubble.h b/ash/system/holding_space/holding_space_tray_bubble.h
index 132dcac7..fa0b1413 100644
--- a/ash/system/holding_space/holding_space_tray_bubble.h
+++ b/ash/system/holding_space/holding_space_tray_bubble.h
@@ -16,6 +16,7 @@
 #include "ash/system/screen_layout_observer.h"
 #include "ash/system/tray/tray_bubble_wrapper.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
+#include "base/scoped_observation.h"
 
 namespace ash {
 
@@ -70,9 +71,9 @@
   std::unique_ptr<TrayBubbleWrapper> bubble_wrapper_;
   std::unique_ptr<ui::EventHandler> event_handler_;
 
-  ScopedObserver<Shelf, ShelfObserver> shelf_observer_{this};
-  ScopedObserver<TabletModeController, TabletModeObserver>
-      tablet_mode_observer_{this};
+  base::ScopedObservation<Shelf, ShelfObserver> shelf_observation_{this};
+  base::ScopedObservation<TabletModeController, TabletModeObserver>
+      tablet_mode_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/system/phonehub/notification_opt_in_view.cc b/ash/system/phonehub/notification_opt_in_view.cc
index 80e50a2..30ac85c 100644
--- a/ash/system/phonehub/notification_opt_in_view.cc
+++ b/ash/system/phonehub/notification_opt_in_view.cc
@@ -58,7 +58,7 @@
   InitLayout();
 
   DCHECK(notification_access_manager_);
-  access_manager_observer_.Add(notification_access_manager_);
+  access_manager_observation_.Observe(notification_access_manager_);
 
   // Checks and updates its visibility upon creation.
   UpdateVisibility();
diff --git a/ash/system/phonehub/notification_opt_in_view.h b/ash/system/phonehub/notification_opt_in_view.h
index ce15b86..d18747a73 100644
--- a/ash/system/phonehub/notification_opt_in_view.h
+++ b/ash/system/phonehub/notification_opt_in_view.h
@@ -7,7 +7,7 @@
 
 #include "ash/ash_export.h"
 #include "ash/system/phonehub/interstitial_view_button.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chromeos/components/phonehub/notification_access_manager.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/metadata/metadata_header_macros.h"
@@ -58,9 +58,10 @@
 
   chromeos::phonehub::NotificationAccessManager* notification_access_manager_;
 
-  ScopedObserver<chromeos::phonehub::NotificationAccessManager,
-                 chromeos::phonehub::NotificationAccessManager::Observer>
-      access_manager_observer_{this};
+  base::ScopedObservation<
+      chromeos::phonehub::NotificationAccessManager,
+      chromeos::phonehub::NotificationAccessManager::Observer>
+      access_manager_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/system/phonehub/phone_hub_tray.cc b/ash/system/phonehub/phone_hub_tray.cc
index 5cb1e86d..c4a0456 100644
--- a/ash/system/phonehub/phone_hub_tray.cc
+++ b/ash/system/phonehub/phone_hub_tray.cc
@@ -48,7 +48,7 @@
 
 PhoneHubTray::PhoneHubTray(Shelf* shelf)
     : TrayBackgroundView(shelf), ui_controller_(new PhoneHubUiController()) {
-  observed_phone_hub_ui_controller_.Add(ui_controller_.get());
+  observed_phone_hub_ui_controller_.Observe(ui_controller_.get());
 
   auto icon = std::make_unique<views::ImageView>();
   icon->SetTooltipText(
diff --git a/ash/system/phonehub/phone_hub_tray.h b/ash/system/phonehub/phone_hub_tray.h
index 7666a18..54efb233 100644
--- a/ash/system/phonehub/phone_hub_tray.h
+++ b/ash/system/phonehub/phone_hub_tray.h
@@ -11,7 +11,7 @@
 #include "ash/system/phonehub/phone_hub_ui_controller.h"
 #include "ash/system/phonehub/phone_status_view.h"
 #include "ash/system/tray/tray_background_view.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace chromeos {
 namespace phonehub {
@@ -100,7 +100,7 @@
   // Unowned.
   PhoneHubContentView* content_view_ = nullptr;
 
-  ScopedObserver<PhoneHubUiController, PhoneHubUiController::Observer>
+  base::ScopedObservation<PhoneHubUiController, PhoneHubUiController::Observer>
       observed_phone_hub_ui_controller_{this};
 };
 
diff --git a/ash/system/power/backlights_forced_off_setter.cc b/ash/system/power/backlights_forced_off_setter.cc
index 0dbea97..bb54110 100644
--- a/ash/system/power/backlights_forced_off_setter.cc
+++ b/ash/system/power/backlights_forced_off_setter.cc
@@ -16,11 +16,10 @@
 
 namespace ash {
 
-BacklightsForcedOffSetter::BacklightsForcedOffSetter()
-    : power_manager_observer_(this) {
+BacklightsForcedOffSetter::BacklightsForcedOffSetter() {
   InitDisableTouchscreenWhileScreenOff();
 
-  power_manager_observer_.Add(chromeos::PowerManagerClient::Get());
+  power_manager_observation_.Observe(chromeos::PowerManagerClient::Get());
   GetInitialBacklightsForcedOff();
 }
 
diff --git a/ash/system/power/backlights_forced_off_setter.h b/ash/system/power/backlights_forced_off_setter.h
index 22d59b4..e8a77da 100644
--- a/ash/system/power/backlights_forced_off_setter.h
+++ b/ash/system/power/backlights_forced_off_setter.h
@@ -15,7 +15,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 
 namespace ash {
@@ -94,9 +94,9 @@
 
   base::ObserverList<ScreenBacklightObserver>::Unchecked observers_;
 
-  ScopedObserver<chromeos::PowerManagerClient,
-                 chromeos::PowerManagerClient::Observer>
-      power_manager_observer_;
+  base::ScopedObservation<chromeos::PowerManagerClient,
+                          chromeos::PowerManagerClient::Observer>
+      power_manager_observation_{this};
 
   base::WeakPtrFactory<BacklightsForcedOffSetter> weak_ptr_factory_{this};
 
diff --git a/ash/system/power/backlights_forced_off_setter_unittest.cc b/ash/system/power/backlights_forced_off_setter_unittest.cc
index 66bcba0..172714f 100644
--- a/ash/system/power/backlights_forced_off_setter_unittest.cc
+++ b/ash/system/power/backlights_forced_off_setter_unittest.cc
@@ -31,9 +31,8 @@
 class TestObserver : public ScreenBacklightObserver {
  public:
   explicit TestObserver(BacklightsForcedOffSetter* backlights_forced_off_setter)
-      : backlights_forced_off_setter_(backlights_forced_off_setter),
-        scoped_observer_(this) {
-    scoped_observer_.Add(backlights_forced_off_setter);
+      : backlights_forced_off_setter_(backlights_forced_off_setter) {
+    scoped_observation_.Observe(backlights_forced_off_setter);
   }
 
   ~TestObserver() override = default;
@@ -56,8 +55,8 @@
 
   std::vector<bool> forced_off_states_;
 
-  ScopedObserver<BacklightsForcedOffSetter, ScreenBacklightObserver>
-      scoped_observer_;
+  base::ScopedObservation<BacklightsForcedOffSetter, ScreenBacklightObserver>
+      scoped_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(TestObserver);
 };
diff --git a/ash/system/power/power_button_controller.cc b/ash/system/power/power_button_controller.cc
index b66ef83..5cc8108 100644
--- a/ash/system/power/power_button_controller.cc
+++ b/ash/system/power/power_button_controller.cc
@@ -103,8 +103,7 @@
     BacklightsForcedOffSetter* backlights_forced_off_setter)
     : backlights_forced_off_setter_(backlights_forced_off_setter),
       lock_state_controller_(Shell::Get()->lock_state_controller()),
-      tick_clock_(base::DefaultTickClock::GetInstance()),
-      backlights_forced_off_observer_(this) {
+      tick_clock_(base::DefaultTickClock::GetInstance()) {
   ProcessCommandLine();
   display_controller_ = std::make_unique<PowerButtonDisplayController>(
       backlights_forced_off_setter_, tick_clock_);
@@ -121,7 +120,7 @@
 
   auto* shell = Shell::Get();
   shell->display_configurator()->AddObserver(this);
-  backlights_forced_off_observer_.Add(backlights_forced_off_setter);
+  backlights_forced_off_observation_.Observe(backlights_forced_off_setter);
   shell->tablet_mode_controller()->AddObserver(this);
   shell->lock_state_controller()->AddObserver(this);
   shell->session_controller()->AddObserver(this);
diff --git a/ash/system/power/power_button_controller.h b/ash/system/power/power_button_controller.h
index 703562d..b2831b1 100644
--- a/ash/system/power/power_button_controller.h
+++ b/ash/system/power/power_button_controller.h
@@ -272,8 +272,8 @@
   // display's height or width, respectively.
   double power_button_offset_percentage_ = 0.f;
 
-  ScopedObserver<BacklightsForcedOffSetter, ScreenBacklightObserver>
-      backlights_forced_off_observer_;
+  base::ScopedObservation<BacklightsForcedOffSetter, ScreenBacklightObserver>
+      backlights_forced_off_observation_{this};
 
   // Used to maintain active state of the active window that exists before
   // showing menu.
diff --git a/ash/system/power/power_button_display_controller.cc b/ash/system/power/power_button_display_controller.cc
index 3c7e6bc..b590f141 100644
--- a/ash/system/power/power_button_display_controller.cc
+++ b/ash/system/power/power_button_display_controller.cc
@@ -32,13 +32,12 @@
     BacklightsForcedOffSetter* backlights_forced_off_setter,
     const base::TickClock* tick_clock)
     : backlights_forced_off_setter_(backlights_forced_off_setter),
-      backlights_forced_off_observer_(this),
       tick_clock_(tick_clock) {
   chromeos::PowerManagerClient::Get()->AddObserver(this);
   ui::DeviceDataManager::GetInstance()->AddObserver(this);
   Shell::Get()->AddPreTargetHandler(this, ui::EventTarget::Priority::kSystem);
 
-  backlights_forced_off_observer_.Add(backlights_forced_off_setter_);
+  backlights_forced_off_observation_.Observe(backlights_forced_off_setter_);
 }
 
 PowerButtonDisplayController::~PowerButtonDisplayController() {
diff --git a/ash/system/power/power_button_display_controller.h b/ash/system/power/power_button_display_controller.h
index d982818..1196160 100644
--- a/ash/system/power/power_button_display_controller.h
+++ b/ash/system/power/power_button_display_controller.h
@@ -11,7 +11,7 @@
 #include "ash/system/power/backlights_forced_off_setter.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/time/time.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "ui/events/devices/input_device_event_observer.h"
@@ -74,8 +74,8 @@
 
   BacklightsForcedOffSetter* backlights_forced_off_setter_;  // Not owned.
 
-  ScopedObserver<BacklightsForcedOffSetter, ScreenBacklightObserver>
-      backlights_forced_off_observer_;
+  base::ScopedObservation<BacklightsForcedOffSetter, ScreenBacklightObserver>
+      backlights_forced_off_observation_{this};
 
   // Whether an accessibility alert should be sent when the backlights
   // forced-off state changes.
diff --git a/ash/system/power/power_event_observer.cc b/ash/system/power/power_event_observer.cc
index 48854fd..a87bbe4 100644
--- a/ash/system/power/power_event_observer.cc
+++ b/ash/system/power/power_event_observer.cc
@@ -17,7 +17,7 @@
 #include "ash/wm/lock_state_observer.h"
 #include "base/bind.h"
 #include "base/location.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_tree_host.h"
@@ -61,7 +61,7 @@
   //     CompositorWatcher instance is deleted, nor from the CompositorWatcher
   //     destructor.
   explicit CompositorWatcher(base::OnceClosure callback)
-      : callback_(std::move(callback)), compositor_observer_(this) {
+      : callback_(std::move(callback)), compositor_observations_(this) {
     Start();
   }
   ~CompositorWatcher() override = default;
@@ -99,13 +99,13 @@
       return;
     }
 
-    compositor_observer_.Remove(compositor);
+    compositor_observations_.RemoveObservation(compositor);
     pending_compositing_.erase(compositor);
 
     RunCallbackIfAllCompositingEnded();
   }
   void OnCompositingShuttingDown(ui::Compositor* compositor) override {
-    compositor_observer_.Remove(compositor);
+    compositor_observations_.RemoveObservation(compositor);
     pending_compositing_.erase(compositor);
 
     RunCallbackIfAllCompositingEnded();
@@ -144,7 +144,7 @@
 
       DCHECK(!pending_compositing_.count(compositor));
 
-      compositor_observer_.Add(compositor);
+      compositor_observations_.AddObservation(compositor);
       pending_compositing_[compositor].state =
           CompositingState::kWaitingForWallpaperAnimation;
 
@@ -200,7 +200,8 @@
   // visibility set to false), so there should be no need for tracking
   // compositors that were hidden to start with.
   std::map<ui::Compositor*, CompositorInfo> pending_compositing_;
-  ScopedObserver<ui::Compositor, ui::CompositorObserver> compositor_observer_;
+  base::ScopedMultiSourceObservation<ui::Compositor, ui::CompositorObserver>
+      compositor_observations_;
 
   base::WeakPtrFactory<CompositorWatcher> weak_ptr_factory_{this};
 
diff --git a/ash/system/power/power_prefs.cc b/ash/system/power/power_prefs.cc
index b0409d6..5bd57222 100644
--- a/ash/system/power/power_prefs.cc
+++ b/ash/system/power/power_prefs.cc
@@ -117,14 +117,13 @@
                        chromeos::PowerManagerClient* power_manager_client,
                        PrefService* local_state)
     : power_policy_controller_(power_policy_controller),
-      power_manager_client_observer_(this),
       tick_clock_(base::DefaultTickClock::GetInstance()),
       local_state_(local_state) {
   DCHECK(power_manager_client);
   DCHECK(power_policy_controller_);
   DCHECK(tick_clock_);
 
-  power_manager_client_observer_.Add(power_manager_client);
+  power_manager_client_observation_.Observe(power_manager_client);
   Shell::Get()->session_controller()->AddObserver(this);
 
   // |local_state_| could be null in tests.
diff --git a/ash/system/power/power_prefs.h b/ash/system/power/power_prefs.h
index 02720429..fe2939d2 100644
--- a/ash/system/power/power_prefs.h
+++ b/ash/system/power/power_prefs.h
@@ -10,7 +10,7 @@
 #include "ash/ash_export.h"
 #include "ash/public/cpp/session/session_observer.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/time/tick_clock.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 
@@ -75,9 +75,9 @@
   chromeos::PowerPolicyController* const
       power_policy_controller_;  // Not owned.
 
-  ScopedObserver<chromeos::PowerManagerClient,
-                 chromeos::PowerManagerClient::Observer>
-      power_manager_client_observer_;
+  base::ScopedObservation<chromeos::PowerManagerClient,
+                          chromeos::PowerManagerClient::Observer>
+      power_manager_client_observation_{this};
 
   std::unique_ptr<PrefChangeRegistrar> profile_registrar_;
   std::unique_ptr<PrefChangeRegistrar> local_state_registrar_;
diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc
index 4b1a8e2..6f4657c 100644
--- a/ash/system/tray/tray_background_view.cc
+++ b/ash/system/tray/tray_background_view.cc
@@ -27,7 +27,7 @@
 #include "ash/system/tray/tray_event_filter.h"
 #include "ash/window_factory.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "base/time/time.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/compositor/layer.h"
@@ -145,11 +145,12 @@
     host_->AnchorUpdated();
   }
 
-  void Add(views::Widget* widget) { observer_.Add(widget); }
+  void Add(views::Widget* widget) { observations_.AddObservation(widget); }
 
  private:
   TrayBackgroundView* host_;
-  ScopedObserver<views::Widget, views::WidgetObserver> observer_{this};
+  base::ScopedMultiSourceObservation<views::Widget, views::WidgetObserver>
+      observations_{this};
 
   DISALLOW_COPY_AND_ASSIGN(TrayWidgetObserver);
 };
diff --git a/ash/touch/touch_hud_renderer.cc b/ash/touch/touch_hud_renderer.cc
index c2390745..330a733 100644
--- a/ash/touch/touch_hud_renderer.cc
+++ b/ash/touch/touch_hud_renderer.cc
@@ -4,7 +4,7 @@
 
 #include "ash/touch/touch_hud_renderer.h"
 
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/time/time.h"
 #include "third_party/skia/include/effects/SkGradientShader.h"
 #include "ui/compositor/layer.h"
@@ -41,7 +41,7 @@
 
     SetSize(gfx::Size(2 * kPointRadius + 2, 2 * kPointRadius + 2));
 
-    widget_observer_.Add(parent_widget);
+    widget_observation_.Observe(parent_widget);
   }
 
   ~TouchPointView() override = default;
@@ -119,7 +119,8 @@
   // itself. This should be non-null when fading out, and null otherwise.
   std::unique_ptr<TouchPointView> owned_self_reference_;
 
-  ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_{this};
+  base::ScopedObservation<views::Widget, views::WidgetObserver>
+      widget_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(TouchPointView);
 };
diff --git a/ash/tray_action/tray_action.cc b/ash/tray_action/tray_action.cc
index c6075f8..ed767965 100644
--- a/ash/tray_action/tray_action.cc
+++ b/ash/tray_action/tray_action.cc
@@ -17,7 +17,7 @@
 
 TrayAction::TrayAction(BacklightsForcedOffSetter* backlights_forced_off_setter)
     : backlights_forced_off_setter_(backlights_forced_off_setter) {
-  stylus_observer_.Add(ui::DeviceDataManager::GetInstance());
+  stylus_observation_.Observe(ui::DeviceDataManager::GetInstance());
 }
 
 TrayAction::~TrayAction() = default;
diff --git a/ash/tray_action/tray_action.h b/ash/tray_action/tray_action.h
index e24a450c..f9636f03 100644
--- a/ash/tray_action/tray_action.h
+++ b/ash/tray_action/tray_action.h
@@ -11,7 +11,7 @@
 #include "ash/public/mojom/tray_action.mojom.h"
 #include "base/macros.h"
 #include "base/observer_list.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
@@ -100,8 +100,8 @@
 
   mojo::Remote<mojom::TrayActionClient> tray_action_client_;
 
-  ScopedObserver<ui::DeviceDataManager, ui::InputDeviceEventObserver>
-      stylus_observer_{this};
+  base::ScopedObservation<ui::DeviceDataManager, ui::InputDeviceEventObserver>
+      stylus_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(TrayAction);
 };
diff --git a/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.cc b/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.cc
index 1759a3e..5a67018 100644
--- a/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.cc
+++ b/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.cc
@@ -27,7 +27,7 @@
 
 BackGestureContextualNudgeControllerImpl::
     BackGestureContextualNudgeControllerImpl() {
-  tablet_mode_observer_.Add(Shell::Get()->tablet_mode_controller());
+  tablet_mode_observation_.Observe(Shell::Get()->tablet_mode_controller());
   shelf_control_visible_ = ShelfConfig::Get()->shelf_controls_shown();
   ShelfConfig::Get()->AddObserver(this);
 }
@@ -248,7 +248,7 @@
 }
 
 void BackGestureContextualNudgeControllerImpl::DoCleanUp() {
-  tablet_mode_observer_.RemoveAll();
+  tablet_mode_observation_.Reset();
 
   if (is_monitoring_windows_) {
     Shell::Get()->activation_client()->RemoveObserver(this);
diff --git a/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.h b/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.h
index 803d5a0..2d9c757 100644
--- a/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.h
+++ b/ash/wm/gestures/back_gesture/back_gesture_contextual_nudge_controller_impl.h
@@ -12,7 +12,7 @@
 #include "ash/public/cpp/tablet_mode_observer.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/timer/timer.h"
 #include "ui/wm/public/activation_change_observer.h"
 
@@ -105,8 +105,8 @@
   void DoCleanUp();
 
   ScopedSessionObserver session_observer_{this};
-  ScopedObserver<TabletModeController, TabletModeObserver>
-      tablet_mode_observer_{this};
+  base::ScopedObservation<TabletModeController, TabletModeObserver>
+      tablet_mode_observation_{this};
 
   // The delegate to monitor the current active window's navigation status.
   std::unique_ptr<BackGestureContextualNudgeDelegate> nudge_delegate_;
diff --git a/ash/wm/lock_action_handler_layout_manager.cc b/ash/wm/lock_action_handler_layout_manager.cc
index a39d4dd3..d23d359 100644
--- a/ash/wm/lock_action_handler_layout_manager.cc
+++ b/ash/wm/lock_action_handler_layout_manager.cc
@@ -41,8 +41,8 @@
     : LockLayoutManager(window, shelf),
       action_background_controller_(action_background_controller) {
   TrayAction* tray_action = Shell::Get()->tray_action();
-  tray_action_observer_.Add(tray_action);
-  action_background_observer_.Add(action_background_controller_);
+  tray_action_observation_.Observe(tray_action);
+  action_background_observation_.Observe(action_background_controller_);
 }
 
 LockActionHandlerLayoutManager::~LockActionHandlerLayoutManager() = default;
diff --git a/ash/wm/lock_action_handler_layout_manager.h b/ash/wm/lock_action_handler_layout_manager.h
index f21aa8d..be4b60b 100644
--- a/ash/wm/lock_action_handler_layout_manager.h
+++ b/ash/wm/lock_action_handler_layout_manager.h
@@ -16,7 +16,7 @@
 #include "ash/tray_action/tray_action_observer.h"
 #include "ash/wm/lock_layout_manager.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 
 namespace ash {
 
@@ -68,10 +68,11 @@
 
   LockScreenActionBackgroundController* action_background_controller_;
 
-  ScopedObserver<TrayAction, TrayActionObserver> tray_action_observer_{this};
-  ScopedObserver<LockScreenActionBackgroundController,
-                 LockScreenActionBackgroundObserver>
-      action_background_observer_{this};
+  base::ScopedObservation<TrayAction, TrayActionObserver>
+      tray_action_observation_{this};
+  base::ScopedObservation<LockScreenActionBackgroundController,
+                          LockScreenActionBackgroundObserver>
+      action_background_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(LockActionHandlerLayoutManager);
 };
diff --git a/ash/wm/lock_layout_manager.cc b/ash/wm/lock_layout_manager.cc
index 5f36092..1df6a47f 100644
--- a/ash/wm/lock_layout_manager.cc
+++ b/ash/wm/lock_layout_manager.cc
@@ -20,7 +20,7 @@
       root_window_(window->GetRootWindow()) {
   root_window_->AddObserver(this);
   keyboard::KeyboardUIController::Get()->AddObserver(this);
-  shelf_observer_.Add(shelf);
+  shelf_observation_.Observe(shelf);
 }
 
 LockLayoutManager::~LockLayoutManager() {
diff --git a/ash/wm/lock_layout_manager.h b/ash/wm/lock_layout_manager.h
index e689634..0a3f2d6 100644
--- a/ash/wm/lock_layout_manager.h
+++ b/ash/wm/lock_layout_manager.h
@@ -12,7 +12,7 @@
 #include "ash/shelf/shelf_observer.h"
 #include "ash/wm/wm_default_layout_manager.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/aura/window_observer.h"
 #include "ui/gfx/geometry/rect.h"
 
@@ -75,7 +75,7 @@
   aura::Window* window_;
   aura::Window* root_window_;
 
-  ScopedObserver<Shelf, ShelfObserver> shelf_observer_{this};
+  base::ScopedObservation<Shelf, ShelfObserver> shelf_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(LockLayoutManager);
 };
diff --git a/ash/wm/overview/scoped_overview_transform_window.cc b/ash/wm/overview/scoped_overview_transform_window.cc
index 41ff743..fa32bb5 100644
--- a/ash/wm/overview/scoped_overview_transform_window.cc
+++ b/ash/wm/overview/scoped_overview_transform_window.cc
@@ -171,7 +171,7 @@
 
     // Add this as |aura::WindowObserver| for observing |kHideInOverviewKey|
     // property changes.
-    window_observer_.Add(transient);
+    window_observations_.AddObservation(transient);
 
     // Hide transient children which have been specified to be hidden in
     // overview mode.
@@ -230,7 +230,7 @@
   UpdateRoundedCorners(/*show=*/false);
   aura::client::GetTransientWindowClient()->RemoveObserver(this);
 
-  window_observer_.RemoveAll();
+  window_observations_.RemoveAllObservations();
 }
 
 // static
@@ -535,7 +535,7 @@
 
   // Add this as |aura::WindowObserver| for observing |kHideInOverviewKey|
   // property changes.
-  window_observer_.Add(transient_child);
+  window_observations_.AddObservation(transient_child);
 }
 
 void ScopedOverviewTransformWindow::OnTransientChildWindowRemoved(
@@ -548,8 +548,8 @@
   DCHECK(event_targeting_blocker_map_.contains(transient_child));
   event_targeting_blocker_map_.erase(transient_child);
 
-  if (window_observer_.IsObserving(transient_child))
-    window_observer_.Remove(transient_child);
+  if (window_observations_.IsObservingSource(transient_child))
+    window_observations_.RemoveObservation(transient_child);
 }
 
 void ScopedOverviewTransformWindow::OnWindowPropertyChanged(
diff --git a/ash/wm/overview/scoped_overview_transform_window.h b/ash/wm/overview/scoped_overview_transform_window.h
index 2472559..a81234f 100644
--- a/ash/wm/overview/scoped_overview_transform_window.h
+++ b/ash/wm/overview/scoped_overview_transform_window.h
@@ -207,7 +207,8 @@
 
   std::unique_ptr<ScopedOverviewHideWindows> hidden_transient_children_;
 
-  ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this};
+  base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
+      window_observations_{this};
 
   base::WeakPtrFactory<ScopedOverviewTransformWindow> weak_ptr_factory_{this};
 };
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc
index 34b1fc4..abebc7f 100644
--- a/ash/wm/splitview/split_view_controller.cc
+++ b/ash/wm/splitview/split_view_controller.cc
@@ -1526,10 +1526,6 @@
   is_previous_layout_right_side_up_ = true;
 }
 
-void SplitViewController::OnTabletControllerDestroyed() {
-  tablet_mode_observer_.RemoveAll();
-}
-
 void SplitViewController::OnAccessibilityStatusChanged() {
   // TODO(crubg.com/853588): Exit split screen if ChromeVox is turned on until
   // they are compatible.
diff --git a/ash/wm/splitview/split_view_controller.h b/ash/wm/splitview/split_view_controller.h
index a948f9a0..c117151 100644
--- a/ash/wm/splitview/split_view_controller.h
+++ b/ash/wm/splitview/split_view_controller.h
@@ -18,7 +18,6 @@
 #include "base/containers/flat_map.h"
 #include "base/macros.h"
 #include "base/observer_list.h"
-#include "base/scoped_observer.h"
 #include "base/time/time.h"
 #include "ui/aura/window_observer.h"
 #include "ui/display/display.h"
@@ -260,7 +259,6 @@
   void OnTabletModeStarted() override;
   void OnTabletModeEnding() override;
   void OnTabletModeEnded() override;
-  void OnTabletControllerDestroyed() override;
 
   // AccessibilityObserver:
   void OnAccessibilityStatusChanged() override;
@@ -512,9 +510,6 @@
 
   base::ObserverList<SplitViewObserver>::Unchecked observers_;
 
-  ScopedObserver<TabletModeController, TabletModeObserver>
-      tablet_mode_observer_{this};
-
   // Records the presentation time of resize operation in split view mode.
   std::unique_ptr<PresentationTimeRecorder> presentation_time_recorder_;
 
diff --git a/ash/wm/splitview/split_view_divider.cc b/ash/wm/splitview/split_view_divider.cc
index 15a449bef..20b475c1 100644
--- a/ash/wm/splitview/split_view_divider.cc
+++ b/ash/wm/splitview/split_view_divider.cc
@@ -380,8 +380,8 @@
     return;
 
   // We only care about the bounds change of windows in
-  // |transient_windows_observer_|.
-  if (!transient_windows_observer_.IsObserving(window))
+  // |transient_windows_observations_|.
+  if (!transient_windows_observations_.IsObservingSource(window))
     return;
 
   // |window|'s transient parent must be one of the windows in
@@ -456,12 +456,12 @@
 
   // At this moment, the transient window may not have the valid bounds yet.
   // Start observe the transient window.
-  transient_windows_observer_.Add(transient);
+  transient_windows_observations_.AddObservation(transient);
 }
 
 void SplitViewDivider::StopObservingTransientChild(aura::Window* transient) {
-  if (transient_windows_observer_.IsObserving(transient))
-    transient_windows_observer_.Remove(transient);
+  if (transient_windows_observations_.IsObservingSource(transient))
+    transient_windows_observations_.RemoveObservation(transient);
 }
 
 }  // namespace ash
diff --git a/ash/wm/splitview/split_view_divider.h b/ash/wm/splitview/split_view_divider.h
index d491017..c12b310c 100644
--- a/ash/wm/splitview/split_view_divider.h
+++ b/ash/wm/splitview/split_view_divider.h
@@ -9,7 +9,7 @@
 
 #include "ash/ash_export.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_observer.h"
 #include "ui/display/display.h"
@@ -120,8 +120,8 @@
   aura::Window::Windows observed_windows_;
 
   // Tracks observed transient windows.
-  ScopedObserver<aura::Window, aura::WindowObserver>
-      transient_windows_observer_{this};
+  base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
+      transient_windows_observations_{this};
 
   DISALLOW_COPY_AND_ASSIGN(SplitViewDivider);
 };
diff --git a/ash/wm/system_modal_container_layout_manager.cc b/ash/wm/system_modal_container_layout_manager.cc
index 1fed0913..5d1ddfe 100644
--- a/ash/wm/system_modal_container_layout_manager.cc
+++ b/ash/wm/system_modal_container_layout_manager.cc
@@ -48,7 +48,7 @@
     aura::Window* container)
     : container_(container) {
   Shelf* shelf = RootWindowController::ForWindow(container_)->shelf();
-  shelf_observer_.Add(shelf);
+  shelf_observation_.Observe(shelf);
 }
 
 SystemModalContainerLayoutManager::~SystemModalContainerLayoutManager() {
diff --git a/ash/wm/system_modal_container_layout_manager.h b/ash/wm/system_modal_container_layout_manager.h
index dc523e2..8bfaf792 100644
--- a/ash/wm/system_modal_container_layout_manager.h
+++ b/ash/wm/system_modal_container_layout_manager.h
@@ -15,7 +15,7 @@
 #include "ash/shelf/shelf_observer.h"
 #include "ash/wm/wm_default_layout_manager.h"
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/aura/window_observer.h"
 
 namespace gfx {
@@ -120,7 +120,7 @@
   std::set<const aura::Window*> windows_to_center_;
 
   // A shelf observer to update position of modals when work area is updated.
-  ScopedObserver<Shelf, ShelfObserver> shelf_observer_{this};
+  base::ScopedObservation<Shelf, ShelfObserver> shelf_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(SystemModalContainerLayoutManager);
 };
diff --git a/ash/wm/video_detector.cc b/ash/wm/video_detector.cc
index 9d25c848..57ff4f6d 100644
--- a/ash/wm/video_detector.cc
+++ b/ash/wm/video_detector.cc
@@ -48,19 +48,19 @@
 }
 
 void VideoDetector::OnWindowInitialized(aura::Window* window) {
-  window_observer_manager_.Add(window);
+  window_observations_manager_.AddObservation(window);
 }
 
 void VideoDetector::OnWindowDestroying(aura::Window* window) {
   if (fullscreen_desks_containers_.count(window)) {
-    window_observer_manager_.Remove(window);
+    window_observations_manager_.RemoveObservation(window);
     fullscreen_desks_containers_.erase(window);
     UpdateState();
   }
 }
 
 void VideoDetector::OnWindowDestroyed(aura::Window* window) {
-  window_observer_manager_.Remove(window);
+  window_observations_manager_.RemoveObservation(window);
 }
 
 void VideoDetector::OnChromeTerminating() {
@@ -75,12 +75,12 @@
       fullscreen_desks_containers_.count(container);
   if (is_fullscreen && !has_fullscreen_in_container) {
     fullscreen_desks_containers_.insert(container);
-    if (!window_observer_manager_.IsObserving(container))
-      window_observer_manager_.Add(container);
+    if (!window_observations_manager_.IsObservingSource(container))
+      window_observations_manager_.AddObservation(container);
     UpdateState();
   } else if (!is_fullscreen && has_fullscreen_in_container) {
     fullscreen_desks_containers_.erase(container);
-    window_observer_manager_.Remove(container);
+    window_observations_manager_.RemoveObservation(container);
     UpdateState();
   }
 }
diff --git a/ash/wm/video_detector.h b/ash/wm/video_detector.h
index d722f02..e55f6a9 100644
--- a/ash/wm/video_detector.h
+++ b/ash/wm/video_detector.h
@@ -15,7 +15,7 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/observer_list.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "mojo/public/cpp/bindings/receiver.h"
@@ -104,8 +104,8 @@
 
   base::ObserverList<Observer>::Unchecked observers_;
 
-  ScopedObserver<aura::Window, aura::WindowObserver> window_observer_manager_{
-      this};
+  base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
+      window_observations_manager_{this};
   ScopedSessionObserver scoped_session_observer_{this};
 
   bool is_shutting_down_;
diff --git a/ash/wm/window_mini_view.cc b/ash/wm/window_mini_view.cc
index 6c38107..537c178 100644
--- a/ash/wm/window_mini_view.cc
+++ b/ash/wm/window_mini_view.cc
@@ -130,7 +130,7 @@
   SetPaintToLayer();
   layer()->SetFillsBoundsOpaquely(false);
 
-  window_observer_.Add(source_window);
+  window_observation_.Observe(source_window);
 
   header_view_ = AddChildView(std::make_unique<views::View>());
   header_view_->SetPaintToLayer();
@@ -218,7 +218,7 @@
   if (window != source_window_)
     return;
 
-  window_observer_.RemoveAll();
+  window_observation_.Reset();
   source_window_ = nullptr;
   SetShowPreview(false);
 }
diff --git a/ash/wm/window_mini_view.h b/ash/wm/window_mini_view.h
index 7a0730a..4d5b10d6 100644
--- a/ash/wm/window_mini_view.h
+++ b/ash/wm/window_mini_view.h
@@ -6,7 +6,7 @@
 #define ASH_WM_WINDOW_MINI_VIEW_H_
 
 #include "ash/ash_export.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_observer.h"
 #include "ui/views/controls/button/button.h"
@@ -109,7 +109,8 @@
   // Optionally shows a preview of |window_|.
   WindowPreviewView* preview_view_ = nullptr;
 
-  ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this};
+  base::ScopedObservation<aura::Window, aura::WindowObserver>
+      window_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/wm/workspace/backdrop_controller.cc b/ash/wm/workspace/backdrop_controller.cc
index 659c03b4..ac2f60f 100644
--- a/ash/wm/workspace/backdrop_controller.cc
+++ b/ash/wm/workspace/backdrop_controller.cc
@@ -214,7 +214,7 @@
 }
 
 BackdropController::~BackdropController() {
-  window_backdrop_observer_.RemoveAll();
+  window_backdrop_observations_.RemoveAllObservations();
   auto* shell = Shell::Get();
   // Shell destroys the TabletModeController before destroying all root windows.
   if (shell->tablet_mode_controller())
@@ -231,15 +231,15 @@
 
 void BackdropController::OnWindowAddedToLayout(aura::Window* window) {
   if (DoesWindowCauseBackdropUpdates(window)) {
-    window_backdrop_observer_.Add(WindowBackdrop::Get(window));
+    window_backdrop_observations_.AddObservation(WindowBackdrop::Get(window));
     UpdateBackdrop();
   }
 }
 
 void BackdropController::OnWindowRemovedFromLayout(aura::Window* window) {
   WindowBackdrop* window_backdrop = WindowBackdrop::Get(window);
-  if (window_backdrop_observer_.IsObserving(window_backdrop))
-    window_backdrop_observer_.Remove(window_backdrop);
+  if (window_backdrop_observations_.IsObservingSource(window_backdrop))
+    window_backdrop_observations_.RemoveObservation(window_backdrop);
 
   if (DoesWindowCauseBackdropUpdates(window))
     UpdateBackdrop();
diff --git a/ash/wm/workspace/backdrop_controller.h b/ash/wm/workspace/backdrop_controller.h
index c74f296..c006c71 100644
--- a/ash/wm/workspace/backdrop_controller.h
+++ b/ash/wm/workspace/backdrop_controller.h
@@ -19,7 +19,7 @@
 #include "base/callback_helpers.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "ui/gfx/geometry/rect.h"
 
 namespace aura {
@@ -180,8 +180,8 @@
   // in overview mode.
   bool pause_update_ = false;
 
-  ScopedObserver<WindowBackdrop, WindowBackdrop::Observer>
-      window_backdrop_observer_{this};
+  base::ScopedMultiSourceObservation<WindowBackdrop, WindowBackdrop::Observer>
+      window_backdrop_observations_{this};
 
   base::WeakPtrFactory<BackdropController> weak_ptr_factory_{this};
 
diff --git a/base/allocator/partition_allocator/partition_alloc_constants.h b/base/allocator/partition_allocator/partition_alloc_constants.h
index 5a28dab7..f959675c 100644
--- a/base/allocator/partition_allocator/partition_alloc_constants.h
+++ b/base/allocator/partition_allocator/partition_alloc_constants.h
@@ -192,7 +192,7 @@
 // The two are separate on Windows 64 bits, where the first one is 8 bytes, and
 // the second one 16. We could technically return something different for
 // malloc() and operator new(), but this would complicate things, and most of
-// our allocations are presumaly coming from operator new() anyway.
+// our allocations are presumably coming from operator new() anyway.
 //
 // __STDCPP_DEFAULT_NEW_ALIGNMENT__ is C++17. As such, it is not defined on all
 // platforms, as Chrome's requirement is C++14 as of 2020.
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h
index 29ddb008..cb6a5cd9 100644
--- a/base/allocator/partition_allocator/partition_root.h
+++ b/base/allocator/partition_allocator/partition_root.h
@@ -95,8 +95,8 @@
 // Options struct used to configure PartitionRoot and PartitionAllocator.
 struct PartitionOptions {
   enum class Alignment {
-    // By default all allocations will be aligned to 8B (16B if
-    // BUILDFLAG_INTERNAL_USE_PARTITION_ALLOC_AS_MALLOC is true).
+    // By default all allocations will be aligned to `base::kAlignment`,
+    // likely to be 8B or 16B depending on platforms and toolchains.
     kRegular,
 
     // In addition to the above alignment enforcement, this option allows using
diff --git a/base/system/sys_info_win.cc b/base/system/sys_info_win.cc
index 313e3b05..64d9908 100644
--- a/base/system/sys_info_win.cc
+++ b/base/system/sys_info_win.cc
@@ -168,27 +168,37 @@
 }
 
 // static
-SysInfo::HardwareInfo SysInfo::GetHardwareInfoSync() {
-  constexpr wchar_t kSystemBiosInformationRegKey[] =
-      L"HARDWARE\\DESCRIPTION\\System\\BIOS";
+std::string ReadHardwareInfoFromRegistry(const wchar_t* reg_value_name) {
+  // On some systems or VMs, the system information and some of the below
+  // locations may be missing info. Attempt to find the info from the below
+  // registry keys in the order provided.
+  static const wchar_t* const kSystemInfoRegKeyPaths[] = {
+      L"HARDWARE\\DESCRIPTION\\System\\BIOS",
+      L"SYSTEM\\CurrentControlSet\\Control\\SystemInformation",
+      L"SYSTEM\\HardwareConfig\\Current",
+  };
 
-  HardwareInfo info;
-  base::win::RegKey system_information_key;
-  if (system_information_key.Open(HKEY_LOCAL_MACHINE,
-                                  kSystemBiosInformationRegKey,
-                                  KEY_READ) == ERROR_SUCCESS) {
-    std::wstring value;
-    if (system_information_key.ReadValue(L"SystemManufacturer", &value) ==
-        ERROR_SUCCESS) {
-      info.manufacturer = base::SysWideToUTF8(value);
-    }
-
-    if (system_information_key.ReadValue(L"SystemProductName", &value) ==
-        ERROR_SUCCESS) {
-      info.model = base::SysWideToUTF8(value);
+  std::wstring value;
+  for (const wchar_t* system_info_reg_key_path : kSystemInfoRegKeyPaths) {
+    base::win::RegKey system_information_key;
+    if (system_information_key.Open(HKEY_LOCAL_MACHINE,
+                                    system_info_reg_key_path,
+                                    KEY_READ) == ERROR_SUCCESS) {
+      if ((system_information_key.ReadValue(reg_value_name, &value) ==
+           ERROR_SUCCESS) &&
+          !value.empty()) {
+        break;
+      }
     }
   }
 
+  return base::SysWideToUTF8(value);
+}
+
+// static
+SysInfo::HardwareInfo SysInfo::GetHardwareInfoSync() {
+  HardwareInfo info = {ReadHardwareInfoFromRegistry(L"SystemManufacturer"),
+                       ReadHardwareInfoFromRegistry(L"SystemProductName")};
   return info;
 }
 
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 2040b5c5..93f067c 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -2145,6 +2145,8 @@
       cflags = [ "/O2" ] + common_optimize_on_cflags
     } else if (optimize_for_fuzzing) {
       cflags = [ "-O1" ] + common_optimize_on_cflags
+    } else if (optimize_for_size) {
+      cflags = [ "-Os" ] + common_optimize_on_cflags
     } else {
       cflags = [ "-O2" ] + common_optimize_on_cflags
     }
diff --git a/build/config/linux/atk/BUILD.gn b/build/config/linux/atk/BUILD.gn
index aad2efa6..bc8e278 100644
--- a/build/config/linux/atk/BUILD.gn
+++ b/build/config/linux/atk/BUILD.gn
@@ -2,12 +2,14 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/config/chromeos/ui_mode.gni")
 import("//build/config/features.gni")
 import("//build/config/linux/pkg_config.gni")
 import("//build/config/ui.gni")
 
+# TODO(crbug.com/1171629): Change this back to is_chromeos.
 # CrOS doesn't install GTK or any gnome packages.
-assert(!is_chromeos)
+assert(!is_chromeos_ash)
 
 # These packages should _only_ be expected when building for a target.
 assert(current_toolchain == default_toolchain)
diff --git a/build/config/ui.gni b/build/config/ui.gni
index 3d23eff..022f008a 100644
--- a/build/config/ui.gni
+++ b/build/config/ui.gni
@@ -40,15 +40,18 @@
   # True means the UI is built using the "views" framework.
   toolkit_views = is_mac || is_win || is_linux || is_chromeos || is_fuchsia
 
+  # TODO(crbug.com/1171629): Remove is_chromeos_lacros.
   # Whether we should use glib, a low level C utility library.
-  use_glib = is_linux && !is_chromecast
+  use_glib = (is_linux || is_chromeos_lacros) && !is_chromecast
 }
 
+# TODO(crbug.com/1171629): Remove is_chromeos_lacros.
 # Make sure glib is not used if building for ChromeOS/Chromecast
-assert(!use_glib || (is_linux && !is_chromecast))
+assert(!use_glib || ((is_linux || is_chromeos_lacros) && !is_chromecast))
 
+# TODO(crbug.com/1171629): Remove is_chromeos_lacros.
 # Whether to use atk, the Accessibility ToolKit library
-use_atk = is_linux && !is_chromecast && use_glib
+use_atk = (is_linux || is_chromeos_lacros) && !is_chromecast && use_glib
 
 # Whether using Xvfb to provide a display server for a test might be
 # necessary.
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 1ce8c167..6a039ec 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-0.20210127.4.1
+0.20210128.1.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 1ce8c167..6a039ec 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-0.20210127.4.1
+0.20210128.1.1
diff --git a/build/toolchain/toolchain.gni b/build/toolchain/toolchain.gni
index d556b0e..95febfe 100644
--- a/build/toolchain/toolchain.gni
+++ b/build/toolchain/toolchain.gni
@@ -39,7 +39,12 @@
 
 declare_args() {
   # Clang compiler version. Clang files are placed at version-dependent paths.
-  clang_version = "12.0.0"
+  if (llvm_force_head_revision) {
+    clang_version = "13.0.0"
+  } else {
+    # TODO(crbug.com/1171687): Remove in the next Clang roll.
+    clang_version = "12.0.0"
+  }
 }
 
 # Check target_os here instead of is_ios as this file is loaded for secondary
diff --git a/cc/paint/paint_op_buffer.cc b/cc/paint/paint_op_buffer.cc
index 8cb0e5f..fac59ff9 100644
--- a/cc/paint/paint_op_buffer.cc
+++ b/cc/paint/paint_op_buffer.cc
@@ -740,26 +740,13 @@
   return helper.size();
 }
 
-// Just a helper for moving SkMatrix -> SkM44 here, these early-outs might not
-// be necessary
-bool IsSkM44Identity(const SkM44& m) {
-  return m == SkM44();
-}
-
 size_t SetMatrixOp::Serialize(const PaintOp* base_op,
                                 void* memory,
                                 size_t size,
                                 const SerializeOptions& options) {
   auto* op = static_cast<const SetMatrixOp*>(base_op);
   PaintOpWriter helper(memory, size, options);
-
-  // TODO(crbug.com/1155544): Take out this early out and see if there's a perf
-  // regression.
-  if (IsSkM44Identity(options.original_ctm)) {
-    helper.Write(op->matrix);
-  } else {
-    helper.Write(options.original_ctm * op->matrix);
-  }
+  helper.Write(options.original_ctm * op->matrix);
   return helper.size();
 }
 
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantArguments.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantArguments.java
index e6dc9d5f..4e4d26d 100644
--- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantArguments.java
+++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantArguments.java
@@ -9,6 +9,8 @@
 
 import androidx.annotation.Nullable;
 
+import org.chromium.base.Log;
+
 import java.net.URLDecoder;
 import java.util.HashMap;
 import java.util.Map;
@@ -70,6 +72,9 @@
         }
     }
 
+    /** Used for logging. */
+    private static final String TAG = "AutofillAssistant";
+
     private static final String UTF8 = "UTF-8";
 
     /**
@@ -178,6 +183,9 @@
     private boolean getBooleanParameter(String key) {
         Object value = mAutofillAssistantParameters.get(key);
         if (!(value instanceof Boolean)) { // Also catches null.
+            if (value != null) {
+                Log.v(TAG, "Expected " + key + " to be boolean, but was " + value.toString());
+            }
             return false;
         }
 
@@ -188,6 +196,9 @@
     private String getStringParameter(String key) {
         Object value = mAutofillAssistantParameters.get(key);
         if (!(value instanceof String)) { // Also catches null.
+            if (value != null) {
+                Log.v(TAG, "Expected " + key + " to be string, but was " + value.toString());
+            }
             return null;
         }
 
@@ -222,8 +233,7 @@
             return false;
         }
         if (!getBooleanParameter(PARAMETER_START_IMMEDIATELY)) {
-            return requestsTriggerScript() || containsBase64TriggerScripts()
-                    || containsTriggerScript();
+            return containsTriggerScript();
         }
         return true;
     }
@@ -289,8 +299,14 @@
     }
 
     /** Deprecated. Whether the caller provides script paths for lite scripts to execute. */
-    public boolean containsTriggerScript() {
+    public boolean containsLegacyTriggerScripts() {
         return !TextUtils.isEmpty(getStringParameter(PARAMETER_TRIGGER_FIRST_TIME_USER))
                 && !TextUtils.isEmpty(getStringParameter(PARAMETER_TRIGGER_RETURNING_TIME_USER));
     }
+
+    /** Whether the caller requested a trigger script to start in any of the supported ways. */
+    public boolean containsTriggerScript() {
+        return requestsTriggerScript() || containsBase64TriggerScripts()
+                || containsLegacyTriggerScripts();
+    }
 }
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacade.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacade.java
index b1c6573..e94055e 100644
--- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacade.java
+++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacade.java
@@ -111,8 +111,7 @@
         // Have an "attempted starts" baseline for the drop out histogram.
         AutofillAssistantMetrics.recordDropOut(DropOutReason.AA_START);
         waitForTabWithWebContents(activity, tab -> {
-            if (arguments.containsTriggerScript() || arguments.requestsTriggerScript()
-                    || arguments.containsBase64TriggerScripts()) {
+            if (arguments.containsTriggerScript()) {
                 // Create a field trial and assign experiment arm based on script parameter. This
                 // is needed to tag UKM data to allow for A/B experiment comparisons.
                 FieldTrialList.createFieldTrial(LITE_SCRIPT_EXPERIMENT_TRIAL,
@@ -126,7 +125,7 @@
                 // Legacy, remove as soon as possible. Trigger scripts before M-88 were tied to the
                 // regular autofill assistant Chrome setting. Since M-88, they also respect the new
                 // proactive help setting.
-                if (arguments.containsTriggerScript()
+                if (arguments.containsLegacyTriggerScripts()
                         && (!AutofillAssistantPreferencesUtil.isProactiveHelpOn())) {
                     if (AutofillAssistantPreferencesUtil
                                     .isAutofillAssistantLiteScriptCancelThresholdReached()) {
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 42e0432..e7cb60b 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
@@ -59,7 +59,7 @@
 <translation id="8304833501377495048">Ne jelenjen meg újra ez a lapsor?</translation>
 <translation id="83556505225171773">{TABS_COUNT,plural, =1{<ph name="TABS_COUNT_ONE" /> kijelölt lap bezárása}other{<ph name="TABS_COUNT_MANY" /> kijelölt lap bezárása}}</translation>
 <translation id="8557923272772633250"><ph name="NUMBER_OF_TABS" /> lapot tartalmazó lapcsoport kibontása.</translation>
-<translation id="860282621117673749">Árcsökkenéssel kapcsolatos értesítések</translation>
+<translation id="860282621117673749">Árcsökkenési értesítések</translation>
 <translation id="8714939927607906138">Alacsonyabb ár</translation>
 <translation id="8749939518995770034">Lapsor bezárva</translation>
 <translation id="8820741577754260431">Láthatja az árcsökkenéseket a megnyitott lapokon</translation>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
index 91a8c4c7..67c23fe 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -170,6 +170,8 @@
 import org.chromium.chrome.browser.ui.system.StatusBarColorController;
 import org.chromium.chrome.browser.vr.ArDelegateProvider;
 import org.chromium.chrome.browser.vr.VrModuleProvider;
+import org.chromium.chrome.browser.webapps.PwaBottomSheetController;
+import org.chromium.chrome.browser.webapps.PwaBottomSheetControllerProvider;
 import org.chromium.chrome.browser.webapps.addtohomescreen.AddToHomescreenCoordinator;
 import org.chromium.components.bookmarks.BookmarkId;
 import org.chromium.components.bookmarks.BookmarkType;
@@ -2139,8 +2141,19 @@
             }
         } else if (id == R.id.add_to_homescreen_id || id == R.id.add_to_homescreen_menu_id
                 || id == R.id.install_app_id) {
-            AddToHomescreenCoordinator.showForAppMenu(currentTab, this, getWindowAndroid(),
-                    getModalDialogManager(), currentTab.getWebContents(), mMenuItemData);
+            boolean handled = false;
+            if (ChromeFeatureList.isEnabled(ChromeFeatureList.PWA_INSTALL_USE_BOTTOMSHEET)) {
+                PwaBottomSheetController controller =
+                        PwaBottomSheetControllerProvider.from(getWindowAndroid());
+                if (controller != null) {
+                    controller.requestOrExpandBottomSheetInstaller(currentTab.getWebContents());
+                    handled = true;
+                }
+            }
+            if (!handled) {
+                AddToHomescreenCoordinator.showForAppMenu(this, getWindowAndroid(),
+                        getModalDialogManager(), currentTab.getWebContents(), mMenuItemData);
+            }
             RecordUserAction.record("MobileMenuAddToHomescreen");
         } else if (id == R.id.open_webapk_id || id == R.id.menu_open_webapk_id) {
             Context context = ContextUtils.getApplicationContext();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/ui/splashscreen/SplashController.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/ui/splashscreen/SplashController.java
index 2d993632..de26859 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/ui/splashscreen/SplashController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/ui/splashscreen/SplashController.java
@@ -22,7 +22,7 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.app.ChromeActivity;
 import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TwaFinishHandler;
-import org.chromium.chrome.browser.compositor.CompositorView;
+import org.chromium.chrome.browser.compositor.CompositorViewHolder;
 import org.chromium.chrome.browser.customtabs.BaseCustomTabActivity;
 import org.chromium.chrome.browser.customtabs.CustomTabOrientationController;
 import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
@@ -44,6 +44,8 @@
 
 import javax.inject.Inject;
 
+import dagger.Lazy;
+
 /** Shows and hides splash screen for Webapps, WebAPKs and TWAs. */
 @ActivityScope
 public class SplashController
@@ -89,6 +91,7 @@
     private final TabObserverRegistrar mTabObserverRegistrar;
     private final TwaFinishHandler mFinishHandler;
     private final CustomTabActivityTabProvider mTabProvider;
+    private final Lazy<CompositorViewHolder> mCompositorViewHolder;
 
     private SplashDelegate mDelegate;
 
@@ -125,7 +128,8 @@
             ActivityLifecycleDispatcher lifecycleDispatcher,
             TabObserverRegistrar tabObserverRegistrar,
             CustomTabOrientationController orientationController, TwaFinishHandler finishHandler,
-            CustomTabActivityTabProvider tabProvider) {
+            CustomTabActivityTabProvider tabProvider,
+            Lazy<CompositorViewHolder> compositorViewHolder) {
         mActivity = activity;
         mLifecycleDispatcher = lifecycleDispatcher;
         mTabObserverRegistrar = tabObserverRegistrar;
@@ -133,6 +137,7 @@
         mTranslucencyRemovalStrategy = TranslucencyRemoval.NONE;
         mFinishHandler = finishHandler;
         mTabProvider = tabProvider;
+        mCompositorViewHolder = compositorViewHolder;
 
         boolean isWindowInitiallyTranslucent =
                 BaseCustomTabActivity.isWindowInitiallyTranslucent(activity);
@@ -321,8 +326,8 @@
         // Delay hiding the splash screen till the compositor has finished drawing the next frame.
         // Without this callback we were seeing a short flash of white between the splash screen and
         // the web content (crbug.com/734500).
-        CompositorView compositorView = mActivity.getCompositorViewHolder().getCompositorView();
-        compositorView.surfaceRedrawNeededAsync(() -> { animateHideSplash(tab); });
+        mCompositorViewHolder.get().getCompositorView().surfaceRedrawNeededAsync(
+                () -> { animateHideSplash(tab); });
     }
 
     private void removeTranslucency() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabController.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabController.java
index 16f6fef..f1c0b34e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabController.java
@@ -348,7 +348,7 @@
                     (TabReparentingParams) mAsyncTabParamsManager.get().remove(tab.getId());
             mReparentingTaskProvider.get(tab).finish(
                     ReparentingDelegateFactory.createReparentingTaskDelegate(
-                            mActivity.getCompositorViewHolder(), mActivity.getWindowAndroid(),
+                            mCompositorViewHolder.get(), mActivity.getWindowAndroid(),
                             mCustomTabDelegateFactory.get()),
                     (params == null ? null : params.getFinalizeCallback()));
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenCoordinator.java
index 4d5ca371..533f0cf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenCoordinator.java
@@ -14,12 +14,8 @@
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.chrome.browser.banners.AppBannerManager;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
-import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.webapps.AddToHomescreenProperties;
 import org.chromium.chrome.browser.webapps.AddToHomescreenViewDelegate;
-import org.chromium.chrome.browser.webapps.PwaBottomSheetController;
-import org.chromium.chrome.browser.webapps.PwaBottomSheetControllerProvider;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.ui.base.WindowAndroid;
 import org.chromium.ui.modaldialog.ModalDialogManager;
@@ -42,61 +38,51 @@
     ModalDialogManager mModalDialogManager;
     private WindowAndroid mWindowAndroid;
     // May be null during tests.
-    private Tab mTab;
+    WebContents mWebContents;
 
     @VisibleForTesting
-    AddToHomescreenCoordinator(Tab tab, Context activityContext, WindowAndroid windowAndroid,
-            ModalDialogManager modalDialogManager) {
+    AddToHomescreenCoordinator(WebContents webContents, Context activityContext,
+            WindowAndroid windowAndroid, ModalDialogManager modalDialogManager) {
         mActivityContext = activityContext;
         mWindowAndroid = windowAndroid;
         mModalDialogManager = modalDialogManager;
-        mTab = tab;
+        mWebContents = webContents;
     }
 
     /**
      * Starts and shows the add-to-homescreen UI component for the given {@link WebContents}.
      * @return whether add-to-homescreen UI was started successfully.
      */
-    public static boolean showForAppMenu(Tab tab, Context activityContext,
-            WindowAndroid windowAndroid, ModalDialogManager modalDialogManager,
-            WebContents webContents, Bundle menuItemData) {
-        if (ChromeFeatureList.isEnabled(ChromeFeatureList.PWA_INSTALL_USE_BOTTOMSHEET)) {
-            PwaBottomSheetController controller =
-                    PwaBottomSheetControllerProvider.from(windowAndroid);
-            if (controller != null) {
-                controller.requestOrExpandBottomSheetInstaller(webContents);
-                return true;
-            }
-        }
-
+    public static void showForAppMenu(Context activityContext, WindowAndroid windowAndroid,
+            ModalDialogManager modalDialogManager, WebContents webContents, Bundle menuItemData) {
         @StringRes
         int titleId = menuItemData.getInt(AppBannerManager.MENU_TITLE_KEY);
-        return new AddToHomescreenCoordinator(
-                tab, activityContext, windowAndroid, modalDialogManager)
-                .showForAppMenu(webContents, titleId);
+        new AddToHomescreenCoordinator(
+                webContents, activityContext, windowAndroid, modalDialogManager)
+                .showForAppMenu(titleId);
     }
 
     @VisibleForTesting
-    boolean showForAppMenu(WebContents webContents, @StringRes int titleId) {
+    boolean showForAppMenu(@StringRes int titleId) {
         // Don't start if there is no visible URL to add.
-        if (webContents == null || webContents.getVisibleUrl().isEmpty()) {
+        if (mWebContents == null || mWebContents.getVisibleUrl().isEmpty()) {
             return false;
         }
 
-        buildMediatorAndShowDialog().startForAppMenu(webContents, titleId);
+        buildMediatorAndShowDialog().startForAppMenu(mWebContents, titleId);
         return true;
     }
 
     /**
      * Constructs all MVC components on request from the C++ side.
-     * @param tab The current {@link Tab}. Used for accessing activity {@link Context} and
-     * {@link ModalDialogManager}.
+     * @param webContents The {@link WebContents} that initiated the add to homescreen request. Used
+     *         for accessing activity {@link Context} and {@link ModalDialogManager}.
      * @return A C++ pointer to the associated add_to_homescreen_mediator.cc object. This will be
      * used by add_to_homescreen_coordinator.cc to complete the initialization of the mediator.
      */
     @CalledByNative
-    private static long initMvcAndReturnMediator(Tab tab) {
-        WindowAndroid windowAndroid = tab.getWindowAndroid();
+    private static long initMvcAndReturnMediator(WebContents webContents) {
+        WindowAndroid windowAndroid = webContents.getTopLevelNativeWindow();
         if (windowAndroid == null) return 0;
 
         Activity activity = windowAndroid.getActivity().get();
@@ -107,8 +93,8 @@
 
         if (modalDialogManager == null) return 0;
 
-        AddToHomescreenCoordinator coordinator =
-                new AddToHomescreenCoordinator(tab, activity, windowAndroid, modalDialogManager);
+        AddToHomescreenCoordinator coordinator = new AddToHomescreenCoordinator(
+                webContents, activity, windowAndroid, modalDialogManager);
         return coordinator.buildMediatorAndShowDialog().getNativeMediator();
     }
 
@@ -122,8 +108,7 @@
         AddToHomescreenMediator addToHomescreenMediator =
                 new AddToHomescreenMediator(model, mWindowAndroid);
         PropertyModelChangeProcessor.create(model,
-                initView(AppBannerManager.getHomescreenLanguageOption(
-                                 mTab == null ? null : mTab.getWebContents()),
+                initView(AppBannerManager.getHomescreenLanguageOption(mWebContents),
                         addToHomescreenMediator),
                 AddToHomescreenViewBinder::bind);
         return addToHomescreenMediator;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java
index f8767be..8bce2ce94 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java
@@ -7,8 +7,14 @@
 import static androidx.test.espresso.Espresso.onView;
 import static androidx.test.espresso.action.ViewActions.click;
 import static androidx.test.espresso.matcher.RootMatchers.isDialog;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
+import static org.hamcrest.CoreMatchers.allOf;
+import static org.hamcrest.CoreMatchers.is;
+
+import static org.chromium.chrome.test.util.ViewUtils.onViewWaiting;
+
 import androidx.test.filters.LargeTest;
 
 import org.junit.After;
@@ -20,7 +26,6 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.DisableIf;
 import org.chromium.base.test.util.Feature;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -42,6 +47,7 @@
 import org.chromium.components.signin.identitymanager.ConsentLevel;
 import org.chromium.components.user_prefs.UserPrefs;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.ui.test.util.DisableAnimationsTestRule;
 
 /**
  * Tests for ManageSyncSettings.
@@ -52,6 +58,9 @@
     @Rule
     public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule();
 
+    @Rule
+    public final DisableAnimationsTestRule sNoAnimationRule = new DisableAnimationsTestRule();
+
     public final ChromeTabbedActivityTestRule mActivityTestRule =
             new ChromeTabbedActivityTestRule();
 
@@ -111,7 +120,6 @@
     @Test
     @LargeTest
     @Features.EnableFeatures(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)
-    @DisableIf.Build(supported_abis_includes = "x86", message = "https://crbug.com/1142481")
     public void showSignOutDialogBeforeSigningUserOut() {
         mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync();
         final GoogleServicesSettings googleServicesSettings = startGoogleServicesSettings();
@@ -120,6 +128,7 @@
                         GoogleServicesSettings.PREF_ALLOW_SIGNIN);
         Assert.assertTrue("Chrome Signin should be allowed", allowChromeSignin.isChecked());
 
+        onViewWaiting(allOf(is(googleServicesSettings.getView()), isDisplayed()));
         onView(withText(R.string.allow_chrome_signin_title)).perform(click());
         // Accept the sign out Dialog
         onView(withText(R.string.continue_button)).inRoot(isDialog()).perform(click());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenTest.java
index c18b3694..ccc0928 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenTest.java
@@ -42,6 +42,7 @@
 import org.chromium.chrome.test.util.browser.TabLoadObserver;
 import org.chromium.chrome.test.util.browser.TabTitleObserver;
 import org.chromium.chrome.test.util.browser.webapps.WebappTestPage;
+import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 import org.chromium.content_public.common.ContentSwitches;
 import org.chromium.net.test.EmbeddedTestServerRule;
@@ -148,9 +149,9 @@
     private static class TestAddToHomescreenCoordinator extends AddToHomescreenCoordinator {
         private String mTitle;
 
-        TestAddToHomescreenCoordinator(Context context, WindowAndroid windowAndroid,
-                ModalDialogManager modalDialogManager, String title) {
-            super(null, context, windowAndroid, modalDialogManager);
+        TestAddToHomescreenCoordinator(WebContents webContents, Context context,
+                WindowAndroid windowAndroid, ModalDialogManager modalDialogManager, String title) {
+            super(webContents, context, windowAndroid, modalDialogManager);
             mTitle = title;
         }
 
@@ -347,10 +348,10 @@
     private void addShortcutToTab(Tab tab, String title, boolean expectAdded) {
         // Add the shortcut.
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            boolean started = new TestAddToHomescreenCoordinator(mActivity,
-                    mActivity.getWindowAndroid(), mActivity.getModalDialogManager(), title)
-                                      .showForAppMenu(tab.getWebContents(),
-                                              AppMenuVerbiage.APP_MENU_OPTION_ADD_TO_HOMESCREEN);
+            boolean started =
+                    new TestAddToHomescreenCoordinator(tab.getWebContents(), mActivity,
+                            mActivity.getWindowAndroid(), mActivity.getModalDialogManager(), title)
+                            .showForAppMenu(AppMenuVerbiage.APP_MENU_OPTION_ADD_TO_HOMESCREEN);
             Assert.assertEquals(expectAdded, started);
         });
 
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 52c6101..6562c5f 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -2777,6 +2777,12 @@
               =1 {1 third-party cookie is blocked}
               other {# third-party cookies are blocked}}
       </message>
+      <message name="IDS_COOKIE_CONTROLS_DIALOG_TITLE_ALL_BLOCKED" desc="Title of the dialog that allows users to control cookie blocking. Shown when all cookies (as opposed to only third-party ones) are blocked.">
+        {COUNT, plural,
+              =0 {No cookies}
+              =1 {1 cookie is blocked}
+              other {# cookies are blocked}}
+      </message>
       <message name="IDS_COOKIE_CONTROLS_DIALOG_TITLE_OFF" desc="Text shown in the dialog that allows users to control cookie blocking. Shown when cookie blocking was disabled for this specific site.">
         Third-party cookies are allowed on this site
       </message>
diff --git a/chrome/app/generated_resources_grd/IDS_COOKIE_CONTROLS_DIALOG_TITLE_ALL_BLOCKED.png.sha1 b/chrome/app/generated_resources_grd/IDS_COOKIE_CONTROLS_DIALOG_TITLE_ALL_BLOCKED.png.sha1
new file mode 100644
index 0000000..33ca3ef
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_COOKIE_CONTROLS_DIALOG_TITLE_ALL_BLOCKED.png.sha1
@@ -0,0 +1 @@
+1ccb4d03bcd766bbf7bcfcb5fe2ded99d9b7c969
\ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb
index 60d60db8..4ccfcba 100644
--- a/chrome/app/resources/chromium_strings_eu.xtb
+++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -219,7 +219,7 @@
 <translation id="7448255348454382571">Berrabiarazi Chromium OS</translation>
 <translation id="7449453770951226939"><ph name="PAGE_TITLE" /> - Chromium Dev</translation>
 <translation id="7451052299415159299">Chromium-ek webgune honen izenean kamera atzitzeko baimena behar du</translation>
-<translation id="7483335560992089831">Ezin da instalatu unean abian den Chromium-en bertsio bera. Itxi Chromium eta saiatu berriro.</translation>
+<translation id="7483335560992089831">Ezin da instalatu une honetan abian den Chromium-en bertsio bera. Itxi Chromium eta saiatu berriro.</translation>
 <translation id="753534427205733210">{0,plural, =1{1 minutu barru berrabiaraziko da Chromium}other{# minutu barru berrabiaraziko da Chromium}}</translation>
 <translation id="7549178288319965365">Chromium sistema eragileari buruz</translation>
 <translation id="7561906087460245826">Halaber, garbitu Chromium-eko datuak (<ph name="URL" />)</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb
index 4cd94db..4828c8e3 100644
--- a/chrome/app/resources/chromium_strings_iw.xtb
+++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -166,7 +166,7 @@
 <translation id="6281746429495226318">‏התאמה אישית של פרופיל Chromium</translation>
 <translation id="6295779123002464101">‏<ph name="FILE_NAME" /> עלול להיות מסוכן, ולכן Chromium חסם אותו.</translation>
 <translation id="6309712487085796862">‏Chromium משתמש במצלמה שלך.</translation>
-<translation id="6333502561965082103">‏מתבצעת כרגע פעולה אחרת ב-Chromium. נסה שוב מאוחר יותר.</translation>
+<translation id="6333502561965082103">‏מתבצעת כרגע פעולה אחרת ב-Chromium. כדאי לנסות שוב מאוחר יותר.</translation>
 <translation id="6334986366598267305">‏קל יותר כעת להשתמש ב-Chromium באמצעות חשבון Google שלך ובמחשבים משותפים.</translation>
 <translation id="6373523479360886564">‏ברצונך באמת להסיר את התקנת Chromium?</translation>
 <translation id="6403826409255603130">‏Chromium הוא דפדפן אינטרנט המפעיל דפי אינטרנט ואפליקציות במהירות הבזק. זהו דפדפן מהיר, יציב וקל לשימוש שמאפשר לך לגלוש באינטרנט בצורה מאובטחת יותר הודות להגנה מפני תוכנות זדוניות ופישינג המובנית ב-Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_uz.xtb b/chrome/app/resources/chromium_strings_uz.xtb
index b3bf491..692d484 100644
--- a/chrome/app/resources/chromium_strings_uz.xtb
+++ b/chrome/app/resources/chromium_strings_uz.xtb
@@ -124,6 +124,7 @@
 <translation id="4994636714258228724">Chromium foydalanuvchini qo‘shish</translation>
 <translation id="5224391634244552924">Hech qanday parol saqlanmagan. Chromium faqat saqlangan parollaringizni tekshira oladi.</translation>
 <translation id="5277894862589591112">O‘zgarishlarni tatbi qilish uchun Chromium qayta ishga tushirilishi zarur</translation>
+<translation id="5357324149468831780">Bu hisob boshqariladi. Administrator ruxsat berish uchun Chromium profilini talab qiladi. Bu profil har qanday boshqa shaxsiy profildan butunlay ajratiladi. Bu profil ishlatilganda yaratilgan har qanday Chromium maʼlumotlari (bukmarklar, tarix, parollar va boshqa sozlamalar kabi) administrator tomonidan tozalanishi mumkin. <ph name="BEGIN_LINK" />Batafsil<ph name="END_LINK" /></translation>
 <translation id="5358375970380395591">Siz boshqaruvdagi hisobga kiryapsiz va uning administratoriga Chromium profilingizni boshqarishga ruxsat beryapsiz. Ilovalar, xatcho‘plar, brauzer tarixi, parollar va boshqa sozlamalar kabi barcha Chromium ma’lumotlaringiz <ph name="USER_NAME" /> hisobiga biriktiriladi. Siz bu ma’lumotlarni Google hisoblar shaxsiy kabinetidan o‘chirishingiz mumkin, lekin bu ma’lumotlarni boshqa hisob bilan bog‘lay olmaysiz. <ph name="LEARN_MORE" /></translation>
 <translation id="5386450000063123300">Chromium yangilanmoqda (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="538767207339317086">Chromium hisobiga kirishga ruxsat berish</translation>
@@ -138,6 +139,7 @@
 <translation id="5623402015214259806">{0,plural, =0{Chromium uchun yangilanish mavjud}=1{Chromium uchun yangilanish mavjud}other{Chromium uchun yangilanish mavjud (# kun)}}</translation>
 <translation id="5631814766731275228">Chromium profili nomi va rasmi</translation>
 <translation id="5634636535844844681">Chromium brauzeri ishlashi uchun kompyuterda Windows 7 yoki undan yangiroq versiyadagi operatsion tizim o‘rnatilgan bo‘lishi lozim.</translation>
+<translation id="5642268154044585431">Chromium profili kerak</translation>
 <translation id="5653831366781983928">Chromiumni hozir qayta ishga tushiring</translation>
 <translation id="5698481217667032250">Chromium shu tilda ko‘rsatilsin</translation>
 <translation id="5736967399513123100">Chromium himoyalangan mediani ijro etishi uchun Rosetta oʻrnatilishi lozim. Uni hozir oʻrnatishni xohlaysizmi?</translation>
@@ -168,6 +170,7 @@
 <translation id="6309712487085796862">Chromium kamerangizdan foydalanmoqda.</translation>
 <translation id="6333502561965082103">Chromium boshqa amalni bajarmoqda. Keyinroq qayta urinib ko‘ring.</translation>
 <translation id="6334986366598267305">Endi Google hisobida Chromium bilan ishlash yanada qulay bo‘ladi, jumladan umumiy kompyuterlarda ham.</translation>
+<translation id="6345021408165055322">Bu hisob <ph name="MANAGEMENT_DOMAIN" /> tomonidan boshqariladi. Administrator ruxsat berish uchun Chromium profilini talab qiladi. Bu profil har qanday boshqa shaxsiy profildan butunlay ajratiladi. Bu profil ishlatilganda yaratilgan har qanday Chromium maʼlumotlari (bukmarklar, tarix, parollar va boshqa sozlamalar kabi) administrator tomonidan tozalanishi mumkin. <ph name="BEGIN_LINK" />Batafsil<ph name="END_LINK" /></translation>
 <translation id="6373523479360886564">Siz haqiqatdan ham Chromium brauzerini o‘chirib tashlamoqchimisiz?</translation>
 <translation id="6403826409255603130">Chromium - veb sahifalarni va ilovalarni bir necha soniyada ochadigan brauzer. U tez, barqaror va undan foydalanish oson. Chromium brauzerining firibgarlik va zararli dasturlardan saqlovchi ichki o‘rnatilgan himoya vositasi Internetdagi faoliyatni maksimal havfsizlik bilan ta’minlaydi.</translation>
 <translation id="6434250628340475518">Chromium OS tizimi</translation>
@@ -192,6 +195,8 @@
 <translation id="6863361426438995919">Google Pay (Chromium brauzeriga nusxalandi)</translation>
 <translation id="6893813176749746474">Chromium yangilandi, lekin siz undan 30 kun davomida foydalanmadingiz.</translation>
 <translation id="6897548120660295439">Rosetta Chromium brauzerida bu sahifada mediani ijro etish imkoniyatini yoqadi.</translation>
+<translation id="691026815377248078">Chromium ulanishi uchun Bluetooth orqali kirish ruxsati 
+ kerak. <ph name="IDS_BLUETOOTH_DEVICE_CHOOSER_AUTHORIZE_BLUETOOTH_LINK" /></translation>
 <translation id="6964305034639999644">Havolani Chromium &amp;inkognito oynasida ochish</translation>
 <translation id="6978145336957848883">Kuchsiz parollar oson topiladi. Chromium <ph name="BEGIN_LINK" />siz uchun ishonchli parol yaratsin va eslab qolsin<ph name="END_LINK" />.</translation>
 <translation id="6990124437352146030">Bu sayt mikrofoningizdan foydalanishi uchun Chromium brauzeriga ruxsat berishingiz lozim</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index 65c9601..8766649 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Webinhoudtale</translation>
 <translation id="3429275422858276529">Boekmerk hierdie bladsy om dit later maklik te kry</translation>
 <translation id="3432227430032737297">Verwyder alles wat gewys word</translation>
-<translation id="3432757130254800023">Stuur oudio en video na skerms in die plaaslike netwerk</translation>
 <translation id="3432762828853624962">Gedeelde werkers</translation>
 <translation id="3433621910545056227">Oeps! Die stelsel kon nie die toestel se kenmerkeslot by installering vasmaak nie.</translation>
 <translation id="3434272557872943250">As die bykomende Web- en Programaktiwiteit-instelling vir jou kind aangeskakel is, kan hierdie data in hul Google-rekening gestoor word. Kom by families.google.com meer te wete oor hierdie instellings en hoe om hulle te verstel.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470">Het <ph name="NUM" /> oortjie gekry</translation>
 <translation id="8148760431881541277">Beperk aanmelding</translation>
 <translation id="8150259863378108853">Lacros is 'n eksperimentele blaaier. Gee asseblief enige kwessies aan met Hulp &gt; "Gee 'n kwessie aan"</translation>
-<translation id="8151579390896831136">Pasmaak jou profiel, insluitend die naam daarvan</translation>
 <translation id="8151638057146502721">Stel op</translation>
 <translation id="8154790740888707867">Geen lêer nie</translation>
 <translation id="815491593104042026">Oeps! Kon nie staaf nie omdat dit opgestel is om 'n onveilige URL (<ph name="BLOCKED_URL" />) te gebruik. Kontak asseblief jou administrateur.</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">Bestuur deur jou organisasie</translation>
 <translation id="8379878387931047019">Hierdie toestel steun nie die tipe sekuriteitsleutel wat deur hierdie webwerf versoek word nie</translation>
 <translation id="8379991678458444070">Boekmerk hierdie oortjie om vinnig terug te kom hierheen</translation>
-<translation id="8380266723152870797">Vensternaam</translation>
 <translation id="8382913212082956454">Kopieer e-posadres</translation>
 <translation id="8386091599636877289">Kon nie beleid kry nie.</translation>
 <translation id="8386903983509584791">Skandering voltooi</translation>
@@ -6861,7 +6858,6 @@
 <translation id="8859402192569844210">Kon nie diensbepalings laai nie</translation>
 <translation id="8859662783913000679">Ouerrekening</translation>
 <translation id="8862003515646449717">Wissel na 'n vinnige blaaier</translation>
-<translation id="8863140399813345099">Jou toestelsigbaarheid beheer wie met jou kan deel terwyl jou skerm ontsluit is</translation>
 <translation id="8863753581171631212">Maak skakel in nuwe <ph name="APP" /> oop</translation>
 <translation id="8864055848767439877">Deel <ph name="TAB_NAME" /> tans na <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> is van hierdie toestel af verwyder</translation>
@@ -6915,7 +6911,6 @@
 <translation id="8912810933860534797">Aktiveer outoskandering</translation>
 <translation id="8915370057835397490">Laai tans voorstel</translation>
 <translation id="8916476537757519021">Incognitosubraam: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Stel vensternaam</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> se <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Donkergroenblou</translation>
 <translation id="8925458182817574960">Instellings</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 2ad258a..406d10f 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">የድር ይዘት ቋንቋዎች</translation>
 <translation id="3429275422858276529">ይህን ገጽ በቀላሉ በኋላ እንዲያገኙ ዕልባት ያድርጉት</translation>
 <translation id="3432227430032737297">ሁሉም የታዩትን አስወግድ</translation>
-<translation id="3432757130254800023">ኦዲዮ እና ቪዲዮ በአካባቢያዊ አውታረ መረብ ላይ ላሉ ማሳያዎች ላክ</translation>
 <translation id="3432762828853624962">የተጋሩ ሠራተኞች</translation>
 <translation id="3433621910545056227">ውይ!  ስርዓቱ የመሣሪያ ጭነት-ሰዓት አይነታዎች ቁልፉን መመስረት አልተሳካለትም።</translation>
 <translation id="3434272557872943250">የተጨማሪ የድር እና መተግበሪያ እንቅስቃሴ ቅንብር ለልጅዎ በርቶ ከሆነ ይህ ውሂብ ወደ የGoogle መለያቸው ሊቀመጥ ይችላል። families.google.com ላይ ስለእነዚህ ቅንብሮች እና እንዴት እነሱን ማስተካከል እንደሚችሉ የበለጠ ይረዱ።</translation>
@@ -6248,7 +6247,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ትር ተገኝቷል</translation>
 <translation id="8148760431881541277">በመለያ መግባትን ይገድቡ</translation>
 <translation id="8150259863378108853">Lacros የሙከራ አሳሽ ነው። እባክዎ ማናቸውም ችግሮችን በእገዛ &gt; «ችግርን ሪፖርት አድርግ...» ላይ ሪፖርት ያድርጉ</translation>
-<translation id="8151579390896831136">ስሙን ጨምሮ መገለጫዎን ያብጁ</translation>
 <translation id="8151638057146502721">አዋቅር</translation>
 <translation id="8154790740888707867">ምንም ፋይል የለም</translation>
 <translation id="815491593104042026">ውይ! ደህንነቱ አስተማማኝ ያልሆነ ዩአርኤል (<ph name="BLOCKED_URL" />) እንዲጠቀም ተደርጎ ስለተዋቀረ ማረጋገጥ አልተሳካም። እባክዎ አስተዳዳሪዎነ ያግኙ።</translation>
@@ -6439,7 +6437,6 @@
 <translation id="8378714024927312812">በእርስዎ ድርጅት የሚተዳደር</translation>
 <translation id="8379878387931047019">ይህ መሣሪያ በዚህ ድር ጣቢያ የተጠየቀውን የደህንነት ቁልፍ አይነት አይደግፍም</translation>
 <translation id="8379991678458444070">ይህን ትር ዕልባት በማድረግ በፍጥነት ወደዚህ ተመልሰው ይምጡ</translation>
-<translation id="8380266723152870797">የመስኮት ስም</translation>
 <translation id="8382913212082956454">&amp;ኢሜይል አድራሻ ቅዳ</translation>
 <translation id="8386091599636877289">መመሪያ አልተገኘም።</translation>
 <translation id="8386903983509584791">መቃኘት ተጠናቅቋል</translation>
@@ -6865,7 +6862,6 @@
 <translation id="8859402192569844210">የአገልግሎት ውሎች ሊጫኑ አልቻሉም</translation>
 <translation id="8859662783913000679">የወላጅ መለያ</translation>
 <translation id="8862003515646449717">ወደ ፈጣን አሳሽ ቀይር</translation>
-<translation id="8863140399813345099">የእርስዎ የመሣሪያ ታይነት ማያ ገጽዎ ተከፍቶ ሳለ ማን ለእርስዎ ማጋራት እንደሚችል ይቆጣጠራል</translation>
 <translation id="8863753581171631212">አገናኝ በአዲስ <ph name="APP" /> ውስጥ ክፈት</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> ለ <ph name="APP_NAME" /> በማጋራት ላይ</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> ከዚህ መሣሪያ ላይ ተወግዷል</translation>
@@ -6919,7 +6915,6 @@
 <translation id="8912810933860534797">ራስ-ቃኝን አንቃ</translation>
 <translation id="8915370057835397490">የጥቆማ አስተያየት በመጫን ላይ</translation>
 <translation id="8916476537757519021">ማንነት የማያሳውቅ ንዑስ ክፈፍ፦ <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">የመስኮት ስም ያቀናብሩ</translation>
 <translation id="8918637186205009138">የ<ph name="GIVEN_NAME" /> <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">ጠቆር ያለ መካከለኛ አረንጓዴ</translation>
 <translation id="8925458182817574960">&amp;ቅንብሮች</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 1f434b2..96bb19a 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -817,7 +817,7 @@
 <translation id="1879000426787380528">تسجيل الدخول باسم</translation>
 <translation id="1880905663253319515">هل تريد حذف الشهادة "<ph name="CERTIFICATE_NAME" />"؟</translation>
 <translation id="1881445033931614352">تنسيق لوحة المفاتيح</translation>
-<translation id="1881577802939775675">{COUNT,plural, =1{عنصر واحد}zero{# عناصر}two{عنصران}few{# سلع}many{# سلعة}other{# عنصر}}</translation>
+<translation id="1881577802939775675">{COUNT,plural, =1{عنصر واحد}zero{# عناصر}two{عنصران}few{# عناصر}many{# عنصرًا}other{# عنصر}}</translation>
 <translation id="1884013283844450420">الشبكة <ph name="NETWORK_INDEX" /> من <ph name="NETWORK_COUNT" />، الشبكة <ph name="NETWORK_NAME" />، الاتصال</translation>
 <translation id="1884340228047885921">الإعداد الحالي لمستوى ظهور الجهاز هو "بعض جهات الاتصال".</translation>
 <translation id="1884705339276589024">‏تغيير حجم قرص نظام التشغيل Linux</translation>
@@ -1443,7 +1443,7 @@
 <translation id="2604255671529671813">خطأ في اتصال الشبكة</translation>
 <translation id="2606246518223360146">ربط البيانات</translation>
 <translation id="2606454609872547359">‏لا، المتابعة بدون ChromeVox</translation>
-<translation id="2606568927909309675">يتم تلقائيًا إنشاء مقاطع الشرح لملفات الصوت والفيديو باللغة الإنجليزية. وتظل ملفات الصوت ومقاطع الشرح محفوظة على جهازك فقط.</translation>
+<translation id="2606568927909309675">يتم تلقائيًا إنشاء مقاطع الشرح لملفات الصوت والفيديو باللغة الإنجليزية. وتظل ملفات الصوت ومقاطع الشرح محفوظة على جهازك.</translation>
 <translation id="2607101320794533334">معلومات المفتاح العام لصاحب الشهادة</translation>
 <translation id="2609896558069604090">إنشاء اختصارات...</translation>
 <translation id="2609980095400624569">تعذَّر إنشاء اتصال</translation>
@@ -2160,7 +2160,6 @@
 <translation id="3429271624041785769">لغات محتوى الويب</translation>
 <translation id="3429275422858276529">ضَع إشارة على هذه الصفحة لسهولة العثور عليها لاحقًا</translation>
 <translation id="3432227430032737297">إزالة كل العناصر المعروضة</translation>
-<translation id="3432757130254800023">إرسال الإعدادات الصوتية والفيديو لشاشات العرض على الشبكة المحلية</translation>
 <translation id="3432762828853624962">العمال المشتركون</translation>
 <translation id="3433621910545056227">عفوًا!  تعذّر النظام في إنشاء قفل سمات وقت التثبيت بالجهاز.</translation>
 <translation id="3434272557872943250">‏في حال تفعيل إعداد "النشاط الإضافي على الويب وفي التطبيقات" لحسابك الفرعي، قد يتم حفظ هذه البيانات في حسابك على Google. تعرّف على المزيد حول هذه الإعدادات وطريقة ضبطها من خلال families.google.com.</translation>
@@ -2742,7 +2741,7 @@
 <translation id="4047726037116394521">الانتقال إلى الصفحة الرئيسية</translation>
 <translation id="4049783682480068824">{COUNT,plural, =1{‏جهة اتصال واحدة غير متوفِّرة. لاستخدام ميزة "المشاركة عن قرب" مع جهة الاتصال هذه، أضِف عنوان البريد الإلكتروني المرتبط بحساب هذه الجهة على Google إلى جهات اتصالك.}zero{‏# جهة اتصال غير متوفِّرة. لاستخدام ميزة "المشاركة عن قرب" مع جهات الاتصال هذه، أضِف عناوين البريد الإلكتروني المرتبطة بحسابات كل منها على Google إلى جهات اتصالك.}two{‏جهتا اتصال غير متوفِّرتَين. لاستخدام ميزة "المشاركة عن قرب" مع جهتَي الاتصال هاتين، أضِف عنوانَي البريد الإلكتروني المرتبطَين بحساب كل منهما على Google إلى جهات اتصالك.}few{‏# جهات اتصال غير متوفِّرة. لاستخدام ميزة "المشاركة عن قرب" مع جهات الاتصال هذه، أضِف عناوين البريد الإلكتروني المرتبطة بحسابات كل منها على Google إلى جهات اتصالك.}many{‏# جهة اتصال غير متوفِّرة. لاستخدام ميزة "المشاركة عن قرب" مع جهات الاتصال هذه، أضِف عناوين البريد الإلكتروني المرتبطة بحسابات كل منها على Google إلى جهات اتصالك.}other{‏# جهة اتصال غير متوفِّرة. لاستخدام ميزة "المشاركة عن قرب" مع جهات الاتصال هذه، أضِف عناوين البريد الإلكتروني المرتبطة بحسابات كل منها على Google إلى جهات اتصالك.}}</translation>
 <translation id="4050225813016893843">طريقة المصادقة</translation>
-<translation id="4050534976465737778">‏تأكَّد من فتح قفل كلا الجهازَين وقرِّبهما من بعضهما وفعِّل البلوتوث فيهما. وإذا كنت تشارك الملفات مع Chromebook غير مدرَج في جهات اتصالك، يُرجى التأكُّد من تفعيل وضع الظهور في الميزة "مشاركة عن قرب" (يُرجى فتح منطقة الحالة، ثم اختيار وضع الظهور في الميزة "مشاركة عن قرب"). <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
+<translation id="4050534976465737778">‏تأكَّد من فتح قفل كلا الجهازَين وقرِّبهما من بعضهما وفعِّل البلوتوث فيهما. وإذا كنت تشارك الملفات مع جهاز Chromebook غير مدرَج في جهات اتصالك، يُرجى التأكُّد من تفعيل وضع الظهور في الميزة "مشاركة عن قرب" (يُرجى فتح منطقة الحالة، ثم اختيار وضع الظهور في الميزة "مشاركة عن قرب"). <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="4052120076834320548">دقيق</translation>
 <translation id="4054070260844648638">مرئي للجميع</translation>
 <translation id="4056908315660577142">‏لقد وصلت إلى الحدّ الزمني الذي ضبطه أحد الوالدَين لتطبيق <ph name="APP_NAME" /> في Chrome. يمكنك استخدامه لمدة <ph name="TIME_LIMIT" /> غدًا.</translation>
@@ -6250,7 +6249,6 @@
 <translation id="8147900440966275470">تم العثور على <ph name="NUM" /> علامة تبويب.</translation>
 <translation id="8148760431881541277">قصر تسجيل الدخول على مستخدمين محددين</translation>
 <translation id="8150259863378108853">‏Lacros هو متصفِّح تجريبي. يُرجى الإبلاغ عن أي مشاكل من خلال الانتقال إلى "مساعدة" &gt; "الإبلاغ عن مشكلة...".</translation>
-<translation id="8151579390896831136">تخصيص ملفك الشخصي بما في ذلك الاسم</translation>
 <translation id="8151638057146502721">إعداد</translation>
 <translation id="8154790740888707867">لم يتم العثور على الملف</translation>
 <translation id="815491593104042026">‏عفوا! فشلت المصادقة لأنه تم إعدادها لاستخدام عنوان URL غير آمن ( <ph name="BLOCKED_URL" /> ). يرجى الاتصال بالمسؤول.</translation>
@@ -6441,7 +6439,6 @@
 <translation id="8378714024927312812">بإدارة مؤسستك</translation>
 <translation id="8379878387931047019">لا يدعم هذا الجهاز نوع مفتاح الأمان الذي يطلبه هذا الموقع الإلكتروني.</translation>
 <translation id="8379991678458444070">يمكنك الرجوع إلى هنا بسرعة من خلال وضع إشارة مرجعية على علامة التبويب هذه.</translation>
-<translation id="8380266723152870797">اسم النافذة</translation>
 <translation id="8382913212082956454">نسخ عنوان البريد الإل&amp;كتروني</translation>
 <translation id="8386091599636877289">تعذَّر العثور على السياسة.</translation>
 <translation id="8386903983509584791">اكتملت عملية الفحص.</translation>
@@ -6870,7 +6867,6 @@
 <translation id="8859402192569844210">تعذَّر تحميل بنود الخدمة</translation>
 <translation id="8859662783913000679">حساب أحد الوالدَين</translation>
 <translation id="8862003515646449717">التبديل إلى متصفح سريع</translation>
-<translation id="8863140399813345099">يسمح لك إعداد مستوى ظهور الجهاز بتحديد من يمكنه مشاركة الملفات معك عندما تكون شاشة جهازك غير مقفلة.</translation>
 <translation id="8863753581171631212">فتح الرابط في نافذة جديدة في <ph name="APP" /></translation>
 <translation id="8864055848767439877">جارٍ مشاركة <ph name="TAB_NAME" /> مع <ph name="APP_NAME" />.</translation>
 <translation id="8864458770072227512">تمت إزالة <ph name="EMAIL" /> من هذا الجهاز.</translation>
@@ -6924,7 +6920,6 @@
 <translation id="8912810933860534797">تفعيل المسح التلقائي</translation>
 <translation id="8915370057835397490">جارٍ تحميل الاقتراح</translation>
 <translation id="8916476537757519021">الإطار الفرعي للتصفح المتخفي: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">أضِف اسمًا للنافذة</translation>
 <translation id="8918637186205009138">جهاز <ph name="DEVICE_TYPE" /> الخاص بـ <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">أزرق مخضر داكن</translation>
 <translation id="8925458182817574960">&amp;الإعدادات</translation>
@@ -7112,7 +7107,7 @@
 <translation id="9128870381267983090">الاتصال بالشبكة</translation>
 <translation id="9130015405878219958">تم إدخال وضع غير صحيح.</translation>
 <translation id="9131487537093447019">إرسال الرسائل إلى أجهزة البلوتوث واستلامها منها.</translation>
-<translation id="9134119143784876218">‏يتم تلقائيًا إنشاء مقاطع الشرح لملفات الصوت والفيديو باللغة الإنجليزية (هذه الميزة متاحة حاليًا في المتصفّح Chrome فقط). وتظل ملفات الصوت ومقاطع الشرح محفوظة على جهازك فقط.</translation>
+<translation id="9134119143784876218">‏يتم تلقائيًا إنشاء مقاطع الشرح لملفات الصوت والفيديو باللغة الإنجليزية (هذه الميزة متاحة حاليًا في متصفّح Chrome فقط). وتظل ملفات الصوت ومقاطع الشرح محفوظة على جهازك.</translation>
 <translation id="9137013805542155359">إظهار الصفحة الأصلية</translation>
 <translation id="9137157311132182254">محرِّك البحث المفضل</translation>
 <translation id="9137248913990643158">‏يُرجى البدء وتسجيل الدخول إلى Chrome قبل استخدام هذا التطبيق.</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 5f2df61b..4bf805db 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -1043,6 +1043,7 @@
 <translation id="2154710561487035718">URL প্ৰতিলিপি কৰক</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> যেন লাগিছে</translation>
 <translation id="2156294658807918600">সেৱা কৰ্মী: <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">সুৰক্ষা পৰীক্ষা পুনৰ চলাওক</translation>
 <translation id="2157474325782140681">অতিৰিক্ত সুবিধাসমূহ পাবলৈ এই Chromebookৰ সৈতে কাম কৰিবলৈ ডিজাইন কৰা এটা Dell ড’কিং ষ্টেচন ব্যৱহাৰ কৰক।</translation>
 <translation id="215753907730220065">পূৰ্ণ স্ক্ৰীণৰ পৰা বাহিৰ হওক</translation>
 <translation id="2157875535253991059">এই পৃষ্ঠাটো এতিয়া সম্পূর্ণ স্ক্ৰীণত আছে।</translation>
@@ -1987,6 +1988,7 @@
 <translation id="3225319735946384299">ক’ড ছাইনিং</translation>
 <translation id="3227137524299004712">মাইক্ৰ’ফ’ন</translation>
 <translation id="3233271424239923319">Linux এপ্‌ আৰু ফাইলসমূহ বেক আপ কৰক</translation>
+<translation id="3238192140106069382">সংযোগ আৰু সত্যাপন কৰি থকা হৈছে</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />ৰ বাবে সময়সীমা আঁতৰোৱা হৈছে</translation>
 <translation id="3241680850019875542">পেক কৰিবলৈ এক্সটেনশ্বনটোৰ ৰুট ডাইৰেক্ট’ৰীটো বাছনি কৰক। কোনো এক্সটেনশ্বন আপডে’ট কৰিবলৈ লগতে পুনৰ ব্যৱহাৰ কৰিবলৈ ব্যক্তিগত মূল ফাইলটো বাছনি কৰক।</translation>
 <translation id="3244294424315804309">ধ্বনি মিউট কৰিয়েই ৰাখক</translation>
@@ -2150,7 +2152,6 @@
 <translation id="3429271624041785769">ৱেবৰ সমলৰ ভাষা</translation>
 <translation id="3429275422858276529">পৰৱর্তী সময়ত এই পৃষ্ঠাটো সহজে বিচাৰি পাবলৈ ইয়াক বুকমার্ক কৰক</translation>
 <translation id="3432227430032737297">দেখুওৱা সকলো আঁতৰাওক</translation>
-<translation id="3432757130254800023">স্থানীয় নেটৱর্কৰ ডিছপ্লে’লৈ অডিঅ’ আৰু ভিডিঅ’ পঠিয়াওক</translation>
 <translation id="3432762828853624962">শ্বেয়াৰ কৰা ৱৰ্কাৰ</translation>
 <translation id="3433621910545056227">আমি দুঃখিত!  ছিষ্টেমটোৱে ডিভাইচটোৰ ইনষ্টলেশ্বনৰ সময়ৰ এট্রিবিউট লক স্থাপন কৰিব নোৱাৰিলে।</translation>
 <translation id="3434272557872943250">যদি আপোনাৰ শিশুৰ বাবে অতিৰিক্ত ৱেব আৰু এপৰ কার্যকলাপ অন কৰা হয়, তেন্তে এই ডেটা তেওঁৰ Google একাউণ্টত ছেভ কৰা হ’ব পাৰে। এই ছেটিংসমূহৰ বিষয়ে আৰু সেইবোৰ কেনেদৰে মিলাব পাৰি সেই বিষয়ে জানিবলৈ families.google.comলৈ যাওক।</translation>
@@ -6229,7 +6230,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> টা টেব বিচাৰি পোৱা গৈছে</translation>
 <translation id="8148760431881541277">ছাইন ইন সীমিত কৰক</translation>
 <translation id="8150259863378108853">Lacros হৈছে এটা পৰীক্ষামূলক ব্ৰাউজাৰ। অনুগ্ৰহ কৰি সহায় &gt; "সমস্যাৰ অভিযোগ দিয়ক..."ৰ জৰিয়তে সমস্যাৰ অভিযোগ দিয়ক</translation>
-<translation id="8151579390896831136">আপোনাৰ প্ৰ'ফাইলটোৰ নামকে ধৰি সেইটো কাষ্টমাইজ কৰক</translation>
 <translation id="8151638057146502721">কনফিগাৰ</translation>
 <translation id="8154790740888707867">কোনো ফাইল নাই</translation>
 <translation id="815491593104042026">আমি দুঃখিত!  বিশ্বাসযোগ্যতা প্ৰমাণ কৰিব পৰা নগ’ল কাৰণ এইটো কোনো অসুৰক্ষিত URLৰ (<ph name="BLOCKED_URL" />) ক্ষেত্ৰত ব্যৱহাৰ কৰিবলৈ কনফিগাৰ কৰা হৈছিল। অনুগ্ৰহ কৰি আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।</translation>
@@ -6420,7 +6420,6 @@
 <translation id="8378714024927312812">আপোনাৰ প্ৰতিষ্ঠানৰ দ্বাৰা পৰিচালিত</translation>
 <translation id="8379878387931047019">এই ৱেবছাইটটোৱে অনুৰোধ কৰা সুৰক্ষা সম্পৰ্কীয় চাবি ডিভাইচটোৱে সমৰ্থন নকৰে</translation>
 <translation id="8379991678458444070">এই টেবটো বুকমার্ক কৰি পৰৱর্তী সময়ত ক্ষিপ্ৰভাৱে খোলক</translation>
-<translation id="8380266723152870797">ৱিণ্ড’ৰ নাম</translation>
 <translation id="8382913212082956454">&amp;ইমেইল ঠিকনা প্ৰতিলিপি কৰক</translation>
 <translation id="8386091599636877289">নীতিটো বিচাৰি পোৱা নগ’ল।</translation>
 <translation id="8386903983509584791">স্কেন সম্পূর্ণ হ’ল</translation>
@@ -6845,7 +6844,6 @@
 <translation id="8859402192569844210">সেৱাৰ চৰ্তাৱলী ল’ড কৰিব পৰা নগ’ল</translation>
 <translation id="8859662783913000679">অভিভাৱকৰ একাউণ্ট</translation>
 <translation id="8862003515646449717">কোনো দ্ৰুত ব্ৰাউজাৰ ব্যৱহাৰ কৰক</translation>
-<translation id="8863140399813345099">আপোনাৰ ডিভাইচৰ দৃশ্যমানতাই আপোনাৰ ডিভাইচটোৰ স্ক্ৰীন আনলক থকা অৱস্থাত আপোনাৰ সৈতে কোনে শ্বেয়াৰ কৰিব পাৰে সেয়া নিয়ন্ত্ৰণ কৰে</translation>
 <translation id="8863753581171631212">লিংক নতুন <ph name="APP" />ত খোলক</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" />ক <ph name="APP_NAME" />লৈ শ্বেয়াৰ কৰি থকা হৈছে</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" />ক এই ডিভাইচটোৰ পৰা আঁতৰোৱা হৈছে</translation>
@@ -6899,7 +6897,6 @@
 <translation id="8912810933860534797">স্বয়ং-স্কেন সক্ষম কৰক</translation>
 <translation id="8915370057835397490">পৰামর্শ ল'ড কৰি থকা হৈছে</translation>
 <translation id="8916476537757519021">ইনক’গনিট’ ছাবফ্ৰেম: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ৱিণ্ড’ৰ নাম ছেট কৰক</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />ৰ <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">গাঢ় সেউজ-নীলা</translation>
 <translation id="8925458182817574960">&amp;ছেটিংসমূহ</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 6554415..c488164 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -2149,7 +2149,6 @@
 <translation id="3429271624041785769">Veb məzmun dilləri</translation>
 <translation id="3429275422858276529">Səhifəni sonradan asanlıqla tapmaq üçün əlfəcin qoyun</translation>
 <translation id="3432227430032737297">Bütün Göstərilənləri Silin</translation>
-<translation id="3432757130254800023">Yerli şəbəkədə görüntülənməsi üçün audio və video göndərin</translation>
 <translation id="3432762828853624962">Birgə İşləyənlər</translation>
 <translation id="3433621910545056227">Sistem cihaz quraşdırma vaxtının atribut kilidini yarada bilmədi.</translation>
 <translation id="3434272557872943250">Uşağınız üçün əlavə Veb və Tətbiq Fəaliyyəti ayarı aktiv edilərsə, bu data onun Google Hesabında yadda saxlanıla bilər. families.google.com ünvanında bu ayarlar və onları tənzimləmək haqqında ətraflı məlumat əldə edin.</translation>
@@ -6235,7 +6234,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> Tab tapılıb</translation>
 <translation id="8148760431881541277">Girişi məhdudlaşdırın</translation>
 <translation id="8150259863378108853">Lacros eksperimental brauzerdir. Yardım &gt; "Problem barədə bildirin..." vasitəsilə problemlər barədə bildirin</translation>
-<translation id="8151579390896831136">Profilinizi, eləcə də onun adını fərdiləşdirin</translation>
 <translation id="8151638057146502721">Konfiqurasiya edin</translation>
 <translation id="8154790740888707867">Fayl yoxdur</translation>
 <translation id="815491593104042026">Doğrulama alınmadı, çünki (<ph name="BLOCKED_URL" />) güvənsiz URL istifadəsi üçün ayarlanıb. Lütfən, administratorunuz ilə əlaqə saxlayın.</translation>
@@ -6426,7 +6424,6 @@
 <translation id="8378714024927312812">Təşkilatınız tərəfindən idarə olunur</translation>
 <translation id="8379878387931047019">Bu cihazda veb sayt tərəfindən tələb edilən təhlükəsizlik açarının növü dəstəklənmir</translation>
 <translation id="8379991678458444070">Tabı əlfəcinlərə əlavə etməklə asanlıqla geri qayıdın</translation>
-<translation id="8380266723152870797">Pəncərə adı</translation>
 <translation id="8382913212082956454">E-poçt ünvanını kopyalayın</translation>
 <translation id="8386091599636877289">Qayda tapılmadı.</translation>
 <translation id="8386903983509584791">Skan tamamlandı</translation>
@@ -6849,7 +6846,6 @@
 <translation id="8859402192569844210">Xidmət Şərtlərini yükləmək mümkün olmadı</translation>
 <translation id="8859662783913000679">Valideyn hesabı</translation>
 <translation id="8862003515646449717">Sürətli brauzerə keçin</translation>
-<translation id="8863140399813345099">Cihazın görünmə dərəcəsi ekan kilidli olduqda Sizinlə paylaşım edə bilənlərə nəzarət edir</translation>
 <translation id="8863753581171631212">Linki yeni <ph name="APP" /> tətbiqində açın</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> <ph name="APP_NAME" /> ilə paylaşılır</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> bu cihazdan silindi</translation>
@@ -6903,7 +6899,6 @@
 <translation id="8912810933860534797">Avtomatik skanı aktiv edin</translation>
 <translation id="8915370057835397490">Təklif yüklənir</translation>
 <translation id="8916476537757519021">Gizli Altkadr: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Pəncərə adını ayarlayın</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> adlı istifadəçinin <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Tünd-firuzəyi</translation>
 <translation id="8925458182817574960">&amp;Ayarlar</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index 74bd04d..d1d6a776 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -2157,7 +2157,6 @@
 <translation id="3429271624041785769">Мовы вэб-змесціва</translation>
 <translation id="3429275422858276529">Дадайце гэту старонку ў закладкі, каб палегчыць яе пошук у далейшым</translation>
 <translation id="3432227430032737297">Выдаліць усе паказаныя</translation>
-<translation id="3432757130254800023">Адпраўка аўдыя і відэа на дысплэі ў лакальнай сетцы</translation>
 <translation id="3432762828853624962">Сумесныя рабочыя працэсы</translation>
 <translation id="3433621910545056227">Памылка.  Сістэме не ўдалося заблакіраваць атрыбуты часу ўсталявання на прыладзе.</translation>
 <translation id="3434272557872943250">Калі для вашага дзіцяці ўключана налада "Дадатковыя дзеянні ў інтэрнэце і праграмах", то адпаведныя даныя могуць захоўвацца ў яго Уліковым запісе Google. Даведацца больш пра гэтыя налады і іх рэгуліроўку можна на сайце families.google.com.</translation>
@@ -6248,7 +6247,6 @@
 <translation id="8147900440966275470">Знойдзена ўкладак: <ph name="NUM" /></translation>
 <translation id="8148760431881541277">Абмежаваць уваход</translation>
 <translation id="8150259863378108853">Lacros — гэта эксперыментальны браўзер. Просім вас паведамляць пра любыя праблемы праз меню "Даведка &gt; Паведаміць аб праблеме..."</translation>
-<translation id="8151579390896831136">Наладзьце свой профіль. Можна пачаць з увядзення новага імені</translation>
 <translation id="8151638057146502721">Наладзіць</translation>
 <translation id="8154790740888707867">Файла няма</translation>
 <translation id="815491593104042026">Памылка!  Адбыўся збой аўтэнтыфікацыі з-за выкарыстання небяспечнага URL-адраса (<ph name="BLOCKED_URL" />). Звяжыцеся са сваім адміністратарам.</translation>
@@ -6439,7 +6437,6 @@
 <translation id="8378714024927312812">Пад кіраваннем вашай арганізацыі</translation>
 <translation id="8379878387931047019">Гэта прылада не падтрымлівае ключы бяспекі запытанага гэтым вэб-сайтам тыпу</translation>
 <translation id="8379991678458444070">Дадаўшы гэту ўкладку ў закладкі, вы будзеце мець да яе хуткі доступ</translation>
-<translation id="8380266723152870797">Назва акна</translation>
 <translation id="8382913212082956454">Скапіраваць &amp;адрас электроннай пошты</translation>
 <translation id="8386091599636877289">Палітыка не знойдзена.</translation>
 <translation id="8386903983509584791">Пошук завершаны</translation>
@@ -6867,7 +6864,6 @@
 <translation id="8859402192569844210">Не ўдалося загрузіць Умовы выкарыстання</translation>
 <translation id="8859662783913000679">Бацькоўскі ўліковы запіс</translation>
 <translation id="8862003515646449717">Пераключыцца на хуткі браўзер</translation>
-<translation id="8863140399813345099">Налады бачнасці прылады вызначаюць, хто можа абагульваць з вамі даныя, калі экран вашай прылады разблакіраваны</translation>
 <translation id="8863753581171631212">Адкрыць спасылку ў новым акне праграмы <ph name="APP" /></translation>
 <translation id="8864055848767439877">Укладка "<ph name="TAB_NAME" />" абагульваецца з <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Уліковы запіс <ph name="EMAIL" /> выдалены з гэтай прылады</translation>
@@ -6921,7 +6917,6 @@
 <translation id="8912810933860534797">Уключыць аўтаматычнае сканіраванне</translation>
 <translation id="8915370057835397490">Загрузка прапановы</translation>
 <translation id="8916476537757519021">Субфрэйм інкогніта: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Дайце назву акну</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />: <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Цёмна-бірузовы</translation>
 <translation id="8925458182817574960">&amp;Налады</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 20feec9..e406d460 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -2151,7 +2151,6 @@
 <translation id="3429271624041785769">Езици за уеб съдържанието</translation>
 <translation id="3429275422858276529">Запазете отметка към тази страница, за да я намирате лесно по-късно</translation>
 <translation id="3432227430032737297">Премахване на всички показани</translation>
-<translation id="3432757130254800023">Изпращане на аудио и видео до дисплеи в локалната мрежа</translation>
 <translation id="3432762828853624962">Споделени изпълнители</translation>
 <translation id="3433621910545056227">Ами сега!  Системата не успя да заключи атрибутите за времето за инсталиране за устройството.</translation>
 <translation id="3434272557872943250">Ако настройката „Допълнителна активност в мрежата и приложенията“ е включена за детето ви, тези данни може да се запазват в профила му в Google. На адрес families.google.com можете да научите повече за тези настройки и как да ги коригирате.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470">Бе открит <ph name="NUM" /> раздел</translation>
 <translation id="8148760431881541277">Лимитиране на влизането в профил</translation>
 <translation id="8150259863378108853">Lacros е експериментален браузър. Моля, подавайте сигнали за проблеми, като отворите „Помощ“ &gt; „Подаване на сигнал за проблем...“</translation>
-<translation id="8151579390896831136">Персонализиране на потребителския ви профил, включително името му</translation>
 <translation id="8151638057146502721">Конфигуриране</translation>
 <translation id="8154790740888707867">Няма файл</translation>
 <translation id="815491593104042026">Ами сега! Удостоверяването не бе успешно, защото конфигурираният за целта URL адрес (<ph name="BLOCKED_URL" />) не е защитен. Моля, свържете се с администратора си.</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">Управлява се от организацията ви</translation>
 <translation id="8379878387931047019">Устройството не поддържа типа ключ за сигурност, заявен от този уебсайт</translation>
 <translation id="8379991678458444070">Връщайте се тук бързо, като запазите отметка към този раздел</translation>
-<translation id="8380266723152870797">Име на прозореца</translation>
 <translation id="8382913212082956454">Копиране на име&amp;йл адреса</translation>
 <translation id="8386091599636877289">Правилото не е намерено.</translation>
 <translation id="8386903983509584791">Сканирането завърши</translation>
@@ -6861,7 +6858,6 @@
 <translation id="8859402192569844210">Общите условия не се заредиха</translation>
 <translation id="8859662783913000679">Профил на родител</translation>
 <translation id="8862003515646449717">Преминете към бърз браузър</translation>
-<translation id="8863140399813345099">Видимостта на устройството ви управлява това, кой може да споделя с вас, докато екранът ви е отключен</translation>
 <translation id="8863753581171631212">Отваряне на връзката в нов прозорец на <ph name="APP" /></translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> се споделя с(ъс) <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Профилът <ph name="EMAIL" /> бе премахнат от това устройство</translation>
@@ -6915,7 +6911,6 @@
 <translation id="8912810933860534797">Активиране на автоматичното сканиране</translation>
 <translation id="8915370057835397490">Предложението се зарежда</translation>
 <translation id="8916476537757519021">Подрамка в режим „инкогнито“: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Задайте име на прозореца</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> на <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Тъмно синьо-зелено</translation>
 <translation id="8925458182817574960">&amp;Настройки</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index f45a1a0..956b9bef 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -219,6 +219,7 @@
 <translation id="1234808891666923653">সার্ভিস ওয়ার্কার্স</translation>
 <translation id="1235458158152011030">পরিচিত নেটওয়ার্কগুলি</translation>
 <translation id="123578888592755962">ডিস্ক পূর্ণ</translation>
+<translation id="1235924639474699896">{COUNT,plural, =1{টেক্সট}one{#টি টেক্সট}other{#টি টেক্সট}}</translation>
 <translation id="1239594683407221485">Files অ্যাপে ডিভাইসের কন্টেন্ট ঘুরে দেখুন।</translation>
 <translation id="124116460088058876">আরও ভাষা</translation>
 <translation id="1241753985463165747">চালু করলে বর্তমান ওয়েবসাইটের সব ডেটা পড়ে ও পরিবর্তন করে</translation>
@@ -441,6 +442,7 @@
 <translation id="1486096554574027028">পাসওয়ার্ড খুঁজুন</translation>
 <translation id="1487335504823219454">চালু - কাস্টম সেটিংস</translation>
 <translation id="1489664337021920575">অন্য বিকল্প বেছে নিন</translation>
+<translation id="1490491397986065675">আপনার অ্যাডমিনিস্ট্রেটরের বক্তব্য হল "<ph name="CUSTOM_MESSAGE" />"।</translation>
 <translation id="1492417797159476138">আপনি আগেই এই সাইটের জন্য ইউজারনেমটি সেভ করেছেন</translation>
 <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" />এর জন্য প্রতীক্ষারত...</translation>
 <translation id="1495677929897281669">ট্যাবে ফিরে যান</translation>
@@ -812,6 +814,7 @@
 <translation id="1879000426787380528">কোন আইডি দিয়ে সাইন-ইন করবেন</translation>
 <translation id="1880905663253319515">সার্টিফিকেট মুছবেন "<ph name="CERTIFICATE_NAME" />"?</translation>
 <translation id="1881445033931614352">কীবোর্ডের লেআউট</translation>
+<translation id="1881577802939775675">{COUNT,plural, =1{আইটেম}one{#টি আইটেম}other{#টি আইটেম}}</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" />টির মধ্যে <ph name="NETWORK_INDEX" /> নম্বর নেটওয়ার্ক, <ph name="NETWORK_NAME" />, কানেক্ট করুন</translation>
 <translation id="1884340228047885921">বর্তমানে 'ডিভাইসের দৃশ্যমানতা' সেটিংয়ে কয়েকটি পরিচিতি সেট করা আছে</translation>
 <translation id="1884705339276589024">Linux ডিস্কের সাইজ বদলান</translation>
@@ -990,6 +993,7 @@
 <translation id="2099686503067610784">সার্ভার সার্টিফিকেট "<ph name="CERTIFICATE_NAME" />" মুছবেন?</translation>
 <translation id="2100273922101894616">অটো সাইন-ইন</translation>
 <translation id="2101225219012730419">ভার্সন:</translation>
+<translation id="2108349519800154983">{COUNT,plural, =1{ফোন নম্বর}one{#টি ফোন নম্বর}other{#টি ফোন নম্বর}}</translation>
 <translation id="211144231511833662">টাইপগুলি মুছে দিন</translation>
 <translation id="2111670510994270194">ডানদিকে নতুন ট্যাব</translation>
 <translation id="21133533946938348">ট্যাব পিন করুন</translation>
@@ -1042,6 +1046,7 @@
 <translation id="2154710561487035718">ইউআরএল কপি করুন</translation>
 <translation id="2155772377859296191">মনে হচ্ছে <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="2156294658807918600">পরিষেবা কর্মী: <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">আবার নিরাপত্তা সংক্রান্ত পরীক্ষা চালান</translation>
 <translation id="2157474325782140681">অতিরিক্ত ফিচার পেতে, এই Chromebook-এর সাথে মানানসই একটি Dell-এর ডকিং স্টেশন ব্যবহার করুন।</translation>
 <translation id="215753907730220065">পূর্ণ স্ক্রীণ বন্ধ করুন</translation>
 <translation id="2157875535253991059">পৃষ্ঠাটি এখন পূর্ণ পর্দায় রয়েছে</translation>
@@ -1285,6 +1290,7 @@
 <translation id="2435457462613246316">পাসওয়ার্ড দেখান</translation>
 <translation id="2435579801172349831">সবগুলি (<ph name="URL_COUNT" />টি) ছদ্মবেশী উইন্ডোতে খুলুন</translation>
 <translation id="2436186046335138073">সমস্ত <ph name="PROTOCOL" /> লিঙ্কগুলিকে খুলতে <ph name="HANDLER_HOSTNAME" />কে সক্ষম করবেন?</translation>
+<translation id="2440366609912234507">{COUNT,plural, =1{অ্যাপ}one{#টি অ্যাপ}other{#টি অ্যাপ}}</translation>
 <translation id="2440604414813129000">উ&amp;ত্স দেখুন</translation>
 <translation id="244231003699905658">ভুল অ্যাড্রেস। অ্যাড্রেস চেক করে আবার চেষ্টা করে দেখুন।</translation>
 <translation id="2442916515643169563">টেক্সট শ্যাডো</translation>
@@ -1433,6 +1439,7 @@
 <translation id="2604255671529671813">নেটওয়ার্ক সংযোগে সমস্যা</translation>
 <translation id="2606246518223360146">ডেটা লিঙ্ক করুন</translation>
 <translation id="2606454609872547359">না, ChromeVox ছাড়াই চালিয়ে যান</translation>
+<translation id="2606568927909309675">'লাইভ ক্যাপশন' ফিচারের মাধ্যমে ইংরেজিতে অডিও এবং ভিডিওর ক্যাপশন অটোমেটিক তৈরি হয়। অডিও এবং ক্যাপশন আপনার ডিভাইসেই থাকে।</translation>
 <translation id="2607101320794533334">বিষয় সর্বজনীন কী তথ্য</translation>
 <translation id="2609896558069604090">শর্টকাটগুলি তৈরি করুন...</translation>
 <translation id="2609980095400624569">কানেক্ট করা যায়নি</translation>
@@ -1697,6 +1704,7 @@
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
 <translation id="2889064240420137087">এর সাথে লিঙ্ক খুলুন...</translation>
 <translation id="2889925978073739256">আনস্যান্ডবক্সড প্লাগ ইনগুলি অবরুদ্ধ করা অবিরত রাখুন</translation>
+<translation id="2891922230654533301">আপনি কি <ph name="APP_NAME" />-এ সাইন-ইন করার জন্য আপনার ডিভাইস ব্যবহার করতে চান?</translation>
 <translation id="2893168226686371498">ডিফল্ট ব্রাউজার</translation>
 <translation id="2894757982205307093">গ্রুপে নতুন ট্যাব যোগ করুন</translation>
 <translation id="289644616180464099">সিম কার্ড লক করা আছে</translation>
@@ -1982,6 +1990,7 @@
 <translation id="3225319735946384299">Code Signing</translation>
 <translation id="3227137524299004712">মাইক্রোফোন</translation>
 <translation id="3233271424239923319">Linux অ্যাপ ও ফাইল ব্যাক-আপ করুন</translation>
+<translation id="3238192140106069382">কানেক্ট এবং যাচাই করা হচ্ছে</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> ক্ষেত্রে প্রয়োগ করা সময়সীমা সরানো হয়েছে</translation>
 <translation id="3241680850019875542">প্যাক করার জন্য এক্সটেনশনের রুট ডিরেক্টরিটি নির্বাচন করুন৷ কোন এক্সটেনশন আপডেট করতে, আবার ব্যবহার করার জন্য ব্যক্তিগত কী ফাইলটিও নির্বাচন করুন৷</translation>
 <translation id="3244294424315804309">সাউন্ড মিউট করে রাখুন</translation>
@@ -2008,6 +2017,7 @@
 <translation id="3269069891205016797">আপনি সাইন-আউট করলে ডিভাইসটি থেকে আপনার তথ্য সরানো হবে৷</translation>
 <translation id="3269093882174072735">ছবি লোড করুন</translation>
 <translation id="3269612321104318480">হালকা নীলাভ সবুজ ও সাদা</translation>
+<translation id="3269689705184377744">{COUNT,plural, =1{ফাইল}one{#টি ফাইল}other{#টি ফাইল}}</translation>
 <translation id="326999365752735949">ভিন্ন ডাউনলোড হচ্ছে</translation>
 <translation id="3270965368676314374">আপনার কম্পিউটার থেকে ফটো, সঙ্গীত ও অন্যান্য মিডিয়া পড়ুন, পরিবর্তন করুন এবং মুছুন</translation>
 <translation id="327147043223061465">সমস্ত কুকি এবং সাইট ডেটা দেখুন</translation>
@@ -2144,7 +2154,6 @@
 <translation id="3429271624041785769">ওয়েব কন্টেন্টের ভাষা</translation>
 <translation id="3429275422858276529">এই পৃষ্ঠা পরে সহজে খুঁজে পেতে বুকমার্ক করুন</translation>
 <translation id="3432227430032737297">দেখানো সবগুলি সরান</translation>
-<translation id="3432757130254800023">স্থানীয় নেটওয়ার্কের প্রদর্শনগুলিতে অডিও এবং ভিডিও পাঠান</translation>
 <translation id="3432762828853624962">শেয়ার্ড ওয়ার্কার</translation>
 <translation id="3433621910545056227">ওহো! সিস্টেমটি ডিভাইস ইনস্টলেশন-সময় অ্যাট্রিবিউটস লক স্থাপন করতে ব্যর্থ হয়েছে৷</translation>
 <translation id="3434272557872943250">অতিরিক্ত 'ওয়েব ও অ্যাপ অ্যাক্টিভিটি' সেটিং আপনার সন্তানের ডিভাইসের জন্য চালু করা থাকলে, এই ডেটা তাদের Google অ্যাকাউন্টে সেভ করা হতে পারে। এই সেটিং এবং এটি কীভাবে অ্যাডজাস্ট করবেন সেই সম্পর্কে families.google.com লিঙ্কে গিয়ে আরও জানুন।</translation>
@@ -2303,6 +2312,7 @@
 <translation id="3600792891314830896">সাউন্ড প্লে করা হয় যে সাইটগুলিতে সেগুলি মিউট করুন</translation>
 <translation id="360180734785106144">নতুন ফিচার উপলভ্য হলেই তা অফার করে</translation>
 <translation id="3602290021589620013">প্রিভিউ</translation>
+<translation id="3602870520245633055">প্রিন্ট ও স্ক্যান করুন</translation>
 <translation id="3603622770190368340">নেটওয়ার্ক সার্টিফিকেট প্রাপ্ত করুন</translation>
 <translation id="3604193429970465812">সেকেন্ডারি অ্যাকাউন্ট</translation>
 <translation id="3604713164406837697">ওয়ালপেপার পরিবর্তন করুন</translation>
@@ -2318,6 +2328,7 @@
 <translation id="3615579745882581859">এই <ph name="FILE_NAME" /> স্ক্যান করা হচ্ছে।</translation>
 <translation id="3616741288025931835">ব্রাউজ করা ডেটা সাফ করুন...</translation>
 <translation id="3617891479562106823">ব্যাকগ্রাউন্ডগুলি উপলভ্য নয়। পরে আবার চেষ্টা করুন।</translation>
+<translation id="3618800144880386250">{COUNT,plural, =1{ভিডিও}one{#টি ভিডিও}other{#টি ভিডিও}}</translation>
 <translation id="3619115746895587757">ক্যাপুচিনো</translation>
 <translation id="362333465072914957">চার্টার্ড অ্যাকাউন্ট্যান্টের জন্য অপেক্ষা করা হচ্ছে যাতে তিনি একটি সার্টিফিকেট ইস্যু করে দেন</translation>
 <translation id="3624567683873126087">ডিভাইস আনলক করে Google অ্যাকাউন্টে সাইন-ইন করুন</translation>
@@ -2726,6 +2737,7 @@
 <translation id="4047726037116394521">'হোম' স্ক্রিনে যান</translation>
 <translation id="4049783682480068824">{COUNT,plural, =1{#টি পরিচিতি উপলভ্য নেই। তার সাথে 'নিয়ারবাই শেয়ার' ফিচার ব্যবহার করতে, তার Google অ্যাকাউন্টের সাথে যুক্ত ইমেল আইডি আপনার পরিচিতিতে যোগ করুন।}one{#টি পরিচিতি উপলভ্য নেই। তাদের সাথে 'নিয়ারবাই শেয়ার' ফিচার ব্যবহার করতে, তাদের Google অ্যাকাউন্টের সাথে যুক্ত ইমেল আইডিগুলি আপনার পরিচিতিতে যোগ করুন।}other{#টি পরিচিতি উপলভ্য নেই। তাদের সাথে 'নিয়ারবাই শেয়ার' ফিচার ব্যবহার করতে, তাদের Google অ্যাকাউন্টের সাথে যুক্ত ইমেল আইডিগুলি আপনার পরিচিতিতে যোগ করুন।}}</translation>
 <translation id="4050225813016893843">যাচাইকরণের পদ্ধতি</translation>
+<translation id="4050534976465737778">এটি নিশ্চিত করুন যেন উভয় ডিভাইস আনলক থাকে ও পরস্পরের কাছাকাছি থাকে এবং তার সাথে যেন ব্লুটুথও চালু করা থাকে। যদি আপনি এমন কোনও Chromebook-এর সাথে ফাইল শেয়ার করেন যেটি আপনার পরিচিতিতে নেই, তাহলে এটি নিশ্চিত করে নিন ডিভাইসে নিয়ারবাই শেয়ার ফিচার যেন চালু করা থাকে ('স্ট্যাটাস এরিয়া' বিকল্প খুলুন, তারপরে 'নিয়ারবাই শেয়ার' ফিচার চালু করুন)। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="4052120076834320548">অতি ক্ষুদ্র</translation>
 <translation id="4054070260844648638">সবাই দেখতে পাবে</translation>
 <translation id="4056908315660577142"><ph name="APP_NAME" />-এর জন্য আপনার অভিভাবক যে সময়সীমা সেট করেছেন তা পার হয়ে গেছে। আগামীকাল আপনি আবার এটি <ph name="TIME_LIMIT" />-এর জন্য ব্যবহার করতে পারবেন।</translation>
@@ -2960,6 +2972,7 @@
 <translation id="4364327530094270451">ফুটি</translation>
 <translation id="4364567974334641491"><ph name="APP_NAME" /> একটি উইন্ডো শেয়ার করছে।</translation>
 <translation id="4364830672918311045">বিজ্ঞপ্তিগুলি প্রদর্শন করুন</translation>
+<translation id="4366138410738374926">প্রিন্ট করার প্রক্রিয়া শুরু করা হয়েছে</translation>
 <translation id="437004882363131692"><ph name="DEVICE_TYPE" />-এর থেকে পরামর্শ, অফার ও বিভিন্ন আপডেট পান এবং মতামত শেয়ার করুন। যেকোনও সময় আনসাবস্ক্রাইব করুন।</translation>
 <translation id="4370425812909262207">কার্ট লুকানো হয়েছে। কোনও পরিবর্তন করলে তবেই সেটি দেখা যাবে।</translation>
 <translation id="4370975561335139969">আপনার লেখা ইমেল আইডি এবং পাসওয়ার্ড মিলছে না</translation>
@@ -3147,6 +3160,7 @@
 <translation id="4568025708905928793">একটি নিরাপত্তা কী লাগবে</translation>
 <translation id="4568213207643490790">দুঃখিত, এই ডিভাইসে Google অ্যাকাউন্টস অনুমোদিত নয়।</translation>
 <translation id="4569747168316751899">কখন নিষ্ক্রিয়</translation>
+<translation id="4569830245132310845">{COUNT,plural, =1{ঠিকানা}one{#টি ঠিকানা}other{#টি ঠিকানা}}</translation>
 <translation id="4570387585180509432">ঠিকানা, ফোন নম্বর এবং আরও অনেক কিছু</translation>
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />"-এ কানেক্ট করার সময় যাচাইকরণ বাতিল করা হয়েছে৷</translation>
 <translation id="4572779512957829735">আপনার নিরাপত্তা কীয়ের পিনটি লিখুন</translation>
@@ -3206,6 +3220,7 @@
 <translation id="4635444580397524003">Linux ব্যাক-আপ রিস্টোর করা হয়ে গেছে।</translation>
 <translation id="4636930964841734540">তথ্য</translation>
 <translation id="4637083375689622795">আরও বিকল্প, <ph name="EMAIL" /></translation>
+<translation id="4637252186848840278">{COUNT,plural, =1{টেক্সট}one{#টি টেক্সট}other{#টি টেক্সট}}</translation>
 <translation id="4638930039313743000">ADB ডিবাগিং চালু করতে চান</translation>
 <translation id="4641539339823703554">Chrome সিস্টেমের সময় সেট করতে পারেনি। অনুগ্রহ করে নিচে সময় চেক করুন এবং প্রয়োজনে এটি সংশোধন করুন।</translation>
 <translation id="4642769377300286600">মোবাইল প্রোফাইল ইনস্টল করা হচ্ছে, <ph name="NETWORK_COUNT" />টির মধ্যে <ph name="NETWORK_INDEX" /> নম্বর নেটওয়ার্ক, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" /></translation>
@@ -3221,10 +3236,12 @@
 <translation id="4651484272688821107">ডেমো মোড রিসোর্স সহ অনলাইন কম্পোনেন্ট লোড করা যায়নি।</translation>
 <translation id="4652935475563630866">ক্যামেরা সেটিংয়ে পরিবর্তন করতে হলে, Parallels Desktop আবার লঞ্চ করতে হবে। আগে কাজ চালিয়ে যাওয়ার জন্য, Parallels Desktop আবার লঞ্চ করুন।</translation>
 <translation id="4653405415038586100">Linux কনফিগার করার সময় কোনও সমস্যা হয়েছে</translation>
+<translation id="4654236001025007561">আপনার আশেপাশের Chromebooks ও Android ডিভাইসের সাথে ফাইল শেয়ার করুন</translation>
 <translation id="4657914796247705218">TrackPoint-এর স্পিড</translation>
 <translation id="465878909996028221">ব্রাউজার রিডাইরেক্টের জন্য শুধুমাত্র http, https ও ফাইল প্রটোকল কাজ করে।</translation>
 <translation id="4659077111144409915">প্রাথমিক অ্যাকাউন্ট</translation>
 <translation id="4659126640776004816">আপনার Google অ্যাকাউন্টে সাইন-ইন করলে এই ফিচারটি চালু হয়ে যাবে।</translation>
+<translation id="4660465405448977105">{COUNT,plural, =1{ছবি}one{#টি ছবি}other{#টি ছবি}}</translation>
 <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" ভার্সনটি হওয়া উচিত ছিল, কিন্তু ভার্সনটি হল "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">রিসাইজ করা হচ্ছে</translation>
 <translation id="4661407454952063730">অ্যাপ ডেটা হল পরিচিতি, মেসেজ এবং ফটোর মতো যেকোনও ডেটা যা কোনও অ্যাপ (ডেভেলপার সেটিংসের উপরে ভিত্তি করে) সেভ করে রাখে।</translation>
@@ -3325,6 +3342,7 @@
 <translation id="4794810983896241342"><ph name="BEGIN_LINK" />আপনার অ্যাডমিনিস্ট্রেটর<ph name="END_LINK" /> আপডেটগুলি ম্যানেজ করে</translation>
 <translation id="479536056609751218">Webpage, HTML Only</translation>
 <translation id="4798236378408895261"><ph name="BEGIN_LINK" />ব্লুটুথ লগ<ph name="END_LINK" /> যোগ করুন (Google ইন্টারনাল)</translation>
+<translation id="4798543057539040565">{COUNT,plural, =1{আইটেম}one{#টি আইটেম}other{#টি আইটেম}}</translation>
 <translation id="4801448226354548035">অ্যাকাউন্টগুলি লুকান</translation>
 <translation id="4801512016965057443">মোবাইল ডেটা রোমিংয়ের অনুমতি দিন</translation>
 <translation id="4804818685124855865">সংযোগ বিচ্ছিন্ন</translation>
@@ -3755,6 +3773,7 @@
 <translation id="531118851858162334">এর আগে Google-এর বিভিন্ন পরিষেবা ব্যবহার করার সময় আপনার অ্যাক্টিভিটির উপর ভিত্তি করে এই আইটেমটি দেখানো হচ্ছে। <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> লিঙ্কে গিয়ে আপনার ডেটা দেখতে, মুছে দিতে এবং সেটিংস পরিবর্তন করতে পারবেন।</translation>
 <translation id="5311304534597152726">এই নামে সাইন-ইন করা হচ্ছে</translation>
 <translation id="5311565231560644461">কোনও সাইটকে ভার্চুয়াল রিয়েলিটি ডিভাইস ও ডেটা ব্যবহার করতে দেবেন না</translation>
+<translation id="5312876166662946389">{COUNT,plural, =1{ছবি}one{#টি ছবি}other{#টি ছবি}}</translation>
 <translation id="5314381603623123224">৩১ মার্চ থেকে Chrome-এর 'পরিষেবার শর্তাবলী'-তে পরিবর্তন করা হবে</translation>
 <translation id="5315738755890845852">অতিরিক্ত সেকেন্ড ব্র্যাকেট: <ph name="ERROR_LINE" /></translation>
 <translation id="5317780077021120954">সেভ করুন</translation>
@@ -3820,6 +3839,7 @@
 <translation id="5390677308841849479">গাঢ় লাল ও কমলা</translation>
 <translation id="5390743329570580756">এর জন্য পাঠান</translation>
 <translation id="5392192690789334093">বিজ্ঞপ্তি পাঠানোর অনুমতি দেওয়া হয়েছে</translation>
+<translation id="5393761864111565424">{COUNT,plural, =1{লিঙ্ক}one{#টি লিঙ্ক}other{#টি লিঙ্ক}}</translation>
 <translation id="5397794290049113714">আপনি</translation>
 <translation id="5398497406011404839">লুকানো বুকমার্ক</translation>
 <translation id="5398572795982417028">পৃষ্ঠা সীমার বাইরের উল্লেখ, সীমা হলো <ph name="MAXIMUM_PAGE" /></translation>
@@ -4348,6 +4368,7 @@
 <translation id="6011074160056912900">ইথারনেট নেটওয়ার্ক</translation>
 <translation id="6011193465932186973">আঙ্গুলের ছাপ</translation>
 <translation id="6011449291337289699">সাইট ডেটা সাফ করুন</translation>
+<translation id="6013027779243312217">আপনার অডিও এবং ভিডিওর জন্য ক্যাপশন পান</translation>
 <translation id="6015796118275082299">বছর</translation>
 <translation id="6016178549409952427">অতিরিক্ত কন্টেন্ট থাকা মোট <ph name="TOTAL_ELEMENTS" />টি এলিমেন্টের মধ্যে <ph name="CURRENT_ELEMENT" /> নম্বর এলিমেন্টে যান</translation>
 <translation id="6016551720757758985">পূর্ববর্তী সংস্করণে ফিরে যাওয়া সহ পাওয়ারওয়াশ নিশ্চিত করুন</translation>
@@ -4857,6 +4878,7 @@
 <translation id="6605847144724004692">এখনও কোনও ব্যবহারকারী রেট করেনি</translation>
 <translation id="6607831829715835317">আরও সরঞ্জা&amp;ম</translation>
 <translation id="6607890859198268021"><ph name="DOMAIN" /> আগে থেকেই <ph name="USER_EMAIL" /> ম্যানেজ করছে। অন্য Google অ্যাকাউন্ট থেকে অভিভাবকীয় নিয়ন্ত্রণ ব্যবহার করতে চাইলে, সেট আপ করার পরে সাইন-আউট করুন এবং সাইন-ইন স্ক্রিনে "ব্যক্তিকে যোগ করুন" বিকল্প বেছে নিন।</translation>
+<translation id="6609478180749378879">আপনি 'ছদ্মবেশী মোড' থেকে বেরিয়ে আসার পরেই সাইন-ইন সংক্রান্ত ডেটা এই ডিভাইসে স্টোর করা হবে। আপনি আবার পরে এই ওয়েবসাইটে আপনার ডিভাইস দিয়ে সাইন-ইন করতে পারবেন।</translation>
 <translation id="6611972847767394631">এখানে আপনার ট্যাবগুলি দেখুন</translation>
 <translation id="6612358246767739896">সুরক্ষিত কন্টেন্ট</translation>
 <translation id="6615455863669487791">আমাকে দেখান</translation>
@@ -4875,6 +4897,7 @@
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> এ আপলোড করা হয়েছে</translation>
 <translation id="6630043285902923878">USB ডিভাইস খোঁজা হচ্ছে...</translation>
 <translation id="6630752851777525409">আপনার পক্ষ থেকে একটি সার্টিফিকেট প্রমাণীকৃত করতে <ph name="EXTENSION_NAME" /> সেটিতে স্থায়ী অ্যাক্সেস চায়।</translation>
+<translation id="6635362468090274700">ডিভাইস দেখতে না পাওয়া পর্যন্ত কেউই আপনার সাথে শেয়ার করতে পারবে না।<ph name="BR" /><ph name="BR" />সাময়িকভাবে নিজের ডিভাইস দেখাতে, 'স্ট্যাটাস এরিয়া' বিকল্প খুলুন, তারপরে 'নিয়ারবাই দৃশ্যমানতা' ফিচার চালু করুন।</translation>
 <translation id="6635944431854494329">সেটিংস &gt; অ্যাডভান্সড &gt; নিজে থেকে Google-এ ডায়গনস্টিক ও ব্যবহারের ডেটা পাঠান বিকল্পে গিয়ে মালিক এই ফিচারটি নিয়ন্ত্রণ করতে পারেন।</translation>
 <translation id="6635956300022133031">পাঠ্য থেকে ভাষ্য ভয়েস বেছে নিন এবং কাস্টমাইজ করুন</translation>
 <translation id="6636588250634969791">পরবর্তী ধাপে যাওয়ার আগে সিম কার্ড ঢোকান</translation>
@@ -5026,6 +5049,7 @@
 <translation id="6811332638216701903">DHCP হোস্টনেম</translation>
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" />-কে রুট হিসাবে চালনা করা যাবে না৷</translation>
 <translation id="6812841287760418429">পরিবর্তন রাখুন</translation>
+<translation id="681584224457905309">{COUNT,plural, =1{ফাইল}one{#টি ফাইল}other{#টি ফাইল}}</translation>
 <translation id="6817174620439930047">যখন কোনো সাইট MIDI ডিভাইসগুলি অ্যাক্সেস করার জন্য সিস্টেমের বিশিষ্ট বার্তাগুলি ব্যবহার করতে চায় তখন জিজ্ঞাসা করুন (প্রস্তাবিত)</translation>
 <translation id="6818198425579322765">অনুবাদ করার জন্য পৃষ্ঠার ভাষা</translation>
 <translation id="6818802132960437751">অ্যান্টিভাইরাস অন্তর্ভুক্ত</translation>
@@ -5046,6 +5070,7 @@
 <translation id="6835762382653651563">আপনার <ph name="DEVICE_TYPE" /> আপডেট করার জন্য দয়া করে ইন্টারনেটে সংযুক্ত হোন।</translation>
 <translation id="6838034009068684089">কোনও সাইট আপনার স্ক্রিনে উইন্ডো খুলে রাখতে চাইলে অনুমতি নিতে বলুন (সাজেস্ট করা হয়েছে)</translation>
 <translation id="6838694093138907871">কোডটি সঠিক নয়। আবার চেষ্টা করুন।</translation>
+<translation id="6838860780238890144">{COUNT,plural, =1{ফোন নম্বর}one{#টি ফোন নম্বর}other{#টি ফোন নম্বর}}</translation>
 <translation id="6839225236531462745">সার্টিফিকেট মুছতে সমস্যা</translation>
 <translation id="6839916869147598086">সাইন-ইন পরিবর্তন করা হয়েছে</translation>
 <translation id="6840155290835956714">পাঠানোর আগে জিজ্ঞাসা করুন</translation>
@@ -5151,6 +5176,7 @@
 <translation id="6955446738988643816">পপআপ সংবীক্ষণ</translation>
 <translation id="6955535239952325894">ম্যানেজ করা ব্রাউজারে এই সেটিং কাজ করে না</translation>
 <translation id="6957044667612803194">এই নিরাপত্তা কী-তে পিন কাজ করে না</translation>
+<translation id="6957914043905853560">{COUNT,plural, =1{লিঙ্ক}one{#টি লিঙ্ক}other{#টি লিঙ্ক}}</translation>
 <translation id="6960507406838246615">Linux আপডেট করা দরকার</translation>
 <translation id="696103774840402661">এই <ph name="DEVICE_TYPE" /> থেকে সব ব্যবহারকারীর সমস্ত ফাইল ও স্থানীয় ডেটা স্থায়ীভাবে মুছে ফেলা হয়েছে।</translation>
 <translation id="6964390816189577014">হিরো</translation>
@@ -6059,6 +6085,7 @@
 <translation id="797394244396603170">কোন ডিভাইসে ফাইল শেয়ার করবেন তা বেছে নিন</translation>
 <translation id="7973962044839454485">একটি ভুল ইউজারনেম বা পাসওয়ার্ডের কারণে PPP যাচাই করা যায়নি৷</translation>
 <translation id="7974566588408714340"><ph name="EXTENSIONNAME" /> ব্যবহার করার জন্য আবার চেষ্টা করুন</translation>
+<translation id="7974713334845253259">ডিফল্ট রঙ</translation>
 <translation id="7974936243149753750">ওভারস্ক্যান</translation>
 <translation id="7975504106303186033">আপনাকে এই Chrome Education ডিভাইসটি একটি এডুকেশন অ্যাকাউন্টে এনরোল করতে হবে। নতুন অ্যাকাউন্টে সাইন-আপ করতে, g.co/workspace/edusignup লিঙ্কে যান।</translation>
 <translation id="7978412674231730200">ব্যক্তিগত কী</translation>
@@ -6216,7 +6243,6 @@
 <translation id="8147900440966275470"><ph name="NUM" />টি ট্যাব পাওয়া গেছে</translation>
 <translation id="8148760431881541277">সাইন-ইন করা সীমিত করুন</translation>
 <translation id="8150259863378108853">Lacros হল একটি পরীক্ষামূলক ব্রাউজার। 'সহায়তা' &gt; "সমস্যার ব্যাপারে অভিযোগ জানান..." বিকল্পে গিয়ে যেকোনও সমস্যার ব্যাপারে অভিযোগ জানান</translation>
-<translation id="8151579390896831136">নাম সহ প্রোফাইল এডিট করুন</translation>
 <translation id="8151638057146502721">কনফিগার করুন</translation>
 <translation id="8154790740888707867">কোনো ফাইল নেই</translation>
 <translation id="815491593104042026">ওহো! এটি নিরাপদ নয় এমন একটি URL (<ph name="BLOCKED_URL" />) ব্যবহার করার জন্য কনফিগার করার কারণে যাচাই করা যায়নি। অনুগ্রহ করে অ্যাডমিনিস্ট্রেটরের সঙ্গে যোগাযোগ করুন।</translation>
@@ -6224,6 +6250,7 @@
 <translation id="8157704005178149728">তত্ত্বাবধান সেট-আপ করা হচ্ছে</translation>
 <translation id="8158117992543756526"><ph name="MONTH_AND_YEAR" /> থেকে, এই ডিভাইসটিতে সফ্টওয়্যার ও নিরাপত্তা সংক্রান্ত অটোমেটিক আপডেট আসা বন্ধ হয়ে গেছে। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="816055135686411707">সেটিং সার্টিফিকেট আস্থায় ত্রুটি</translation>
+<translation id="8160775796528709999">সেটিংসে গিয়ে 'লাইভ ক্যাপশন' ফিচার চালু করে আপনার অডিও এবং ভিডিওতে ক্যাপশন দেখুন</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />, <ph name="TIME_REMAINING" /></translation>
 <translation id="8161293209665121583">ওয়েব পৃষ্ঠার রিডার মোড</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{ট্যাবটি নতুন উইন্ডোতে খুলুন}one{ট্যাবগুলি নতুন উইন্ডোতে খুলুন}other{ট্যাবগুলি নতুন উইন্ডোতে খুলুন}}</translation>
@@ -6348,6 +6375,7 @@
 <translation id="8300011035382349091">এই ট্যাবের জন্য বুকমার্ক এডিট করুন</translation>
 <translation id="8300374739238450534">মধ্যরাতের নীল</translation>
 <translation id="8300849813060516376">OTASP ব্যর্থ</translation>
+<translation id="8303616404642252802">{COUNT,plural, =1{ঠিকানা}one{#টি ঠিকানা}other{#টি ঠিকানা}}</translation>
 <translation id="8304383784961451596">আপনার কাছে এই ডিভাইস ব্যবহার করার অনুমতি নেই। সাইন-ইনের জন্য অনুমতি পেতে অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন অথবা Family Link-এর তত্ত্বাবধানে থাকা কোনও Google অ্যাকাউন্ট দিয়ে সাইন-ইন করো।</translation>
 <translation id="8308179586020895837"><ph name="HOST" /> আপনার ক্যামেরা অ্যাক্সেস  করতে চায় কিনা জিজ্ঞাসা করুন</translation>
 <translation id="830868413617744215">বিটা</translation>
@@ -6405,7 +6433,6 @@
 <translation id="8378714024927312812">আপনার প্রতিষ্ঠানের দ্বারা ম্যানেজ করা</translation>
 <translation id="8379878387931047019">এই ওয়েবসাইটটি খুলতে যে নিরাপত্তা কী প্রয়োজন সেটি এই ডিভাইসে কাজ করে না</translation>
 <translation id="8379991678458444070">এই ট্যাবটি বুকমার্ক করে রাখুন যাতে আপনি এটি চটপট খুলতে পারেন</translation>
-<translation id="8380266723152870797">উইন্ডোর নাম</translation>
 <translation id="8382913212082956454">ও ইমেল অ্যাড্রেস কপি করুন</translation>
 <translation id="8386091599636877289">নীতি খুঁজে পাওয়া যায়নি।</translation>
 <translation id="8386903983509584791">স্ক্যান করা সম্পন্ন হয়েছে</translation>
@@ -6646,6 +6673,7 @@
 <translation id="867085395664725367">সার্ভারে সাময়িক সমস্যা হয়েছে।</translation>
 <translation id="8673026256276578048">ওয়েবে খুঁজুন...</translation>
 <translation id="8673383193459449849">সার্ভার সমস্যা হয়েছে</translation>
+<translation id="8676152597179121671">{COUNT,plural, =1{ভিডিও}one{#টি ভিডিও}other{#টি ভিডিও}}</translation>
 <translation id="8676374126336081632">ইনপুট সাফ করুন</translation>
 <translation id="8676770494376880701">নিম্ন শক্তির চার্জার সংযুক্ত করা হয়েছে</translation>
 <translation id="8677212948402625567">সবগুলি আড়াল করুন...</translation>
@@ -6830,7 +6858,6 @@
 <translation id="8859402192569844210">পরিষেবার শর্তাবলী লোড করা যায়নি</translation>
 <translation id="8859662783913000679">অভিভাবকের অ্যাকাউন্ট</translation>
 <translation id="8862003515646449717">একটি দ্রুত ব্রাউজারে স্যুইচ করুন</translation>
-<translation id="8863140399813345099">'ডিভাইসের দৃশ্যমানতা' ফিচার ব্যবহার করে আপনার স্ক্রিন আনলক থাকাকালীন কারা আপনার সাথে ফাইল শেয়ার করতে পারবেন তা নিয়ন্ত্রণ করা যায়</translation>
 <translation id="8863753581171631212">নতুন <ph name="APP" />-এ লিঙ্ক খুলুন</translation>
 <translation id="8864055848767439877"><ph name="APP_NAME" />-এর সাথে <ph name="TAB_NAME" /> শেয়ার করা হচ্ছে</translation>
 <translation id="8864458770072227512">এই ডিভাইস থেকে <ph name="EMAIL" /> সরিয়ে দেওয়া হয়েছে</translation>
@@ -6884,7 +6911,6 @@
 <translation id="8912810933860534797">অটো-স্ক্যান চালু করুন</translation>
 <translation id="8915370057835397490">লোড করার প্রস্তাব</translation>
 <translation id="8916476537757519021">ছদ্মবেশী সাবফ্রেম: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">উইন্ডোর নাম সেট করুন</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />-এর <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">গাঢ় নীলাভ সবুজ</translation>
 <translation id="8925458182817574960">&amp;সেটিংস</translation>
@@ -7072,6 +7098,7 @@
 <translation id="9128870381267983090">নেটওয়ার্কে সংযোগ করুন</translation>
 <translation id="9130015405878219958">ভুল মোড দেওয়া হয়েছে৷</translation>
 <translation id="9131487537093447019">ব্লুটুথ ডিভাইসগুলি থেকে বার্তা পাঠান ও গ্রহণ করুন।</translation>
+<translation id="9134119143784876218">'লাইভ ক্যাপশন' ফিচারের মাধ্যমে ইংরেজিতে অডিও এবং ভিডিওর ক্যাপশন অটোমেটিক তৈরি হয় (বর্তমানে এই সুবিধা শুধু Chrome ব্রাউজারে ব্যবহার করা যায়)। অডিও এবং ক্যাপশন আপনার ডিভাইসেই থাকে।</translation>
 <translation id="9137013805542155359">প্রকৃত রূপ দেখান</translation>
 <translation id="9137157311132182254">বেছে নেওয়া সার্চ ইঞ্জিন</translation>
 <translation id="9137248913990643158">এই অ্যাপ্লিকেশানটি ব্যবহার করার আগে অনুগ্রহ করে শুরু করুন এবং Chrome এ প্রবেশ করুন।</translation>
@@ -7119,6 +7146,7 @@
 <translation id="9179524979050048593">সাইন-ইন স্ক্রিনে ইউজারনেম</translation>
 <translation id="9180281769944411366">এতে কয়েক মিনিট সময় লাগতে পারে। Linux কন্টেনার শুরু করা হচ্ছে।</translation>
 <translation id="9180380851667544951">সাইটটি আপনার স্ক্রিন শেয়ার করতে পারে</translation>
+<translation id="918352324374649435">{COUNT,plural, =1{অ্যাপ}one{#টি অ্যাপ}other{#টি অ্যাপ}}</translation>
 <translation id="9186963452600581158">আপনার সন্তানের Google অ্যাকাউন্ট ব্যবহার করে সাইন-ইন করুন</translation>
 <translation id="9188732951356337132">ব্যবহার এবং ডায়াগনস্টিক ডেটা পাঠান। এখন এই ডিভাইসটি নিজে থেকেই Google-এ ডায়াগনিস্টিক, ডিভাইস এবং অ্যাপ ব্যবহারের ডেটা পাঠাচ্ছে। এটি আপনার সন্তানকে শনাক্ত করতে ব্যবহার করা হবে না এবং সিস্টেম ও অ্যাপের স্থিতিশীলতা এবং অন্যান্য উন্নতিতে সাহায্য করবে। ব্যবহারকারীদের কিছু সম্মিলিত ডেটা Google অ্যাপ এবং Android ডেভেলপারদের মতো পার্টনারদের কাজে লাগবে। অতিরিক্ত ওয়েব ও অ্যাপ অ্যাক্টিভিটি সেটিংটি আপনার সন্তানের ডিভাইসের জন্য চালু করা থাকলে, এই ডেটা তাদের Google অ্যাকাউন্টে সেভ করা হতে পারে। <ph name="BEGIN_LINK2" />আরও জানুন<ph name="END_LINK2" /></translation>
 <translation id="9198090666959937775">নিরাপত্তা কী হিসেবে আপনার Android ফোন ব্যবহার করুন</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 1d8cfa8..c93beae 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -2156,7 +2156,6 @@
 <translation id="3429271624041785769">Jezici web sadržaja</translation>
 <translation id="3429275422858276529">Označite ovu stranicu kako biste je kasnije lakše pronašli</translation>
 <translation id="3432227430032737297">Ukloni sve prikazano</translation>
-<translation id="3432757130254800023">Slati audio i video ekranima na lokalnoj mreži</translation>
 <translation id="3432762828853624962">Dijeljeni radnici</translation>
 <translation id="3433621910545056227">Ups!  Sistem nije uspio uspostaviti zaključavanje atributa za vrijeme instalacije na uređaju.</translation>
 <translation id="3434272557872943250">Ako je za vaše dijete uključena postavka za dodatnu Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na Google računu djeteta. Na stranici families.google.com saznajte više o ovim postavkama i kako ih prilagoditi.</translation>
@@ -6248,7 +6247,6 @@
 <translation id="8147900440966275470">Pronađen je sljedeći broj kartica: <ph name="NUM" /></translation>
 <translation id="8148760431881541277">Ograniči prijavu</translation>
 <translation id="8150259863378108853">Lacros je ekperimentalni preglednik. Prijavite probleme u odjeljku Pomoć &gt; "Prijavite problem..."</translation>
-<translation id="8151579390896831136">Prilagodite profil, uključujući ime profila</translation>
 <translation id="8151638057146502721">Konfiguriraj</translation>
 <translation id="8154790740888707867">Nema fajla</translation>
 <translation id="815491593104042026">Ups!  Autentifikacija nije uspjela jer je konfigurirana da koristi nesigurni URL (<ph name="BLOCKED_URL" />). Obratite se svom administratoru.</translation>
@@ -6439,7 +6437,6 @@
 <translation id="8378714024927312812">Pod upravljanjem vaše organizacije</translation>
 <translation id="8379878387931047019">Ovaj uređaj ne podržava vrstu sigurnosnog ključa koji je zatražila ova web lokacija</translation>
 <translation id="8379991678458444070">Označite karticu da se lakše vratite</translation>
-<translation id="8380266723152870797">Naziv prozora</translation>
 <translation id="8382913212082956454">Kopiraj adresu &amp;e-pošte</translation>
 <translation id="8386091599636877289">Pravilo nije pronađeno.</translation>
 <translation id="8386903983509584791">Skeniranje je dovršeno</translation>
@@ -6866,7 +6863,6 @@
 <translation id="8859402192569844210">Učitavanje Uslova korištenja usluge nije uspjelo</translation>
 <translation id="8859662783913000679">Roditeljski račun</translation>
 <translation id="8862003515646449717">Prebacite se na brži preglednik</translation>
-<translation id="8863140399813345099">Vidljivost vašeg uređaja kontrolira ko s vama može dijeliti sadržaj dok je ekran otključan</translation>
 <translation id="8863753581171631212">Otvori link u novoj aplikaciji <ph name="APP" /></translation>
 <translation id="8864055848767439877">Dijeljenje kartice <ph name="TAB_NAME" /> s aplikacijom <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Adresa <ph name="EMAIL" /> je uklonjena iz ovog uređaja</translation>
@@ -6920,7 +6916,6 @@
 <translation id="8912810933860534797">Omogući automatsko skeniranje</translation>
 <translation id="8915370057835397490">Učitavanje prijedloga</translation>
 <translation id="8916476537757519021">Podokvir anonimnog načina: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Postavite naziv prozora</translation>
 <translation id="8918637186205009138">Uređaj <ph name="DEVICE_TYPE" /> koji koristi <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Tamnotirkizna</translation>
 <translation id="8925458182817574960">&amp;Postavke</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 168f954..3c0538ca 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">Idiomes del contingut web</translation>
 <translation id="3429275422858276529">Afegeix aquesta pàgina a les adreces d'interès per trobar-la fàcilment més endavant</translation>
 <translation id="3432227430032737297">Suprimeix totes les que es mostren</translation>
-<translation id="3432757130254800023">Enviar àudio i vídeo a les visualitzacions de la xarxa local</translation>
 <translation id="3432762828853624962">Treballadors compartits</translation>
 <translation id="3433621910545056227">El sistema no ha pogut establir el bloqueig dels atributs del temps d'instal·lació del dispositiu.</translation>
 <translation id="3434272557872943250">Si l'opció Activitat al web i en aplicacions addicional està activada per al teu fill, és possible que aquestes dades es desin al seu Compte de Google. Per obtenir més informació sobre aquestes opcions de configuració i sobre com pots modificar-les, ves a families.google.com.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470">S'ha trobat <ph name="NUM" /> pestanya</translation>
 <translation id="8148760431881541277">Limita l'inici de sessió</translation>
 <translation id="8150259863378108853">Lacros és un navegador experimental. Informa de qualsevol problema des d'Ajuda &gt; Informa d'un problema...</translation>
-<translation id="8151579390896831136">Personalitza el teu perfil, inclòs el nom</translation>
 <translation id="8151638057146502721">Configura</translation>
 <translation id="8154790740888707867">No hi ha cap fitxer</translation>
 <translation id="815491593104042026">L'autenticació ha fallat perquè s'ha configurat per utilitzar un URL no segur (<ph name="BLOCKED_URL" />). Contacteu amb l'administrador.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Gestionat per la teva organització</translation>
 <translation id="8379878387931047019">Aquest dispositiu no admet el tipus de clau de seguretat sol·licitat per aquest lloc web</translation>
 <translation id="8379991678458444070">Afegeix aquesta pestanya a les adreces d'interès per poder-hi tornar ràpidament</translation>
-<translation id="8380266723152870797">Nom de la finestra</translation>
 <translation id="8382913212082956454">Copia l'&amp;adreça electrònica</translation>
 <translation id="8386091599636877289">No s'ha trobat la política.</translation>
 <translation id="8386903983509584791">S'ha completat la cerca</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">No s'han pogut carregar les condicions del servei</translation>
 <translation id="8859662783913000679">Compte parental</translation>
 <translation id="8862003515646449717">Canvia a un navegador ràpid</translation>
-<translation id="8863140399813345099">La visibilitat del dispositiu determina qui pot compartir contingut amb tu quan tens la pantalla desbloquejada</translation>
 <translation id="8863753581171631212">Obre l'enllaç en una finestra nova de l'aplicació <ph name="APP" /></translation>
 <translation id="8864055848767439877">S'està compartint <ph name="TAB_NAME" /> amb <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> s'ha suprimit d'aquest dispositiu</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Activa la cerca automàtica</translation>
 <translation id="8915370057835397490">S'estan carregant els suggeriments</translation>
 <translation id="8916476537757519021">Submarc d'incògnit: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Defineix el nom de la finestra</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> de <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Verd blavós fosc</translation>
 <translation id="8925458182817574960">&amp;Configuració</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index db1cf52..d62eb1c 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Jazyky webového obsahu</translation>
 <translation id="3429275422858276529">Přidejte si tuto stránku do záložek, abyste ji později snáze našli</translation>
 <translation id="3432227430032737297">Odstranit všechny zobrazené</translation>
-<translation id="3432757130254800023">Odesílat zvuk a video na displeje v místní síti</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Jejda! Systému se nepodařilo nastavit zámek atributů installation-time zařízení.</translation>
 <translation id="3434272557872943250">Pokud má dítě zapnuté dodatečné nastavení Aktivita na webu a v aplikacích, mohou se tato data ukládat do jeho účtu Google. Další informace o těchto nastaveních a o tom, jak je upravit, naleznete na stránce families.google.com.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470">Byla nalezena <ph name="NUM" /> karta</translation>
 <translation id="8148760431881541277">Omezit přihlášení</translation>
 <translation id="8150259863378108853">Lacros je experimentální prohlížeč. Případné problémy nahlaste v sekci Nápověda &gt; Nahlásit problém…</translation>
-<translation id="8151579390896831136">Přizpůsobte si profil, včetně názvu</translation>
 <translation id="8151638057146502721">Konfigurovat</translation>
 <translation id="8154790740888707867">Žádný soubor</translation>
 <translation id="815491593104042026">Jejda, ověření se nezdařilo, protože bylo nakonfigurováno k použití nezabezpečené adresy URL (<ph name="BLOCKED_URL" />). Obraťte se na svého administrátora.</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">Spravováno vaší organizací</translation>
 <translation id="8379878387931047019">Toto zařízení typ bezpečnostního klíče požadovaný tímto webem nepodporuje</translation>
 <translation id="8379991678458444070">Přidejte si tuto kartu do záložek, abyste se sem mohli rychle vrátit</translation>
-<translation id="8380266723152870797">Název okna</translation>
 <translation id="8382913212082956454">Kopírovat &amp;e-mailovou adresu</translation>
 <translation id="8386091599636877289">Zásady nebyly nalezeny.</translation>
 <translation id="8386903983509584791">Vyhledávání je dokončeno</translation>
@@ -6863,7 +6860,6 @@
 <translation id="8859402192569844210">Smluvní podmínky nelze načíst</translation>
 <translation id="8859662783913000679">Účet rodiče</translation>
 <translation id="8862003515646449717">Přejděte na rychlý prohlížeč</translation>
-<translation id="8863140399813345099">Nastavení viditelnosti určuje, kdo s vámi může sdílet obsah, když je obrazovka odemknutá</translation>
 <translation id="8863753581171631212">Otevřít odkaz v novém okně aplikace <ph name="APP" /></translation>
 <translation id="8864055848767439877">Sdílení karty <ph name="TAB_NAME" /> s aplikací <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Účet <ph name="EMAIL" /> byl z tohoto zařízení odstraněn</translation>
@@ -6917,7 +6913,6 @@
 <translation id="8912810933860534797">Zapnout automatické prohledávání</translation>
 <translation id="8915370057835397490">Načítá se návrh</translation>
 <translation id="8916476537757519021">Anonymní podrámec: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Zadejte název okna</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />: <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Tmavě tyrkysová</translation>
 <translation id="8925458182817574960">&amp;Nastavení</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 2a344ec..d88c4e9 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Sprog for webindhold</translation>
 <translation id="3429275422858276529">Tilføj denne side som bogmærke, så du nemt kan finde den igen</translation>
 <translation id="3432227430032737297">Fjern alle viste</translation>
-<translation id="3432757130254800023">Send lyd og video til visninger på det lokale netværk</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Ups! Systemet kunne ikke fastslå indstallationstidspunktet for enhedens attributlås.</translation>
 <translation id="3434272557872943250">Hvis indstillingen for yderligere web- og appaktivitet er aktiveret for dit barn, gemmes disse data muligvis på barnets Google-konto. Få flere oplysninger om disse indstillinger og om, hvordan du ændrer dem, ved at gå til families.google.com.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470">Der blev fundet <ph name="NUM" /> fane</translation>
 <translation id="8148760431881541277">Begræns login</translation>
 <translation id="8150259863378108853">Lacros er en eksperimentel browser. Du kan rapportere problemer ved at gå til Hjælp &gt; "Rapportér et problem..."</translation>
-<translation id="8151579390896831136">Tilpas din profil, herunder dens navn</translation>
 <translation id="8151638057146502721">Konfigurer</translation>
 <translation id="8154790740888707867">Ingen fil</translation>
 <translation id="815491593104042026">Ups! Godkendelsen mislykkedes, fordi den var konfigureret til at bruge en webadresse, som ikke er sikker (<ph name="BLOCKED_URL" />). Kontakt din administrator.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Administreret af din organisation</translation>
 <translation id="8379878387931047019">Denne enhed understøtter ikke den type sikkerhedsnøgle, der anmodes om på dette website</translation>
 <translation id="8379991678458444070">Tilføj denne fane som bogmærke, så du hurtigt kan vende tilbage hertil</translation>
-<translation id="8380266723152870797">Navn på vindue</translation>
 <translation id="8382913212082956454">Kopier mailadress&amp;e</translation>
 <translation id="8386091599636877289">Politikken blev ikke fundet.</translation>
 <translation id="8386903983509584791">Scanningen er udført</translation>
@@ -6864,7 +6861,6 @@
 <translation id="8859402192569844210">Servicevilkårene kunne ikke indlæses</translation>
 <translation id="8859662783913000679">Forældrekonto</translation>
 <translation id="8862003515646449717">Skift til en hurtig browser</translation>
-<translation id="8863140399813345099">Din enheds synlighed styrer, hvem der kan dele indhold med dig, når din skærm er låst op</translation>
 <translation id="8863753581171631212">Åbn linket i et nyt <ph name="APP" />-vindue</translation>
 <translation id="8864055848767439877">Deler <ph name="TAB_NAME" /> med <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> blev fjernet fra denne enhed</translation>
@@ -6918,7 +6914,6 @@
 <translation id="8912810933860534797">Aktivér automatisk scanning</translation>
 <translation id="8915370057835397490">Indlæser forslag</translation>
 <translation id="8916476537757519021">Underramme for inkognitotilstand: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Angiv navn på vindue</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> tilhørende <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Mørk turkis</translation>
 <translation id="8925458182817574960">&amp;Indstillinger</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index d74fdc4..1aab309 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -2150,7 +2150,6 @@
 <translation id="3429271624041785769">Sprachen für Webinhalte</translation>
 <translation id="3429275422858276529">Seite als Lesezeichen speichern, um sie später schneller zu finden</translation>
 <translation id="3432227430032737297">Alle angezeigten Cookies entfernen</translation>
-<translation id="3432757130254800023">Audio und Video auf Bildschirme im lokalen Netzwerk senden</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Hoppla! Das System konnte die Attributsperre für die Installationszeit des Geräts nicht einrichten.</translation>
 <translation id="3434272557872943250">Wenn die Einstellung "Zusätzliche Web- &amp; App-Aktivitäten" für Ihr Kind aktiviert ist, werden diese Daten möglicherweise in seinem Google-Konto gespeichert. Unter families.google.com finden Sie weitere Informationen zu dieser Einstellung. Dort erfahren Sie auch, wie Sie sie ändern können.</translation>
@@ -6241,7 +6240,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> Tab gefunden</translation>
 <translation id="8148760431881541277">Anmeldung einschränken</translation>
 <translation id="8150259863378108853">Lacros ist ein experimenteller Browser. Melden Sie Probleme über „Hilfe“ &gt; „Problem melden…“</translation>
-<translation id="8151579390896831136">Profil anpassen, einschließlich seines Namens</translation>
 <translation id="8151638057146502721">Konfigurieren</translation>
 <translation id="8154790740888707867">Keine Datei</translation>
 <translation id="815491593104042026">Hoppla! Bei der Authentifizierung ist ein Fehler aufgetreten, weil in der Konfiguration eine unsichere URL angegeben wurde (<ph name="BLOCKED_URL" />). Bitte wenden Sie sich an Ihren Administrator.</translation>
@@ -6432,7 +6430,6 @@
 <translation id="8378714024927312812">Von Ihrer Organisation verwaltet</translation>
 <translation id="8379878387931047019">Das Gerät ist nicht mit dem Sicherheitsschlüssel kompatibel, der von dieser Website angefordert wird</translation>
 <translation id="8379991678458444070">Sie können diesen Tab als Lesezeichen speichern, um schnell wieder hierher zurückzukehren</translation>
-<translation id="8380266723152870797">Name des Fensters</translation>
 <translation id="8382913212082956454">E-Mail-Adr&amp;esse kopieren</translation>
 <translation id="8386091599636877289">Richtlinie nicht gefunden.</translation>
 <translation id="8386903983509584791">Suche abgeschlossen</translation>
@@ -6857,7 +6854,6 @@
 <translation id="8859402192569844210">Nutzungsbedingungen konnten nicht geladen werden</translation>
 <translation id="8859662783913000679">Elternkonto</translation>
 <translation id="8862003515646449717">Steigen Sie auf einen schnellen Browser um</translation>
-<translation id="8863140399813345099">Über die Sichtbarkeit deines Geräts legst du fest, wer Dateien mit dir teilen kann, während dein Display entsperrt ist</translation>
 <translation id="8863753581171631212">Link in neuem <ph name="APP" />-Fenster öffnen</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> wird mit <ph name="APP_NAME" /> geteilt</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> wurde von diesem Gerät entfernt</translation>
@@ -6911,7 +6907,6 @@
 <translation id="8912810933860534797">Automatischen Scan aktivieren</translation>
 <translation id="8915370057835397490">Vorschläge werden geladen</translation>
 <translation id="8916476537757519021">Inkognito-Subframe: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Einen Namen für das Fenster festlegen</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> von <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Dunkles Blaugrün</translation>
 <translation id="8925458182817574960">&amp;Einstellungen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 9152626..9732495 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Γλώσσες περιεχομένου ιστού</translation>
 <translation id="3429275422858276529">Προσθέστε σελιδοδείκτη σε αυτήν τη σελίδα, για να την εντοπίσετε εύκολα αργότερα</translation>
 <translation id="3432227430032737297">Κατάργηση όλων όσων εμφανίζονται</translation>
-<translation id="3432757130254800023">Αποστολή ήχου και βίντεο σε οθόνες στο τοπικό δίκτυο</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Ωχ!  Το σύστημα απέτυχε να εφαρμόσει το κλείδωμα χρόνου εγκατάστασης χαρακτηριστικών.</translation>
 <translation id="3434272557872943250">Εάν είναι ενεργή η ρύθμιση της πρόσθετης Δραστηριότητας ιστού και εφαρμογών για το παιδί σας, αυτά τα δεδομένα μπορεί να αποθηκευτούν στον Λογαριασμό του Google. Μάθετε περισσότερα σχετικά με αυτές τις ρυθμίσεις και τον τρόπο με τον οποίο μπορείτε να τις προσαρμόσετε στη διεύθυνση families.google.com.</translation>
@@ -6247,7 +6246,6 @@
 <translation id="8147900440966275470">Βρέθηκε <ph name="NUM" /> καρτέλα</translation>
 <translation id="8148760431881541277">Περιορισμός σύνδεσης</translation>
 <translation id="8150259863378108853">Το Lacros είναι ένα πειραματικό πρόγραμμα περιήγησης. Αναφέρετε τυχόν προβλήματα από την ενότητα Βοήθεια &gt; "Αναφορά σφάλματος…".</translation>
-<translation id="8151579390896831136">Προσαρμόστε το προφίλ σας, συμπεριλαμβανομένου του ονόματός του.</translation>
 <translation id="8151638057146502721">Διαμόρφωση</translation>
 <translation id="8154790740888707867">Δεν υπάρχει αρχείο</translation>
 <translation id="815491593104042026">Ωχ! Η διαδικασία ταυτοποίησης απέτυχε γιατί είχε ρυθμιστεί να χρησιμοποιεί μια μη ασφαλή διεύθυνση URL (<ph name="BLOCKED_URL" />).  Επικοινωνήστε με το διαχειριστή σας.</translation>
@@ -6438,7 +6436,6 @@
 <translation id="8378714024927312812">Διαχειριζόμενο από τον οργανισμό σας</translation>
 <translation id="8379878387931047019">Αυτή η συσκευή δεν υποστηρίζει τον τύπο του κλειδιού ασφαλείας που ζητήθηκε από αυτόν τον ιστότοπο</translation>
 <translation id="8379991678458444070">Προσθέστε σελιδοδείκτη σε αυτήν την καρτέλα για να επιστρέψετε εδώ γρήγορα</translation>
-<translation id="8380266723152870797">Όνομα παραθύρου</translation>
 <translation id="8382913212082956454">Αντιγραφή διεύθυνσης &amp;ηλεκτρονικού ταχυδρομείου</translation>
 <translation id="8386091599636877289">Η πολιτική δεν βρέθηκε.</translation>
 <translation id="8386903983509584791">Η σάρωση ολοκληρώθηκε</translation>
@@ -6861,7 +6858,6 @@
 <translation id="8859402192569844210">Δεν ήταν δυνατή η φόρτωση των Όρων Παροχής Υπηρεσιών.</translation>
 <translation id="8859662783913000679">Λογαριασμός γονέα</translation>
 <translation id="8862003515646449717">Εναλλαγή σε ένα γρήγορο πρόγραμμα περιήγησης</translation>
-<translation id="8863140399813345099">Η ορατότητα συσκευής ελέγχει ποιοι χρήστες έχουν τη δυνατότητα να μοιραστούν περιεχόμενο μαζί σας, ενώ η οθόνη σας είναι ξεκλειδωμένη.</translation>
 <translation id="8863753581171631212">Άνοιγμα συνδέσμου σε νέο παράθυρο <ph name="APP" /></translation>
 <translation id="8864055848767439877">Κοινοποίηση <ph name="TAB_NAME" /> στην εφαρμογή <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Το <ph name="EMAIL" /> καταργήθηκε από τη συσκευή</translation>
@@ -6915,7 +6911,6 @@
 <translation id="8912810933860534797">Ενεργοποίηση αυτόματης σάρωσης</translation>
 <translation id="8915370057835397490">Φόρτωση πρότασης</translation>
 <translation id="8916476537757519021">Υποπλαίσιο ανώνυμης περιήγησης: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Ορισμός ονόματος παραθύρου</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> του/της <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Σκούρο γαλαζοπράσινο</translation>
 <translation id="8925458182817574960">&amp;Ρυθμίσεις</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index d620649..cabb12dc 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Web content languages</translation>
 <translation id="3429275422858276529">Bookmark this page to easily find it later</translation>
 <translation id="3432227430032737297">Remove all shown</translation>
-<translation id="3432757130254800023">Send audio and video to displays on the local network</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Oops!  The system failed to establish the device installation-time attributes lock.</translation>
 <translation id="3434272557872943250">If additional Web &amp; App Activity setting is turned on for your child, this data may be saved to their Google Account. Find out more about these settings and how to adjust them at families.google.com.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470">Found <ph name="NUM" /> tab</translation>
 <translation id="8148760431881541277">Limit sign-in</translation>
 <translation id="8150259863378108853">Lacros is an experimental browser. Please report any issues with Help &gt; 'Report an issue…'</translation>
-<translation id="8151579390896831136">Customise your profile, including its name</translation>
 <translation id="8151638057146502721">Configure</translation>
 <translation id="8154790740888707867">No file</translation>
 <translation id="815491593104042026">Oops!  Authentication failed because it was configured to use a non-secure URL (<ph name="BLOCKED_URL" />).  Please contact your administrator.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Managed by your organisation</translation>
 <translation id="8379878387931047019">This device doesn't support the type of security key requested by this website</translation>
 <translation id="8379991678458444070">Get back here fast by bookmarking this tab</translation>
-<translation id="8380266723152870797">Window name</translation>
 <translation id="8382913212082956454">Copy &amp;email address</translation>
 <translation id="8386091599636877289">Policy not found.</translation>
 <translation id="8386903983509584791">Scan completed</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Terms of Service could not be loaded</translation>
 <translation id="8859662783913000679">Parent account</translation>
 <translation id="8862003515646449717">Switch to a fast browser</translation>
-<translation id="8863140399813345099">Your device visibility controls who can share with you while your screen is unlocked</translation>
 <translation id="8863753581171631212">Open link in new <ph name="APP" /></translation>
 <translation id="8864055848767439877">Sharing <ph name="TAB_NAME" /> to <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> was removed from this device</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Enable auto-scan</translation>
 <translation id="8915370057835397490">Loading suggestion</translation>
 <translation id="8916476537757519021">Incognito Subframe: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Set window name</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />'s <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Dark teal</translation>
 <translation id="8925458182817574960">&amp;Settings</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 1918799..515d5ad 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -2151,7 +2151,6 @@
 <translation id="3429271624041785769">Idiomas del contenido web</translation>
 <translation id="3429275422858276529">Agrega esta página a favoritos para encontrarla fácilmente más tarde</translation>
 <translation id="3432227430032737297">Quitar todo lo que se muestra</translation>
-<translation id="3432757130254800023">Enviar audio y video a pantallas en la red local</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">El sistema no pudo establecer el bloqueo de atributos del tiempo de instalación del dispositivo.</translation>
 <translation id="3434272557872943250">Si habilitaste la Actividad de web y de aplicaciones adicional en la Cuenta de Google de tu hijo, es posible que se almacenen estos datos en esa cuenta. Para obtener más información sobre esta configuración y cómo ajustarla, accede a families.google.com.</translation>
@@ -6243,7 +6242,6 @@
 <translation id="8147900440966275470">Se encontró <ph name="NUM" /> pestaña</translation>
 <translation id="8148760431881541277">Limitar el acceso</translation>
 <translation id="8150259863378108853">Lacros es un navegador experimental. Para informar algún problema, usa la opción Ayuda &gt; "Informar un problema…"</translation>
-<translation id="8151579390896831136">Personaliza tu perfil, incluido el nombre</translation>
 <translation id="8151638057146502721">Configurar</translation>
 <translation id="8154790740888707867">Sin archivos</translation>
 <translation id="815491593104042026">Se produjo un error y no se pudo completar la autenticación porque está configurada para utilizar una URL no segura (<ph name="BLOCKED_URL" />). Comunícate con el administrador.</translation>
@@ -6434,7 +6432,6 @@
 <translation id="8378714024927312812">Administrado por tu organización</translation>
 <translation id="8379878387931047019">Este dispositivo no es compatible con el tipo de llave de seguridad que se solicita en este sitio web</translation>
 <translation id="8379991678458444070">Para regresar aquí rápidamente, agrega esta pestaña a favoritos</translation>
-<translation id="8380266723152870797">Nombre de la ventana</translation>
 <translation id="8382913212082956454">Copiar dir&amp;ección de correo electrónico</translation>
 <translation id="8386091599636877289">No se encontró la política.</translation>
 <translation id="8386903983509584791">Finalizó la búsqueda</translation>
@@ -6859,7 +6856,6 @@
 <translation id="8859402192569844210">No se pudieron cargar las Condiciones del Servicio</translation>
 <translation id="8859662783913000679">Cuenta parental</translation>
 <translation id="8862003515646449717">Cambia a un navegador rápido</translation>
-<translation id="8863140399813345099">La opción de visibilidad controla quién puede compartir contenido contigo mientras está desbloqueada la pantalla.</translation>
 <translation id="8863753581171631212">Abrir vínculo en una ventana nueva de <ph name="APP" /></translation>
 <translation id="8864055848767439877">Compartiendo <ph name="TAB_NAME" /> en <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Se quitó <ph name="EMAIL" /> de este dispositivo</translation>
@@ -6913,7 +6909,6 @@
 <translation id="8912810933860534797">Habilitar la búsqueda automática</translation>
 <translation id="8915370057835397490">Cargando sugerencia</translation>
 <translation id="8916476537757519021">Submarco incógnito: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Establece el nombre de la ventana</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> de <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Verde azulado oscuro</translation>
 <translation id="8925458182817574960">&amp;Configuración</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 5526f39..a7193d2 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -441,7 +441,7 @@
 <translation id="1486096554574027028">Buscar contraseñas</translation>
 <translation id="1487335504823219454">Activada: configuración personalizada</translation>
 <translation id="1489664337021920575">Elegir otra opción</translation>
-<translation id="1490491397986065675">Tu administrador indica "<ph name="CUSTOM_MESSAGE" />".</translation>
+<translation id="1490491397986065675">Mensaje de tu administrador: "<ph name="CUSTOM_MESSAGE" />".</translation>
 <translation id="1492417797159476138">Ya has guardado ese nombre de usuario en este sitio web</translation>
 <translation id="1493892686965953381">Esperando <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495677929897281669">Volver a la pestaña</translation>
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Idiomas del contenido web</translation>
 <translation id="3429275422858276529">Añade esta página a marcadores para encontrarla fácilmente en otro momento</translation>
 <translation id="3432227430032737297">Quitar todas las que se muestran</translation>
-<translation id="3432757130254800023">Enviar audio y vídeo a pantallas de la red local</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">¡Vaya! El sistema no ha podido establecer el bloqueo de atributos del tiempo de instalación del dispositivo.</translation>
 <translation id="3434272557872943250">Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en la cuenta de Google de tu hijo. Consulta más información sobre estos ajustes y cómo configurarlos en families.google.com.</translation>
@@ -3237,7 +3236,7 @@
 <translation id="4651484272688821107">No se ha podido cargar el componente online con los recursos del modo de demostración.</translation>
 <translation id="4652935475563630866">El cambio en el ajuste de la cámara requiere que se reinicie Parallels Desktop. Reinicia Parallels Desktop para continuar.</translation>
 <translation id="4653405415038586100">No se ha podido configurar Linux</translation>
-<translation id="4654236001025007561">Comparte archivos con dispositivos Chromebooks y Android que estén cerca de ti</translation>
+<translation id="4654236001025007561">Comparte archivos con Chromebooks y dispositivos Android que estén cerca de ti</translation>
 <translation id="4657914796247705218">Velocidad del TrackPoint</translation>
 <translation id="465878909996028221">Las redirecciones de navegador solo son compatibles con los protocolos HTTP, HTTPS y de archivo.</translation>
 <translation id="4659077111144409915">Cuenta principal</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> pestaña encontrada</translation>
 <translation id="8148760431881541277">Limitar inicio de sesión</translation>
 <translation id="8150259863378108853">Lacros es un navegador experimental. Para informar de cualquier problema, ve a Ayuda &gt; "Notificar un problema...".</translation>
-<translation id="8151579390896831136">Personaliza tu perfil, incluido su nombre</translation>
 <translation id="8151638057146502721">Configurar</translation>
 <translation id="8154790740888707867">Ningún archivo encontrado</translation>
 <translation id="815491593104042026">¡Vaya! Se ha producido un error de autenticación porque estaba configurada para utilizar una URL no segura (<ph name="BLOCKED_URL" />). Ponte en contacto con tu administrador.</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">Gestionado por tu organización</translation>
 <translation id="8379878387931047019">Este dispositivo no es compatible con el tipo de llave de seguridad solicitado por el sitio web</translation>
 <translation id="8379991678458444070">Para volver aquí rápidamente, añade esta pestaña a marcadores</translation>
-<translation id="8380266723152870797">Nombre de la ventana</translation>
 <translation id="8382913212082956454">Copiar dir&amp;ección de correo electrónico</translation>
 <translation id="8386091599636877289">No se ha encontrado la política.</translation>
 <translation id="8386903983509584791">Búsqueda completada</translation>
@@ -6861,7 +6858,6 @@
 <translation id="8859402192569844210">No se han podido cargar los Términos del Servicio</translation>
 <translation id="8859662783913000679">Cuenta parental</translation>
 <translation id="8862003515646449717">Cambia a un navegador rápido</translation>
-<translation id="8863140399813345099">La visibilidad de tu dispositivo determina quién puede compartir archivos contigo mientras tu pantalla está desbloqueada</translation>
 <translation id="8863753581171631212">Abrir enlace en una ventana nueva de <ph name="APP" /></translation>
 <translation id="8864055848767439877">Compartiendo <ph name="TAB_NAME" /> con <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Se ha eliminado <ph name="EMAIL" /> del dispositivo</translation>
@@ -6915,7 +6911,6 @@
 <translation id="8912810933860534797">Habilitar búsqueda automática</translation>
 <translation id="8915370057835397490">Cargando sugerencia</translation>
 <translation id="8916476537757519021">Submarco incógnito: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Pon un nombre a la ventana</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> de <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Turquesa oscuro</translation>
 <translation id="8925458182817574960">&amp;Configuración</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index e91262c1..0732657 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Veebisisu keeled</translation>
 <translation id="3429275422858276529">Lisage see leht järjehoidjatesse, et see hiljem hõlpsalt üles leida</translation>
 <translation id="3432227430032737297">Eemalda kõik kuvatud</translation>
-<translation id="3432757130254800023">Saada heli ja video kohalikus võrgus olevatele ekraanidele</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Vabandust! Süsteemil ei õnnestunud määrata seadme installiaegsete atribuutide lukustust.</translation>
 <translation id="3434272557872943250">Kui täiendavad veebi- ja rakendustegevused on teie lapse jaoks sisse lülitatud, võidakse need andmed salvestada tema Google'i kontole. Seadete ja nende kohandamise kohta leiate lisateavet saidilt families.google.com.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470">Leiti <ph name="NUM" /> vaheleht</translation>
 <translation id="8148760431881541277">Sisselogimise piiramine</translation>
 <translation id="8150259863378108853">Lacros on katseline brauser. Teavitage probleemidest valikutega Abi &gt; „Probleemist teavitamine …”</translation>
-<translation id="8151579390896831136">Kohandage oma profiili, sealhulgas selle nime</translation>
 <translation id="8151638057146502721">Seadista</translation>
 <translation id="8154790740888707867">Fail puudub</translation>
 <translation id="815491593104042026">Vabandust! Autentimine ebaõnnestus, sest see on konfigureeritud kasutama ebaturvalist URL-i (<ph name="BLOCKED_URL" />). Võtke ühendust administraatoriga.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Haldab teie organisatsioon</translation>
 <translation id="8379878387931047019">See seade ei toeta seda tüüpi turvavõtit, mida see veebisait nõuab</translation>
 <translation id="8379991678458444070">Lisage vaheleht järjehoidjatesse, et siia kiiresti naasta</translation>
-<translation id="8380266723152870797">Akna nimi</translation>
 <translation id="8382913212082956454">Kopeeri &amp;e-posti aadress</translation>
 <translation id="8386091599636877289">Reeglit ei leitud.</translation>
 <translation id="8386903983509584791">Skannimine jõudis lõpule</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Teenusetingimusi ei õnnestunud laadida</translation>
 <translation id="8859662783913000679">Vanema konto</translation>
 <translation id="8862003515646449717">Minge üle kiirele brauserile</translation>
-<translation id="8863140399813345099">Teie seadme nähtavus määrab, kes saavad teiega jagada, kui teie ekraanikuva on avatud</translation>
 <translation id="8863753581171631212">Ava link uues rakenduses <ph name="APP" /></translation>
 <translation id="8864055848767439877">Vahelehe <ph name="TAB_NAME" /> jagamine rakenduses <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Konto <ph name="EMAIL" /> eemaldati sellest seadmest</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Automaatse skannimise lubamine</translation>
 <translation id="8915370057835397490">Soovituste laadimine</translation>
 <translation id="8916476537757519021">Inkognito alamraam: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Määrake akna nimi</translation>
 <translation id="8918637186205009138">Kasutaja <ph name="GIVEN_NAME" /> <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Tumesinakasroheline</translation>
 <translation id="8925458182817574960">&amp;Seaded</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 802e34d9..d71a4af 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -250,7 +250,7 @@
 <translation id="1274997165432133392">Cookieak eta webguneko beste datuak</translation>
 <translation id="1275718070701477396">Hautatua</translation>
 <translation id="1276994519141842946">Ezin izan da desinstalatu <ph name="APP_NAME" /></translation>
-<translation id="1277020343994096713">Sortu beste PIN kode bat (ezin da izan unean darabilzuna)</translation>
+<translation id="1277020343994096713">Sortu beste PIN kode bat (ezin da izan une honetan darabilzuna)</translation>
 <translation id="1278703349931574538">Kudeatu kontaktuak</translation>
 <translation id="127946606521051357">Inguruko gailu bat edukia partekatzen ari da</translation>
 <translation id="1280820357415527819">Sare mugikorren bila</translation>
@@ -1205,7 +1205,7 @@
 <translation id="2335122562899522968">Orriak cookieak ezarri ditu.</translation>
 <translation id="2336228925368920074">Egin fitxa guztien laster-markak…</translation>
 <translation id="2336376423977300504">Garbitu beti cookieak leihoak ixten direnean</translation>
-<translation id="2336381494582898602">Berrezarri fabrikako ezarpenak</translation>
+<translation id="2336381494582898602">Berrezarri fabrikako ezarpenak Powerwash bidez</translation>
 <translation id="2340239562261172947"><ph name="FILE_NAME" /> ezin da segurtasunez deskargatu</translation>
 <translation id="2340263603246777781"><ph name="ORIGIN" /> webguneak parekatu egin nahi du</translation>
 <translation id="2342740338116612727">Laster-markak gehitu dira</translation>
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Web-edukien hizkuntzak</translation>
 <translation id="3429275422858276529">Egin orri honen laster-marka, geroago bizkor aurkitzeko</translation>
 <translation id="3432227430032737297">Kendu erakutsitako guztiak</translation>
-<translation id="3432757130254800023">Bidali audioa eta bideoa sare lokaleko pantailetara</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Sistemak ezin izan du ezarri gailuaren instalazio-atributuen blokeoa.</translation>
 <translation id="3434272557872943250">Haurraren kontuko Sareko eta aplikazioetako jarduera gehigarriak ezarpena aktibatuta badago, baliteke datu horiek haren Google-ko kontuan gordetzea. Lortu ezarpen horiei buruzko informazio gehiago eta ikasi haiek doitzen families.google.com helbidean.</translation>
@@ -2739,7 +2738,7 @@
 <translation id="4047726037116394521">Joan orri nagusira</translation>
 <translation id="4049783682480068824">{COUNT,plural, =1{# kontaktu ez dago erabilgarri. Nearby Share kontaktu horrekin erabiltzeko, gehitu kontaktuetan haren Google-ko kontuarekin lotutako helbide elektronikoa.}other{# kontaktu ez daude erabilgarri. Nearby Share kontaktu horiekin erabiltzeko, gehitu kontaktuetan haien Google-ko kontuarekin lotutako helbide elektronikoa.}}</translation>
 <translation id="4050225813016893843">Autentifikazio-metodoa</translation>
-<translation id="4050534976465737778">Egiaztatu bi gailuak desblokeatuta eta elkarrengandik hurbil daudela, eta Bluetooth-a aktibatuta daukatela. Edukia zure kontaktuetan ez dagoen Chromebook batekin partekatzeko asmoa baduzu, egiaztatu Nearby-ren ikusgaitasuna aktibatuta dagoela (ireki egoeraren eremua eta, gero, aktibatu Nearby-ren ikusgaitasuna). <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
+<translation id="4050534976465737778">Egiaztatu bi gailuak desblokeatuta eta elkarrengandik hurbil daudela, eta Bluetooth-a aktibatuta daukatela. Zure kontaktuetan ez dagoen Chromebook batekin edukia partekatzeko asmoa baduzu, egiaztatu Nearby-ren ikusgaitasuna aktibatuta dagoela (ireki egoeraren eremua eta, gero, aktibatu Nearby-ren ikusgaitasuna). <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
 <translation id="4052120076834320548">Oso txikia</translation>
 <translation id="4054070260844648638">Guztientzat ikusgai</translation>
 <translation id="4056908315660577142">Iritsi zara gurasoak Chrome-ren <ph name="APP_NAME" /> aplikazioa erabiltzeko ezarritako denbora-mugara. Bihar, <ph name="TIME_LIMIT" /> izango dituzu hura erabiltzeko.</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> fitxa aurkitu da</translation>
 <translation id="8148760431881541277">Mugatu saioa hasteko aukera</translation>
 <translation id="8150259863378108853">Probako arakatzaile bat da Lacros. Arazoren bat aurkituz gero, jakinaraz ezazu hemen: Laguntza &gt; "Eman arazo baten berri…"</translation>
-<translation id="8151579390896831136">Pertsonalizatu profila, izena barne</translation>
 <translation id="8151638057146502721">Konfiguratu</translation>
 <translation id="8154790740888707867">Ez dago fitxategirik</translation>
 <translation id="815491593104042026">Autentifikazioak huts egin du segurua ez den URL bat (<ph name="BLOCKED_URL" />) erabiltzeko konfiguratu delako. Jarri administratzailearekin harremanetan.</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">Erakundeak kudeatzen du</translation>
 <translation id="8379878387931047019">Gailuak ez du onartzen webgune honek eskatzen duen segurtasun-giltzaren mota</translation>
 <translation id="8379991678458444070">Hona bizkor itzuli ahal izateko, egin fitxa honen laster-marka</translation>
-<translation id="8380266723152870797">Leihoaren izena</translation>
 <translation id="8382913212082956454">Kopiatu &amp;helbide elektronikoa</translation>
 <translation id="8386091599636877289">Ez da aurkitu gidalerroa.</translation>
 <translation id="8386903983509584791">Amaitu da bilaketa</translation>
@@ -6860,7 +6857,6 @@
 <translation id="8859402192569844210">Ezin izan dira kargatu Zerbitzu-baldintzak</translation>
 <translation id="8859662783913000679">Gurasoaren kontua</translation>
 <translation id="8862003515646449717">Aldatu arakatzaile bizkor batera</translation>
-<translation id="8863140399813345099">Pantaila desblokeatuta daukazunean zurekin edukia nork parteka dezakeen kontrolatzen du gailuaren ikusgaitasunak.</translation>
 <translation id="8863753581171631212">Ireki esteka <ph name="APP" /> aplikazio berrian</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> fitxa <ph name="APP_NAME" /> aplikazioarekin dago partekatuta</translation>
 <translation id="8864458770072227512">Kendu da <ph name="EMAIL" /> gailu honetatik</translation>
@@ -6914,7 +6910,6 @@
 <translation id="8912810933860534797">Gaitu bilaketa automatikoa</translation>
 <translation id="8915370057835397490">Iradokizuna kargatzen</translation>
 <translation id="8916476537757519021">Ezkutuko moduko azpimarkoa: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Eman izena leihoari</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> erabiltzailearen <ph name="DEVICE_TYPE" /> gailua</translation>
 <translation id="8923880975836399332">Anil iluna</translation>
 <translation id="8925458182817574960">&amp;Ezarpenak</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 1010d38..cfb7d4d 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -2152,7 +2152,6 @@
 <translation id="3429271624041785769">زبان محتوای وب</translation>
 <translation id="3429275422858276529">این صفحه را نشانک‌گذاری کنید تا بعداً آن را به‌آسانی پیدا کنید</translation>
 <translation id="3432227430032737297">حذف همه موارد نشان‌ داده‌شده</translation>
-<translation id="3432757130254800023">ارسال صوت و تصویر برای نمایش در شبکه محلی</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">اوه! این سیستم نتوانست قفل ویژگی‌های زمان نصب دستگاه را ایجاد کند.</translation>
 <translation id="3434272557872943250">‏اگر تنظیم «فعالیت وب و برنامه» تکمیلی برای فرزندتان روشن باشد، ممکن است این داده‌ها در «حساب Google» او ذخیره شود. در families.google.com، درباره این تنظیمات و نحوه تغییر آن‌ها بیشتر بدانید.</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> برگه پیدا شد</translation>
 <translation id="8148760431881541277">محدود کردن ورود به سیستم</translation>
 <translation id="8150259863378108853">‏Lacros مرورگری آزمایشی است. لطفاً مشکلات را در «راهنمایی &gt; گزارش مشکل» گزارش کنید.</translation>
-<translation id="8151579390896831136">سفارشی کردن نمایه، ازجمله نام آن</translation>
 <translation id="8151638057146502721">پیکربندی</translation>
 <translation id="8154790740888707867">فایلی وجود ندارد</translation>
 <translation id="815491593104042026">وای! اصالت‌سنجی انجام نشد زیرا برای استفاده از نشانی وب غیر امن (<ph name="BLOCKED_URL" />) پیکربندی شده بود. لطفاً با سرپرستتان تماس بگیرید.</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">توسط سازمانتان مدیریت می‌شود</translation>
 <translation id="8379878387931047019">این دستگاه نوع کلید امنیتیِ درخواستی ازجانب این وب‌سایت را پشتیبانی نمی‌کند</translation>
 <translation id="8379991678458444070">با نشانک‌گذاری این برگه، سریع به اینجا برگردید</translation>
-<translation id="8380266723152870797">نام پنجره</translation>
 <translation id="8382913212082956454">کپی آدرس &amp;ایمیل</translation>
 <translation id="8386091599636877289">خط‌مشی یافت نشد.</translation>
 <translation id="8386903983509584791">اسکن کامل شد</translation>
@@ -6861,7 +6858,6 @@
 <translation id="8859402192569844210">«شرایط خدمات» بارگیری نشد</translation>
 <translation id="8859662783913000679">حساب والدین</translation>
 <translation id="8862003515646449717">به مرورگر سریعی جابه‌جا شوید</translation>
-<translation id="8863140399813345099">تنظیم نمایان بودن دستگاه کنترل می‌کند که چه‌کسی می‌تواند هنگام باز بودن قفل صفحه‌نمایش با شما هم‌رسانی کند</translation>
 <translation id="8863753581171631212">باز کردن پیوند در پنجره جدید <ph name="APP" /></translation>
 <translation id="8864055848767439877">درحال هم‌رسانی <ph name="TAB_NAME" /> با <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> از این دستگاه برداشته شد</translation>
@@ -6915,7 +6911,6 @@
 <translation id="8912810933860534797">فعال کردن اسکن خودکار</translation>
 <translation id="8915370057835397490">در حال بارگیری پیشنهادات</translation>
 <translation id="8916476537757519021">قاب فرعی ناشناس: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">تنظیم نام پنجره</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">سبز دودی تیره</translation>
 <translation id="8925458182817574960">&amp;تنظیمات</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 41c68a8f..c79d4e8 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Verkkosisällön kielet</translation>
 <translation id="3429275422858276529">Lisää tämä sivu kirjanmerkkeihin, niin löydät sen myöhemmin helposti.</translation>
 <translation id="3432227430032737297">Poista kaikki näytetyt</translation>
-<translation id="3432757130254800023">Lähetä ääntä ja videota näyttöihin lähiverkossa</translation>
 <translation id="3432762828853624962">SharedWorkerit</translation>
 <translation id="3433621910545056227">Hups! Järjestelmä ei voi lukita laitteen asennuksen aikaisia attribuutteja.</translation>
 <translation id="3434272557872943250">Jos muun verkko- ja sovellustoiminnan asetus on lapsella päällä, tätä dataa voidaan tallentaa hänen Google-tililleen. Lue lisää näistä asetuksista ja niiden muokkaamisesta osoitteesta families.google.com.</translation>
@@ -6242,7 +6241,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> välilehti löydetty</translation>
 <translation id="8148760431881541277">Rajoita sisäänkirjautumista</translation>
 <translation id="8150259863378108853">Lacros on kokeellinen selain. Ilmoita ongelmista kohdassa Ohje &gt; "Ilmoita ongelmasta…"</translation>
-<translation id="8151579390896831136">Muokkaa profiilia, myös sen nimeä</translation>
 <translation id="8151638057146502721">Määritä</translation>
 <translation id="8154790740888707867">Ei tiedostoa</translation>
 <translation id="815491593104042026">Hups! Todennus epäonnistui, koska se määritettiin käyttämään suojaamatonta URL-osoitetta (<ph name="BLOCKED_URL" />). Ota yhteyttä järjestelmänvalvojaan.</translation>
@@ -6433,7 +6431,6 @@
 <translation id="8378714024927312812">Organisaatiosi ylläpitämä</translation>
 <translation id="8379878387931047019">Tämä laite ei tue tämän sivuston pyytämää suojausavaintyyppiä</translation>
 <translation id="8379991678458444070">Lisää välilehti kirjanmerkiksi, niin voit palata tähän nopeasti</translation>
-<translation id="8380266723152870797">Ikkunan nimi</translation>
 <translation id="8382913212082956454">Kopioi s&amp;ähköpostiosoite</translation>
 <translation id="8386091599636877289">Käytäntöä ei löydy.</translation>
 <translation id="8386903983509584791">Etsintä valmis</translation>
@@ -6858,7 +6855,6 @@
 <translation id="8859402192569844210">Käyttöehtojen lataus ei onnistunut</translation>
 <translation id="8859662783913000679">Vanhemman tili</translation>
 <translation id="8862003515646449717">Siirry käyttämään nopeaa selainta.</translation>
-<translation id="8863140399813345099">Laitteen näkyvyysasetus määrittää, kuka voi jakaa sinulle, kun näyttösi ei ole lukittuna</translation>
 <translation id="8863753581171631212">Avaa linkki uudessa ikkunassa (<ph name="APP" />)</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> jaetaan, vastaanottaja: <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> poistettiin tältä laitteelta</translation>
@@ -6912,7 +6908,6 @@
 <translation id="8912810933860534797">Ota automaattinen skannaus käyttöön</translation>
 <translation id="8915370057835397490">Ladataan ehdotusta</translation>
 <translation id="8916476537757519021">Incognito-alakehys: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Nimeä ikkuna</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> (<ph name="GIVEN_NAME" />)</translation>
 <translation id="8923880975836399332">Tumma turkoosi</translation>
 <translation id="8925458182817574960">A&amp;setukset</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 687e444b..86b54968 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Mga wika ng content sa web</translation>
 <translation id="3429275422858276529">I-bookmark ang page na ito upang madali itong mahanap sa ibang pagkakaton</translation>
 <translation id="3432227430032737297">Alisin ang Lahat ng Ipinapakita</translation>
-<translation id="3432757130254800023">Magpadala ng audio at video sa mga display sa lokal na network</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Naku! Nabigo ang system na itatag ang lock sa mga katangian sa oras ng pag-install.</translation>
 <translation id="3434272557872943250">Kung naka-on ang karagdagang setting ng Aktibidad sa Web at App para sa iyong anak, posibleng ma-save ang data na ito sa kanyang Google Account. Matuto pa tungkol sa mga setting na ito at kung paano isaayos ang mga ito sa families.google.com.</translation>
@@ -6247,7 +6246,6 @@
 <translation id="8147900440966275470">Nakakita ng <ph name="NUM" /> Tab</translation>
 <translation id="8148760431881541277">Limitahan ang pag-sign in</translation>
 <translation id="8150259863378108853">Isang pang-eksperimentong browser ang Lacros. Pakiulat ang anumang isyu sa Tulong &gt; "Mag-ulat ng isyu..."</translation>
-<translation id="8151579390896831136">I-customize ang iyong profile, kabilang ang pangalan nito</translation>
 <translation id="8151638057146502721">I-configure</translation>
 <translation id="8154790740888707867">Walang file</translation>
 <translation id="815491593104042026">Oops! Nabigo ang pagpapatotoo dahil naka-configure ito na gumamit ng hindi secure na URL (<ph name="BLOCKED_URL" />). Mangyaring makipag-ugnayan sa iyong administrator.</translation>
@@ -6438,7 +6436,6 @@
 <translation id="8378714024927312812">Pinapamahalaan ng iyong organisasyon</translation>
 <translation id="8379878387931047019">Hindi sinusuportahan ng device na ito ang uri ng security key na hiniling ng website na ito</translation>
 <translation id="8379991678458444070">Makabalik kaagad dito sa pamamagitan ng pag-bookmark sa tab na ito</translation>
-<translation id="8380266723152870797">Pangalan ng Window</translation>
 <translation id="8382913212082956454">Kopyahin ang &amp;email address</translation>
 <translation id="8386091599636877289">Hindi nakita ang patakaran.</translation>
 <translation id="8386903983509584791">Nakumpleto ang pag-scan</translation>
@@ -6865,7 +6862,6 @@
 <translation id="8859402192569844210">Hindi ma-load ang Mga Tuntunin ng Serbisyo</translation>
 <translation id="8859662783913000679">Account ng magulang</translation>
 <translation id="8862003515646449717">Lumipat sa isang mabilis na browser</translation>
-<translation id="8863140399813345099">Kinokontrol ng pagiging visible ng iyong device kung sino ang puwedeng magbahagi sa iyo habang naka-unlock ang screen mo</translation>
 <translation id="8863753581171631212">Buksan ang link sa bagong <ph name="APP" /></translation>
 <translation id="8864055848767439877">Ibinabahagi ang <ph name="TAB_NAME" /> sa <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Inalis ang <ph name="EMAIL" /> sa device na ito</translation>
@@ -6920,7 +6916,6 @@
 <translation id="8912810933860534797">I-enable ang awtomatikong pag-scan</translation>
 <translation id="8915370057835397490">Nilo-load ang suhestiyon</translation>
 <translation id="8916476537757519021">Incognito na Subframe: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Itakda ang Pangalan ng Window</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> ni <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Dark teal</translation>
 <translation id="8925458182817574960">&amp;Mga Setting</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index b3a32ef6..437fe88 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -219,6 +219,7 @@
 <translation id="1234808891666923653">Service Workers</translation>
 <translation id="1235458158152011030">Réseaux connus</translation>
 <translation id="123578888592755962">Le disque est plein</translation>
+<translation id="1235924639474699896">{COUNT,plural, =1{élément de texte}one{# élément de texte}other{# éléments de texte}}</translation>
 <translation id="1239594683407221485">Explorer le contenu de l'appareil dans l'application Fichiers.</translation>
 <translation id="124116460088058876">Plus de langues</translation>
 <translation id="1241753985463165747">Lire et modifier toutes vos données sur le site Web actuel, lorsqu'il est invoqué</translation>
@@ -441,6 +442,7 @@
 <translation id="1486096554574027028">Recherche de mots de passe</translation>
 <translation id="1487335504823219454">Paramètres personnalisés activés</translation>
 <translation id="1489664337021920575">Choisir une autre option</translation>
+<translation id="1490491397986065675">Message de votre administrateur : « <ph name="CUSTOM_MESSAGE" /> ».</translation>
 <translation id="1492417797159476138">Vous avez déjà enregistré ce nom d'utilisateur pour ce site</translation>
 <translation id="1493892686965953381">En attente de <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495677929897281669">Retour à l'onglet</translation>
@@ -812,6 +814,7 @@
 <translation id="1879000426787380528">Se connecter en tant que</translation>
 <translation id="1880905663253319515">Supprimer le certificat « <ph name="CERTIFICATE_NAME" /> »?</translation>
 <translation id="1881445033931614352">Disposition du clavier</translation>
+<translation id="1881577802939775675">{COUNT,plural, =1{Élément}one{# élément}other{# éléments}}</translation>
 <translation id="1884013283844450420">Réseau <ph name="NETWORK_INDEX" /> sur <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, connexion</translation>
 <translation id="1884340228047885921">Le paramètre de visibilité actuelle est réglé à quelques contacts</translation>
 <translation id="1884705339276589024">Redimensionner le disque Linux</translation>
@@ -990,6 +993,7 @@
 <translation id="2099686503067610784">Supprimer le certificat de serveur « <ph name="CERTIFICATE_NAME" /> »?</translation>
 <translation id="2100273922101894616">Connexion automatique</translation>
 <translation id="2101225219012730419">Version :</translation>
+<translation id="2108349519800154983">{COUNT,plural, =1{Numéro de téléphone}one{# numéro de téléphone}other{# numéros de téléphone}}</translation>
 <translation id="211144231511833662">Effacer les types</translation>
 <translation id="2111670510994270194">Nouvel onglet à droite</translation>
 <translation id="21133533946938348">Épingler l'onglet</translation>
@@ -1042,6 +1046,7 @@
 <translation id="2154710561487035718">Copier l'URL</translation>
 <translation id="2155772377859296191">Semblable à <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="2156294658807918600">Service Worker : <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">Relancer la vérification de sécurité</translation>
 <translation id="2157474325782140681">Pour obtenir des fonctionnalités supplémentaires, servez-vous d'une station d'accueil Dell conçue pour être utilisée avec ce Chromebook.</translation>
 <translation id="215753907730220065">Quitter le mode plein écran</translation>
 <translation id="2157875535253991059">Cette page est maintenant en mode plein écran.</translation>
@@ -1286,6 +1291,7 @@
 <translation id="2435457462613246316">Affich. mot de passe</translation>
 <translation id="2435579801172349831">Tout ouvrir (<ph name="URL_COUNT" />) dans une fenêtre de navigation privée</translation>
 <translation id="2436186046335138073">Autoriser <ph name="HANDLER_HOSTNAME" /> à ouvrir tous les liens <ph name="PROTOCOL" />?</translation>
+<translation id="2440366609912234507">{COUNT,plural, =1{application}one{# application}other{# applications}}</translation>
 <translation id="2440604414813129000">Afficher le code s&amp;ource</translation>
 <translation id="244231003699905658">Adresse incorrecte. Veuillez vérifier l'adresse, puis réessayez.</translation>
 <translation id="2442916515643169563">Ombre du texte</translation>
@@ -1435,6 +1441,7 @@
 <translation id="2604255671529671813">Erreur de connexion réseau</translation>
 <translation id="2606246518223360146">Associer les données</translation>
 <translation id="2606454609872547359">Non, continuer sans ChromeVox</translation>
+<translation id="2606568927909309675">Génère automatiquement des sous-titres pour les contenus audio et vidéo en anglais. L'audio et les sous-titres ne quittent jamais votre appareil.</translation>
 <translation id="2607101320794533334">Information sur la clé publique du destinataire</translation>
 <translation id="2609896558069604090">Créer des raccourcis...</translation>
 <translation id="2609980095400624569">Impossible d'établir la connexion</translation>
@@ -1699,6 +1706,7 @@
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
 <translation id="2889064240420137087">Ouvrir le lien avec...</translation>
 <translation id="2889925978073739256">Continuer à bloquer l'exécution des plugiciels en dehors du carré de sable</translation>
+<translation id="2891922230654533301">Utiliser cet appareil pour vous connecter à <ph name="APP_NAME" />?</translation>
 <translation id="2893168226686371498">Navigateur par défaut</translation>
 <translation id="2894757982205307093">Nouvel onglet dans le groupe</translation>
 <translation id="289644616180464099">La carte SIM est verrouillée</translation>
@@ -1984,6 +1992,7 @@
 <translation id="3225319735946384299">Signature de code</translation>
 <translation id="3227137524299004712">Microphone</translation>
 <translation id="3233271424239923319">Sauvegarder les applications et les fichiers Linux</translation>
+<translation id="3238192140106069382">Connexion et vérification en cours…</translation>
 <translation id="3239373508713281971">Limite de temps supprimée pour <ph name="APP_NAME" /></translation>
 <translation id="3241680850019875542">Sélectionnez le répertoire racine de l'extension à empaqueter. Pour mettre à jour une extension, sélectionnez également le fichier de clé privée à réutiliser.</translation>
 <translation id="3244294424315804309">Continuer à désactiver le son</translation>
@@ -2010,6 +2019,7 @@
 <translation id="3269069891205016797">Vos données seront supprimées de l'appareil lors de la déconnexion.</translation>
 <translation id="3269093882174072735">Charger l'image</translation>
 <translation id="3269612321104318480">Turquoise clair et blanc</translation>
+<translation id="3269689705184377744">{COUNT,plural, =1{Fichier}one{# fichier}other{# fichiers}}</translation>
 <translation id="326999365752735949">Différence de téléchargement</translation>
 <translation id="3270965368676314374">Lire, modifier et supprimer les photos, la musique et les autres fichiers multimédias stockés sur votre ordinateur</translation>
 <translation id="327147043223061465">Afficher tous les témoins et toutes les données du site</translation>
@@ -2146,7 +2156,6 @@
 <translation id="3429271624041785769">Langues pour le contenu Web</translation>
 <translation id="3429275422858276529">Ajoutez cette page aux favoris pour la retrouver plus facilement plus tard</translation>
 <translation id="3432227430032737297">Supprimer tous les éléments affichés</translation>
-<translation id="3432757130254800023">Envoyer des contenus audio et vidéo vers des écrans sur le réseau local</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Oups… Le système n'a pas réussi à établir le verrouillage des attributs du temps d'installation de l'appareil.</translation>
 <translation id="3434272557872943250">Si le paramètre relatif aux autres activités sur le Web et dans les applications est activé pour votre enfant, ces données peuvent être enregistrées dans son compte Google. Pour en savoir plus sur ces paramètres ou pour découvrir comment les ajuster, rendez-vous sur families.google.com.</translation>
@@ -2305,6 +2314,7 @@
 <translation id="3600792891314830896">Désactiver le son sur les sites qui en font jouer</translation>
 <translation id="360180734785106144">Proposer de nouvelles fonctionnalités lorsqu'elles sont accessibles</translation>
 <translation id="3602290021589620013">Aperçu</translation>
+<translation id="3602870520245633055">Imprimer et numériser</translation>
 <translation id="3603622770190368340">Obtenir un certificat réseau</translation>
 <translation id="3604193429970465812">Comptes secondaires</translation>
 <translation id="3604713164406837697">Changer de fond d'écran</translation>
@@ -2320,6 +2330,7 @@
 <translation id="3615579745882581859">Le fichier <ph name="FILE_NAME" /> est en train d'être analysé.</translation>
 <translation id="3616741288025931835">Effa&amp;cer les données de navigation…</translation>
 <translation id="3617891479562106823">Les arrière-plans ne sont pas disponibles. Réessayez plus tard.</translation>
+<translation id="3618800144880386250">{COUNT,plural, =1{vidéo}one{# vidéo}other{# vidéos}}</translation>
 <translation id="3619115746895587757">Cappuccino</translation>
 <translation id="362333465072914957">En attente de la publication du certificat par l'autorité correspondante</translation>
 <translation id="3624567683873126087">Déverrouiller l'appareil et se connecter au compte Google</translation>
@@ -2729,6 +2740,7 @@
 <translation id="4047726037116394521">Accéder à la page d'accueil</translation>
 <translation id="4049783682480068824">{COUNT,plural, =1{# contact n'est pas accessible. Pour utiliser la fonctionnalité Partage à proximité avec cette personne, ajoutez l'adresse de courriel associée à son compte Google dans vos contacts.}one{# contact n'est pas accessible. Pour utiliser la fonctionnalité Partage à proximité avec cette personne, ajoutez l'adresse de courriel associée à son compte Google dans vos contacts.}other{# contacts ne sont pas accessibles. Pour utiliser la fonctionnalité Partage à proximité avec ces personnes, ajoutez l'adresse de courriel associée à leur compte Google dans vos contacts.}}</translation>
 <translation id="4050225813016893843">Méthode d'authentification</translation>
+<translation id="4050534976465737778">Assurez-vous que les deux appareils sont déverrouillés, à proximité l'un de l'autre, et que le Bluetooth est activé. Si vous effectuez le partage avec un Chromebook qui ne figure pas dans vos contacts, assurez-vous que le partage à proximité est activé sur celui-ci. Pour ce faire, ouvrez la zone de notifications, puis sélectionnez Partage à proximité. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="4052120076834320548">Très petite</translation>
 <translation id="4054070260844648638">Visible par tous</translation>
 <translation id="4056908315660577142">Tu as atteint la durée limite que ton parent a définie pour l'application Chrome <ph name="APP_NAME" />. Tu pourras l'utiliser de nouveau pendant <ph name="TIME_LIMIT" /> demain.</translation>
@@ -2963,6 +2975,7 @@
 <translation id="4364327530094270451">Melon</translation>
 <translation id="4364567974334641491"><ph name="APP_NAME" /> partage une fenêtre.</translation>
 <translation id="4364830672918311045">Afficher les notifications</translation>
+<translation id="4366138410738374926">L'impression a commencé</translation>
 <translation id="437004882363131692">Obtenez des conseils sur votre <ph name="DEVICE_TYPE" />, des offres et des mises à jour, et transmettez vos commentaires. Vous pouvez vous désabonner à tout moment.</translation>
 <translation id="4370425812909262207">Paniers masqués. Ils s'afficheront de nouveau lorsque vous effectuerez des changements.</translation>
 <translation id="4370975561335139969">L’adresse de courriel et le mot de passe que vous avez entrés ne correspondent pas</translation>
@@ -3150,6 +3163,7 @@
 <translation id="4568025708905928793">Une clé de sécurité a été demandée</translation>
 <translation id="4568213207643490790">Désolés, les comptes Google ne sont pas autorisés sur cet appareil.</translation>
 <translation id="4569747168316751899">Lorsqu'il est inactif</translation>
+<translation id="4569830245132310845">{COUNT,plural, =1{adresse}one{# adresse}other{# adresses}}</translation>
 <translation id="4570387585180509432">Adresses, numéros de téléphone et plus</translation>
 <translation id="4572659312570518089">Annulation de l'authentification lors de la connexion à l'appareil « <ph name="DEVICE_NAME" /> ».</translation>
 <translation id="4572779512957829735">Entrez le NIP de votre clé de sécurité</translation>
@@ -3209,6 +3223,7 @@
 <translation id="4635444580397524003">La sauvegarde Linux a été restaurée.</translation>
 <translation id="4636930964841734540">Renseignements</translation>
 <translation id="4637083375689622795">Autres actions, <ph name="EMAIL" /></translation>
+<translation id="4637252186848840278">{COUNT,plural, =1{Élément de texte}one{# élément de texte}other{# éléments de texte}}</translation>
 <translation id="4638930039313743000">Activer le débogage PDA</translation>
 <translation id="4641539339823703554">Chrome n'a pas pu régler l'heure du système. Veuillez vérifier l'heure ci-dessous et la corriger si nécessaire.</translation>
 <translation id="4642769377300286600">Installation du profil cellulaire, réseau <ph name="NETWORK_INDEX" /> sur <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" /></translation>
@@ -3224,10 +3239,12 @@
 <translation id="4651484272688821107">Impossible de charger le composant en ligne avec les ressources du mode démo.</translation>
 <translation id="4652935475563630866">Pour que la modification apportée à la caméra soit appliquée, Parallels Desktop doit être relancé. Relancez Parallels Desktop pour continuer.</translation>
 <translation id="4653405415038586100">Une erreur s'est produite lors de la configuration de Linux</translation>
+<translation id="4654236001025007561">Partagez des fichiers avec des Chromebook et des appareils Android à proximité</translation>
 <translation id="4657914796247705218">Vitesse du TrackPoint</translation>
 <translation id="465878909996028221">Seuls les protocoles http, https et de fichiers sont pris en charge pour les redirections de navigateur.</translation>
 <translation id="4659077111144409915">Compte principal</translation>
 <translation id="4659126640776004816">Lorsque vous vous connecterez à votre compte Google, cette fonctionnalité sera activée.</translation>
+<translation id="4660465405448977105">{COUNT,plural, =1{Image}one{# image}other{# images}}</translation>
 <translation id="4660476621274971848">Version « <ph name="NEW_ID" /> » reçue au lieu de la version « <ph name="EXPECTED_VERSION" /> » attendue</translation>
 <translation id="4660540330091848931">Redimensionnement en cours…</translation>
 <translation id="4661407454952063730">Les données d'application correspondent à toutes les données enregistrées par une application (en fonction des paramètres définis par le concepteur), y compris les données comme les contacts, les messages et les photos.</translation>
@@ -3328,6 +3345,7 @@
 <translation id="4794810983896241342">C'est <ph name="BEGIN_LINK" />votre administrateur<ph name="END_LINK" /> qui gère les mises à jour</translation>
 <translation id="479536056609751218">Page Web, HTML uniquement</translation>
 <translation id="4798236378408895261">Associer les <ph name="BEGIN_LINK" />journaux Bluetooth<ph name="END_LINK" /> (données internes de Google)</translation>
+<translation id="4798543057539040565">{COUNT,plural, =1{élément}one{# élément}other{# éléments}}</translation>
 <translation id="4801448226354548035">Masquer les comptes</translation>
 <translation id="4801512016965057443">Autoriser l'itinérance des données mobiles</translation>
 <translation id="4804818685124855865">Déconnecter</translation>
@@ -3758,6 +3776,7 @@
 <translation id="531118851858162334">Vous voyez cet élément en fonction de vos activités précédentes sur les services Google. Vous pouvez consulter vos données, les supprimer ainsi que modifier vos paramètres à l'adresse <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
 <translation id="5311304534597152726">Se connecter en tant que</translation>
 <translation id="5311565231560644461">Ne pas autoriser les sites à utiliser vos appareils ni vos données de réalité virtuelle</translation>
+<translation id="5312876166662946389">{COUNT,plural, =1{image}one{# image}other{# images}}</translation>
 <translation id="5314381603623123224">Les conditions d'utilisation de Chrome changeront le 31 mars</translation>
 <translation id="5315738755890845852">Accolade supplémentaire : <ph name="ERROR_LINE" /></translation>
 <translation id="5317780077021120954">Enregistrer</translation>
@@ -3823,6 +3842,7 @@
 <translation id="5390677308841849479">Rouge foncé et orange</translation>
 <translation id="5390743329570580756">Envoyer pour</translation>
 <translation id="5392192690789334093">Autorisés à envoyer des notifications</translation>
+<translation id="5393761864111565424">{COUNT,plural, =1{Lien}one{# lien}other{# liens}}</translation>
 <translation id="5397794290049113714">Vous</translation>
 <translation id="5398497406011404839">Favoris masqués</translation>
 <translation id="5398572795982417028">Référence de page hors limite, la limite est de <ph name="MAXIMUM_PAGE" /></translation>
@@ -4349,6 +4369,7 @@
 <translation id="6011074160056912900">Réseau Ethernet</translation>
 <translation id="6011193465932186973">Empreinte digitale</translation>
 <translation id="6011449291337289699">Effacer les données du site</translation>
+<translation id="6013027779243312217">Afficher des sous-titres pour vos contenus audio et vidéo</translation>
 <translation id="6015796118275082299">Année</translation>
 <translation id="6016178549409952427">Naviguer vers l'élément de contenu supplémentaire <ph name="CURRENT_ELEMENT" /> sur <ph name="TOTAL_ELEMENTS" /></translation>
 <translation id="6016551720757758985">Confirmez la fonctionnalité Powerwash avec un retour à la version précédente</translation>
@@ -4858,6 +4879,7 @@
 <translation id="6605847144724004692">Pas encore évaluée par les utilisateurs.</translation>
 <translation id="6607831829715835317">Autres outi&amp;ls</translation>
 <translation id="6607890859198268021">L'adresse <ph name="USER_EMAIL" /> est déjà gérée par <ph name="DOMAIN" />. Pour utiliser les contrôles parentaux avec un autre compte Google, déconnectez-vous après la configuration, puis sélectionnez « Ajouter une personne » à l'écran de connexion.</translation>
+<translation id="6609478180749378879">Les données de connexion seront stockées sur cet appareil lorsque vous quitterez le mode de navigation privée. Vous pourrez vous reconnecter à ce site Web avec votre appareil plus tard.</translation>
 <translation id="6611972847767394631">Retrouvez vos onglets ici</translation>
 <translation id="6612358246767739896">Contenu protégé</translation>
 <translation id="6615455863669487791">Démonstration</translation>
@@ -4876,6 +4898,7 @@
 <translation id="6628328486509726751">Téléversement : <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630043285902923878">Recherche d'appareils USB en cours…</translation>
 <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> souhaite un accès permanent à un certificat pour pouvoir s'identifier en votre nom.</translation>
+<translation id="6635362468090274700">Personne ne peut partager du contenu avec vous tant que vous ne choisissez pas d'être visible.<ph name="BR" /><ph name="BR" />Pour devenir visible temporairement, ouvrez la zone de notifications, puis activez Partage à proximité.</translation>
 <translation id="6635944431854494329">Le propriétaire peut contrôler cette fonctionnalité sous Paramètres &gt; Paramètres avancés &gt; Envoyer automatiquement des données de diagnostic et d'utilisation à Google.</translation>
 <translation id="6635956300022133031">Sélectionner et personnaliser des voix de synthèse vocale</translation>
 <translation id="6636588250634969791">Insérez la carte SIM avant de continuer</translation>
@@ -5027,6 +5050,7 @@
 <translation id="6811332638216701903">Nom d'hôte DHCP</translation>
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> ne peut pas être exécuté en tant que « racine ».</translation>
 <translation id="6812841287760418429">Conserver les modifications</translation>
+<translation id="681584224457905309">{COUNT,plural, =1{fichier}one{# fichier}other{# fichiers}}</translation>
 <translation id="6817174620439930047">Demander une autorisation lorsqu'un site veut utiliser des messages exclusifs au système pour accéder aux appareils MIDI (recommandé)</translation>
 <translation id="6818198425579322765">Langue source</translation>
 <translation id="6818802132960437751">Protection antivirus intégrée</translation>
@@ -5047,6 +5071,7 @@
 <translation id="6835762382653651563">Veuillez vous connecter à Internet pour mettre à jour votre <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6838034009068684089">Demander la permission lorsqu'un site souhaite ouvrir et placer des fenêtres sur vos écrans (recommandé)</translation>
 <translation id="6838694093138907871">Code incorrect, veuillez réessayer.</translation>
+<translation id="6838860780238890144">{COUNT,plural, =1{numéro de téléphone}one{# numéro de téléphone}other{# numéros de téléphone}}</translation>
 <translation id="6839225236531462745">Erreur de suppression de certificat</translation>
 <translation id="6839916869147598086">La procédure de connexion a changé</translation>
 <translation id="6840155290835956714">Demander avant d'envoyer</translation>
@@ -5152,6 +5177,7 @@
 <translation id="6955446738988643816">Inspecter la fenêtre contextuelle</translation>
 <translation id="6955535239952325894">Ce paramètre est désactivé sur les navigateurs gérés</translation>
 <translation id="6957044667612803194">Cette clé de sécurité ne prend pas en charge les NIP</translation>
+<translation id="6957914043905853560">{COUNT,plural, =1{lien}one{# lien}other{# liens}}</translation>
 <translation id="6960507406838246615">La mise à jour de Linux est requise</translation>
 <translation id="696103774840402661">Tous les fichiers et toutes les données locales associés à tous les utilisateurs sur cet appareil <ph name="DEVICE_TYPE" /> ont été supprimés définitivement.</translation>
 <translation id="6964390816189577014">Héros</translation>
@@ -6061,6 +6087,7 @@
 <translation id="797394244396603170">Sélectionnez l'appareil avec lequel vous souhaitez partager des fichiers</translation>
 <translation id="7973962044839454485">L'authentification PPP a échoué en raison d'un nom d'utilisateur ou d'un mot de passe incorrect</translation>
 <translation id="7974566588408714340">Réessayer à l’aide de <ph name="EXTENSIONNAME" /></translation>
+<translation id="7974713334845253259">Couleur par défaut</translation>
 <translation id="7974936243149753750">Surbalayage</translation>
 <translation id="7975504106303186033">Vous devez inscrire cet appareil Chrome Education dans un compte pour le secteur de l'éducation. Pour créer un compte, veuillez visiter la page g.co/workspace/edusignup.</translation>
 <translation id="7978412674231730200">Clé privée</translation>
@@ -6218,7 +6245,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> onglet trouvé</translation>
 <translation id="8148760431881541277">Limiter les connexions</translation>
 <translation id="8150259863378108853">Lacros est un navigateur expérimental. Veuillez signaler tout problème en sélectionnant Aide &gt; « Signaler un problème… »</translation>
-<translation id="8151579390896831136">Personnalisez votre profil, y compris son nom</translation>
 <translation id="8151638057146502721">Configurer</translation>
 <translation id="8154790740888707867">Fichier introuvable.</translation>
 <translation id="815491593104042026">Oups… L'authentification a échoué, car elle a été configurée pour utiliser une adresse URL non sécurisée (<ph name="BLOCKED_URL" />). Veuillez communiquer avec votre administrateur.</translation>
@@ -6226,6 +6252,7 @@
 <translation id="8157704005178149728">Configuration de la supervision en cours…</translation>
 <translation id="8158117992543756526">Cet appareil a cessé de recevoir des mises à jour logicielles et de sécurité automatiques en <ph name="MONTH_AND_YEAR" />. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="816055135686411707">Erreur de définition du paramètre de confiance du certificat</translation>
+<translation id="8160775796528709999">Activez l'option Transcription instantanée dans les paramètres pour afficher les sous-titres de vos contenus vidéo et audio</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />, <ph name="TIME_REMAINING" /></translation>
 <translation id="8161293209665121583">Mode Lecteur pour pages Web</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{Déplacer l'onglet vers une nouvelle fenêtre}one{Déplacer l'onglet vers une nouvelle fenêtre}other{Déplacer les onglets vers une nouvelle fenêtre}}</translation>
@@ -6350,6 +6377,7 @@
 <translation id="8300011035382349091">Modifier le favori de cet onglet</translation>
 <translation id="8300374739238450534">Bleu nuit</translation>
 <translation id="8300849813060516376">Échec de l'opération OTASP</translation>
+<translation id="8303616404642252802">{COUNT,plural, =1{Adresse}one{# adresse}other{# adresses}}</translation>
 <translation id="8304383784961451596">Vous n'êtes pas autorisé à utiliser cet appareil. Veuillez communiquer avec l'administrateur pour obtenir l'autorisation de vous y connecter, ou bien connectez-vous à l'aide d'un compte Google supervisé par Family Link.</translation>
 <translation id="8308179586020895837">Demander mon autorisation si <ph name="HOST" /> veut accéder à la caméra</translation>
 <translation id="830868413617744215">Bêta</translation>
@@ -6407,7 +6435,6 @@
 <translation id="8378714024927312812">Géré par votre organisation</translation>
 <translation id="8379878387931047019">Cet appareil ne prend pas en charge le type de clé de sécurité demandé par ce site Web</translation>
 <translation id="8379991678458444070">Revenez ici rapidement en ajoutant cet onglet aux favoris</translation>
-<translation id="8380266723152870797">Nom de la fenêtre</translation>
 <translation id="8382913212082956454">Copier l'adresse de courri&amp;el</translation>
 <translation id="8386091599636877289">Politique introuvable.</translation>
 <translation id="8386903983509584791">Recherche terminée</translation>
@@ -6648,6 +6675,7 @@
 <translation id="867085395664725367">Une erreur de serveur temporaire s'est produite.</translation>
 <translation id="8673026256276578048">Rechercher sur Internet...</translation>
 <translation id="8673383193459449849">Problème de serveur</translation>
+<translation id="8676152597179121671">{COUNT,plural, =1{Vidéo}one{# vidéo}other{# vidéos}}</translation>
 <translation id="8676374126336081632">Effacer l'entrée</translation>
 <translation id="8676770494376880701">Chargeur de faible puissance connecté</translation>
 <translation id="8677212948402625567">Tout réduire…</translation>
@@ -6832,7 +6860,6 @@
 <translation id="8859402192569844210">Impossible de charger les conditions d'utilisation</translation>
 <translation id="8859662783913000679">Compte parental</translation>
 <translation id="8862003515646449717">Passer à un navigateur rapide</translation>
-<translation id="8863140399813345099">Votre visibilité détermine qui peut partager du contenu avec vous lorsque votre écran est déverrouillé</translation>
 <translation id="8863753581171631212">Ouvrir le lien dans une nouvelle fenêtre <ph name="APP" /></translation>
 <translation id="8864055848767439877">Partage de <ph name="TAB_NAME" /> avec <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">L'adresse <ph name="EMAIL" /> a été supprimée de cet appareil</translation>
@@ -6886,7 +6913,6 @@
 <translation id="8912810933860534797">Activer l'analyse automatique</translation>
 <translation id="8915370057835397490">Chargement des suggestions en cours…</translation>
 <translation id="8916476537757519021">Sous-cadre de navigation privée : <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Attribuez un nom à la fenêtre</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> de <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Turquoise foncé</translation>
 <translation id="8925458182817574960">Paramètre&amp;s</translation>
@@ -7074,6 +7100,7 @@
 <translation id="9128870381267983090">Connexion au réseau</translation>
 <translation id="9130015405878219958">Le mode indiqué est incorrect.</translation>
 <translation id="9131487537093447019">Envoyer et recevoir des messages sur les appareils Bluetooth.</translation>
+<translation id="9134119143784876218">Génère automatiquement des sous-titres pour les contenus audio et vidéo en anglais (cette fonctionnalité est uniquement offerte dans le navigateur Chrome pour le moment). L'audio et les sous-titres ne quittent jamais votre appareil.</translation>
 <translation id="9137013805542155359">Afficher l'original</translation>
 <translation id="9137157311132182254">Moteur de recherche préféré</translation>
 <translation id="9137248913990643158">Veuillez démarrer Chrome et vous connecter avant d'utiliser cette application.</translation>
@@ -7121,6 +7148,7 @@
 <translation id="9179524979050048593">Noms d'utilisateurs à l'écran de connexion</translation>
 <translation id="9180281769944411366">Ce processus peut prendre quelques minutes. Démarrage du conteneur Linux en cours…</translation>
 <translation id="9180380851667544951">Le site peut partager votre écran</translation>
+<translation id="918352324374649435">{COUNT,plural, =1{Application}one{# application}other{# applications}}</translation>
 <translation id="9186963452600581158">Se connecter avec un compte Google pour enfant</translation>
 <translation id="9188732951356337132">Envoyer les données d'utilisation et de diagnostic. Actuellement, cet appareil envoie automatiquement à Google des données de diagnostic, de l'appareil et d'utilisation des applications. L'envoi de ces données ne sera pas utilisé pour identifier votre enfant, mais pour assurer la stabilité du système et des applications, et pour apporter d'autres améliorations. Certaines données collectées contribueront également à améliorer les applications Google et aideront nos partenaires, comme les concepteurs Android. Si le paramètre relatif aux autres activités sur le Web et dans les applications est activé pour votre enfant, ces données peuvent être enregistrées dans son compte Google. <ph name="BEGIN_LINK2" />En savoir plus<ph name="END_LINK2" /></translation>
 <translation id="9198090666959937775">Utiliser votre téléphone Android comme clé de sécurité</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 9a5c83f..98dd2fba 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Langues du contenu Web</translation>
 <translation id="3429275422858276529">Ajoutez cette page aux favoris pour la retrouver facilement</translation>
 <translation id="3432227430032737297">Supprimer tous les cookies affichés</translation>
-<translation id="3432757130254800023">Envoyer les contenus audio et vidéo aux écrans sur le réseau local</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Petit problème… Le système n'a pas réussi à établir le verrouillage des attributs du temps d'installation de l'appareil.</translation>
 <translation id="3434272557872943250">Si vous avez activé le paramètre "Activité supplémentaire sur le Web et les applications" pour votre enfant, ces données peuvent être enregistrées dans son compte Google. Découvrez plus en détail ces paramètres et comment les ajuster sur le site families.google.com.</translation>
@@ -6248,7 +6247,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> onglet trouvé</translation>
 <translation id="8148760431881541277">Limiter les connexions</translation>
 <translation id="8150259863378108853">Lacros est un navigateur expérimental. Si vous relevez un problème, sélectionnez Aide &gt; Signaler un problème</translation>
-<translation id="8151579390896831136">Personnalisez votre profil, y compris son nom</translation>
 <translation id="8151638057146502721">Configurer</translation>
 <translation id="8154790740888707867">Fichier introuvable.</translation>
 <translation id="815491593104042026">Petit problème… L'authentification a échoué, car elle a été configurée pour utiliser une URL non sécurisée (<ph name="BLOCKED_URL" />). Veuillez contacter votre administrateur.</translation>
@@ -6439,7 +6437,6 @@
 <translation id="8378714024927312812">Géré par votre organisation</translation>
 <translation id="8379878387931047019">Cet appareil n'est pas compatible avec la clé de sécurité demandée par le site Web</translation>
 <translation id="8379991678458444070">Revenez facilement sur cet onglet en l'ajoutant à vos favoris</translation>
-<translation id="8380266723152870797">Nom de la fenêtre</translation>
 <translation id="8382913212082956454">Copi&amp;er l'adresse e-mail</translation>
 <translation id="8386091599636877289">Règle introuvable.</translation>
 <translation id="8386903983509584791">Recherche terminée</translation>
@@ -6865,7 +6862,6 @@
 <translation id="8859402192569844210">Impossible de charger les conditions d'utilisation</translation>
 <translation id="8859662783913000679">Compte parental</translation>
 <translation id="8862003515646449717">Passez à un navigateur rapide</translation>
-<translation id="8863140399813345099">Le paramètre de visibilité permet de sélectionner les personnes qui peuvent partager des fichiers avec vous lorsque l'écran est déverrouillé</translation>
 <translation id="8863753581171631212">Ouvrir le lien dans une nouvelle fenêtre <ph name="APP" /></translation>
 <translation id="8864055848767439877">Partage de <ph name="TAB_NAME" /> avec <ph name="APP_NAME" />…</translation>
 <translation id="8864458770072227512">Le compte <ph name="EMAIL" /> a été supprimé de cet appareil</translation>
@@ -6919,7 +6915,6 @@
 <translation id="8912810933860534797">Activer la recherche automatique</translation>
 <translation id="8915370057835397490">Chargement des suggestions en cours…</translation>
 <translation id="8916476537757519021">Sous-cadre de navigation privée : <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Attribuez un nom à la fenêtre</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> de <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Turquoise foncé</translation>
 <translation id="8925458182817574960">&amp;Paramètres</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index a81c921f..05bf5dcd 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">Idiomas de contido web</translation>
 <translation id="3429275422858276529">Engade esta páxina aos marcadores para atopala facilmente máis tarde</translation>
 <translation id="3432227430032737297">Eliminar todos os sitios mostrados</translation>
-<translation id="3432757130254800023">Enviar audio e vídeo ás pantallas que se atopan na rede local</translation>
 <translation id="3432762828853624962">Traballadores compartidos</translation>
 <translation id="3433621910545056227">O sistema non puido establecer o bloqueo de atributos do tempo de instalación do dispositivo.</translation>
 <translation id="3434272557872943250">Se está activada a opción de configuración Actividade web e das aplicacións adicional para o teu fillo, estes datos pódense gardar na súa Conta de Google Obtén máis información acerca desta opción de configuración e sobre como axustala en families.google.com.</translation>
@@ -6243,7 +6242,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> pestana atopada</translation>
 <translation id="8148760431881541277">Limitar inicio de sesión</translation>
 <translation id="8150259863378108853">Lacros é un navegador experimental. Se tes algún problema, indícanolo en Axuda &gt; Informar dun problema...</translation>
-<translation id="8151579390896831136">Personalizar o teu perfil (por exemplo, o seu nome)</translation>
 <translation id="8151638057146502721">Configurar</translation>
 <translation id="8154790740888707867">Non hai ningún ficheiro</translation>
 <translation id="815491593104042026">Produciuse un erro na autenticación porque se configurou para utilizar un URL non seguro (<ph name="BLOCKED_URL" />).  Ponte en contacto co teu administrador.</translation>
@@ -6434,7 +6432,6 @@
 <translation id="8378714024927312812">Xestionado pola túa organización</translation>
 <translation id="8379878387931047019">Este dispositivo non é compatible co tipo de chave de seguranza que solicita este sitio web</translation>
 <translation id="8379991678458444070">Engade esta pestana aos marcadores para volver a ela rapidamente</translation>
-<translation id="8380266723152870797">Nome da ventá</translation>
 <translation id="8382913212082956454">Copiar &amp;enderezo de correo electrónico</translation>
 <translation id="8386091599636877289">Non se atopou a política.</translation>
 <translation id="8386903983509584791">Finalizou a busca</translation>
@@ -6859,7 +6856,6 @@
 <translation id="8859402192569844210">Non se puideron cargar as Condicións de servizo</translation>
 <translation id="8859662783913000679">Conta parental</translation>
 <translation id="8862003515646449717">Cambiar a un navegador rápido</translation>
-<translation id="8863140399813345099">A visibilidade do dispositivo permíteche controlar quen pode compartir contido contigo cando a pantalla estea desbloqueada</translation>
 <translation id="8863753581171631212">Abrir ligazón na nova aplicación <ph name="APP" /></translation>
 <translation id="8864055848767439877">Compartindo <ph name="TAB_NAME" /> con <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> quitouse deste dispositivo</translation>
@@ -6913,7 +6909,6 @@
 <translation id="8912810933860534797">Activar a exploración automática</translation>
 <translation id="8915370057835397490">Cargando suxestión</translation>
 <translation id="8916476537757519021">Submarco de incógnito: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Escolle un nome para a ventá</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> de <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Verde azulado escuro</translation>
 <translation id="8925458182817574960">&amp;Configuración</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 1557d69f8..36edd59 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1042,6 +1042,7 @@
 <translation id="2154710561487035718">URL ની કૉપિ કરો</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> જેવું લાગે છે</translation>
 <translation id="2156294658807918600">સર્વિસ વર્કર: <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">ફરીથી સલામતી માટે તપાસ ચલાવો</translation>
 <translation id="2157474325782140681">વધારાની સુવિધાઓ મેળવવા માટે, આ Chromebookમાં કામ કરવા માટે ડિઝાઇન કરવામાં આવેલા Dell ડૉકિંગ સ્ટેશનનો ઉપયોગ કરો.</translation>
 <translation id="215753907730220065">પૂર્ણ સ્ક્રીનથી બહાર નીકળો</translation>
 <translation id="2157875535253991059">આ પૃષ્ઠ હવે પૂર્ણ સ્ક્રીન છે.</translation>
@@ -1986,6 +1987,7 @@
 <translation id="3225319735946384299">કોડ સાઇનિંગ </translation>
 <translation id="3227137524299004712">માઇક્રોફોન</translation>
 <translation id="3233271424239923319">Linux ઍપ અને ફાઇલો</translation>
+<translation id="3238192140106069382">કનેક્ટ કરી રહ્યું છે અને ચકાસી રહ્યું છે</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> માટેની સમયમર્યાદા કાઢી નાખી</translation>
 <translation id="3241680850019875542">પૅક કરવા માટે એક્સ્ટેંશનની રૂટ ડિરેક્ટરી પસંદ કરો. એક્સ્ટેંશનને અપડેટ કરવા માટે, ફરી ઉપયોગ કરવા ખાનગી કી ફાઇલ પણ પસંદ કરો.</translation>
 <translation id="3244294424315804309">અવાજ બંધ કરવાનું ચાલુ રાખો</translation>
@@ -2149,7 +2151,6 @@
 <translation id="3429271624041785769">વેબના કન્ટેન્ટની ભાષાઓ</translation>
 <translation id="3429275422858276529">થોડા સમય પછી આ પેજને સરળતાથી શોધવા માટે તેને બુકમાર્ક કરો</translation>
 <translation id="3432227430032737297">બતાવેલ તમામ દૂર કરો</translation>
-<translation id="3432757130254800023">સ્થાનિક નેટવર્ક પર બતાવવા માટે ઑડિયો અને વીડિયો મોકલો</translation>
 <translation id="3432762828853624962">શેર કરેલા કારીગરો</translation>
 <translation id="3433621910545056227">અરે! સિસ્ટમ ઉપકરણ ઇન્સ્ટોલેશન-સમય લક્ષણોનું લૉક સ્થાપિત કરવામાં નિષ્ફળ ગયું.</translation>
 <translation id="3434272557872943250">જો તમારા બાળક માટે વધારાનું વેબ અને ઍપ પ્રવૃત્તિ સેટિંગ ચાલુ હોય, તો આ ડેટા તેમના Google એકાઉન્ટમાં સાચવવામાં આવી શકે છે. આ સેટિંગ વિશે અને તેમની ગોઠવણ કેવી રીતે કરવી તે વિશે families.google.com પર વધુ જાણો.</translation>
@@ -6237,7 +6238,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ટૅબ મળી છે</translation>
 <translation id="8148760431881541277">સાઇન ઇન કરવાનું મર્યાદિત કરવાના સેટિંગ</translation>
 <translation id="8150259863378108853">Lacros, એક પ્રયોગાત્મક બ્રાઉઝર છે. કૃપા કરીને સહાય વિશેની કોઈપણ સમસ્યાની જાણ કરો &gt; "સમસ્યાની જાણ કરો…"</translation>
-<translation id="8151579390896831136">તમારી પ્રોફાઇલના નામ સહિત તેને કસ્ટમાઇઝ કરો</translation>
 <translation id="8151638057146502721">ગોઠવો</translation>
 <translation id="8154790740888707867">કોઇ ફાઇલ નથી</translation>
 <translation id="815491593104042026">અરેરે!  પ્રમાણીકરણ નિષ્ફળ થયું કારણ કે તે બિન-સુરક્ષિત URL નો ઉપયોગ કરવા માટે ગોઠવાયેલું હતું (<ph name="BLOCKED_URL" />).  કૃપા કરીને તમારા વ્યવસ્થાપકનો સંપર્ક કરો.</translation>
@@ -6428,7 +6428,6 @@
 <translation id="8378714024927312812">તમારી સંસ્થા દ્વારા મેનેજ કરેલ</translation>
 <translation id="8379878387931047019">આ ઉપકરણ આ વેબસાઇટ દ્વારા વિનંતી કરાયેલ સુરક્ષા કોડના પ્રકારનું સમર્થન કરતું નથી</translation>
 <translation id="8379991678458444070">આ ટૅબને બુકમાર્ક કરીને તમે અહીં ઝડપથી પાછા ફરી શકશો</translation>
-<translation id="8380266723152870797">વિંડોનું નામ</translation>
 <translation id="8382913212082956454">&amp;ઇમેઇલ સરનામું કૉપિ કરો</translation>
 <translation id="8386091599636877289">નીતિ મળી નથી.</translation>
 <translation id="8386903983509584791">સ્કૅન પૂર્ણ થયું</translation>
@@ -6854,7 +6853,6 @@
 <translation id="8859402192569844210">સેવાની શરતો લોડ કરી શકાઈ નથી</translation>
 <translation id="8859662783913000679">માતાપિતાનું એકાઉન્ટ</translation>
 <translation id="8862003515646449717">એક ઝડપી બ્રાઉઝર પર સ્વિચ કરો</translation>
-<translation id="8863140399813345099">તમારી સ્ક્રીન અનલૉક કરેલી હોય, ત્યારે કોણ તમારી સાથે શેર કરી શકે તેનું નિયંત્રણ તમારા ડિવાઇસની દૃશ્યતા વડે થાય છે</translation>
 <translation id="8863753581171631212">નવી <ph name="APP" />માં લિંક ખોલો</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" />ને <ph name="APP_NAME" /> પર શેર કરી રહ્યાં છે</translation>
 <translation id="8864458770072227512">આ ડિવાઇસમાંથી <ph name="EMAIL" /> દૂર કરવામાં આવ્યું</translation>
@@ -6908,7 +6906,6 @@
 <translation id="8912810933860534797">ઑટો સ્કૅન ચાલુ કરો</translation>
 <translation id="8915370057835397490">સૂચનને લોડ કરી રહ્યું છે</translation>
 <translation id="8916476537757519021">છુપો મોડ સબફ્રેમ: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">વિન્ડોનું નામ સેટ કરો</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />ની <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">ઘેરો મોરપીંછ</translation>
 <translation id="8925458182817574960">&amp;સેટિંગ્સ</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 5b6b9f06..3b720dd 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1440,7 +1440,7 @@
 <translation id="2604255671529671813">नेटवर्क कनेक्शन गड़बड़ी</translation>
 <translation id="2606246518223360146">डेटा लिंक करें</translation>
 <translation id="2606454609872547359">नहीं, ChromeVox के बिना जारी रखें</translation>
-<translation id="2606568927909309675">लाइव कैप्शन की सुविधा में, अंग्रेज़ी ऑडियो और वीडियो के कैप्शन अपने-आप बनते हैं. आपके डिवाइस पर ऑडियो और कैप्शन हमेशा सुने और देखे जा सकते हैं.</translation>
+<translation id="2606568927909309675">लाइव कैप्शन की सुविधा से, अंग्रेज़ी ऑडियो और वीडियो के कैप्शन अपने-आप बनते हैं. आपके डिवाइस पर ऑडियो और कैप्शन हमेशा सुने और देखे जा सकते हैं.</translation>
 <translation id="2607101320794533334">विषय सार्वजनिक कुंजी जानकारी</translation>
 <translation id="2609896558069604090">शॉर्टकट बनाए...</translation>
 <translation id="2609980095400624569">डिवाइस को फ़ोन से कनेक्ट नहीं किया जा सका</translation>
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">वेब कॉन्टेंट की भाषाएं</translation>
 <translation id="3429275422858276529">बाद में इस पेज को आसानी से पाने के लिए इसे बुकमार्क करें</translation>
 <translation id="3432227430032737297">दिखाई गईं सभी कुकी निकालें</translation>
-<translation id="3432757130254800023">स्‍थानीय नेटवर्क पर उपलब्‍ध प्रदर्शनों पर ऑडियो और वीडियो भेजें</translation>
 <translation id="3432762828853624962">शेयर किए गए वर्कर</translation>
 <translation id="3433621910545056227">ओह!  सिस्टम डिवाइस इंस्टॉलेशन-समय विशेषता लॉक स्थापित नहीं कर पाया.</translation>
 <translation id="3434272557872943250">अगर आपके बच्चे के लिए 'अन्य वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा उसके Google खाते में सेव किया जा सकता है. इन सेटिंग के बारे में ज़्यादा जानें. साथ ही, जानें कि families.google.com पर इन्हें कैसे नियंत्रित करें.</translation>
@@ -2739,7 +2738,7 @@
 <translation id="4047726037116394521">होम पेज पर जाएं</translation>
 <translation id="4049783682480068824">{COUNT,plural, =1{# संपर्क उपलब्ध नहीं है. इस संपर्क के साथ आस-पास शेयर करने की सुविधा का इस्तेमाल करने के लिए, इस संपर्क के Google खाते से जुड़ा ईमेल पता अपने संपर्कों में जोड़ें.}one{# संपर्क उपलब्ध नहीं है. इस संपर्क के साथ आस-पास शेयर करने की सुविधा का इस्तेमाल करने के लिए, इस संपर्क के Google खाते से जुड़ा ईमेल पता अपने संपर्कों में जोड़ें.}other{# संपर्क उपलब्ध नहीं हैं. इन संपर्कों के साथ आस-पास शेयर करने की सुविधा का इस्तेमाल करने के लिए, इन संपर्कों के Google खातों से जुड़े ईमेल पते अपने संपर्कों में जोड़ें.}}</translation>
 <translation id="4050225813016893843">पुष्टि करने का तरीका</translation>
-<translation id="4050534976465737778">पक्का करें कि दोनों डिवाइस अनलॉक किए गए हों और एक-दूसरे के पास रखे हों. साथ ही, दोनों का ब्लूटूथ चालू हो. अगर आप किसी ऐसे Chromebook के साथ फ़ाइलें शेयर कर रहे हैं जो आपके संपर्क में नहीं है, तो पक्का करें कि उसमें 'आस-पास के डिवाइस को दिखे' सुविधा चालू हो (स्टेटस एरिया खोलकर यह सुविधा चालू करें). <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
+<translation id="4050534976465737778">पक्का करें कि दोनों डिवाइस अनलॉक किए गए हों और एक-दूसरे के पास रखे हों. साथ ही, दोनों का ब्लूटूथ चालू हो. अगर आप किसी ऐसे Chromebook के साथ फ़ाइलें शेयर कर रहे हैं जो आपकी संपर्क सूची में नहीं है, तो पक्का करें कि उसमें 'आस-पास के डिवाइस को दिखे' सुविधा चालू हो (स्टेटस एरिया खोलकर यह सुविधा चालू करें). <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="4052120076834320548">छोटा</translation>
 <translation id="4054070260844648638">सभी लोगों को दिख रहा है</translation>
 <translation id="4056908315660577142">आप उस समयसीमा तक पहुंच गए हैं जो आपके माता-पिता ने <ph name="APP_NAME" /> Chrome ऐप्लिकेशन के लिए तय की थी. आप इसे कल <ph name="TIME_LIMIT" /> के लिए इस्तेमाल कर सकते हैं.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> टैब मिला</translation>
 <translation id="8148760431881541277">साइन-इन करने की सीमा तय करें</translation>
 <translation id="8150259863378108853">Lacros ब्राउज़र अभी जांच के दौर से गुज़र रहा है. कृपया इससे जुड़ी किसी भी तरह की समस्या की शिकायत करने के लिए, सहायता &gt; "समस्या की शिकायत करें..." पर जाएं</translation>
-<translation id="8151579390896831136">अपनी प्रोफ़ाइल और इसके नाम को पसंद के मुताबिक बनाएं</translation>
 <translation id="8151638057146502721">कॉन्फ़िगर करें</translation>
 <translation id="8154790740888707867">कोई फ़ाइल नहीं</translation>
 <translation id="815491593104042026">ओह!  प्रमाणीकरण नहीं हो पाया क्‍योंकि उसे असुरक्षित URL (<ph name="BLOCKED_URL" />) का उपयोग करने के लिए कॉन्‍फ़िगर किया गया था.  कृपया अपने एडमिन से संपर्क करें.</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">आपके संगठन की ओर से प्रबंधित</translation>
 <translation id="8379878387931047019">इस डिवाइस पर इस तरह की 'सुरक्षा चाबी' काम नहीं करती है जिसका इस वेबसाइट में अनुरोध किया गया है</translation>
 <translation id="8379991678458444070">इस टैब को बुकमार्क करके यहां जल्दी वापस आएं</translation>
-<translation id="8380266723152870797">विंडो का नाम</translation>
 <translation id="8382913212082956454">ईमेल पते की कॉपी बनाएं</translation>
 <translation id="8386091599636877289">नीति नहीं मिली.</translation>
 <translation id="8386903983509584791">स्कैन पूरा हुआ</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">सेवा की शर्तें लोड नहीं की जा सकीं</translation>
 <translation id="8859662783913000679">अभिभावक का खाता</translation>
 <translation id="8862003515646449717">किसी तेज़ ब्राउज़र पर जाएं</translation>
-<translation id="8863140399813345099">'किसको दिखाई दे' सेटिंग में जाकर, आप यह तय कर सकते हैं कि डिवाइस की स्क्रीन अनलॉक होने पर कौन आपके साथ फ़ाइलें शेयर कर सकता है</translation>
 <translation id="8863753581171631212">नए <ph name="APP" /> में लिंक खोलें</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> को <ph name="APP_NAME" /> के साथ शेयर किया जा रहा है</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> को इस डिवाइस से हटा दिया गया</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">अपने आप स्कैन करने की सुविधा चालू करें</translation>
 <translation id="8915370057835397490">सुझाव लोड हो रहे हैं</translation>
 <translation id="8916476537757519021">गुप्त सबफ़्रेम: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">विंडो का नाम सेट करें</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> का <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">गहरा नीला-हरा</translation>
 <translation id="8925458182817574960">&amp;सेटिंग</translation>
@@ -7104,7 +7099,7 @@
 <translation id="9128870381267983090">नेटवर्क से कनेक्ट करें</translation>
 <translation id="9130015405878219958">गलत मोड डाला गया.</translation>
 <translation id="9131487537093447019">ब्लूटूथ डिवाइस से मैसेज भेजें और मैसेज पाएं.</translation>
-<translation id="9134119143784876218">लाइव कैप्शन की सुविधा में, अंग्रेज़ी ऑडियो और वीडियो के कैप्शन अपने-आप बनते हैं (फ़िलहाल, यह सुविधा सिर्फ़ Chrome ब्राउज़र में उपलब्ध है). आपके डिवाइस पर ऑडियो और कैप्शन हमेशा सुने और देखे जा सकते हैं.</translation>
+<translation id="9134119143784876218">लाइव कैप्शन की सुविधा से, अंग्रेज़ी ऑडियो और वीडियो के कैप्शन अपने-आप बनते हैं (फ़िलहाल, यह सुविधा सिर्फ़ Chrome ब्राउज़र में उपलब्ध है). आपके डिवाइस पर ऑडियो और कैप्शन हमेशा सुने और देखे जा सकते हैं.</translation>
 <translation id="9137013805542155359">मूल दिखाएं</translation>
 <translation id="9137157311132182254">पसंदीदा सर्च इंजन</translation>
 <translation id="9137248913990643158">इस ऐप्लिकेशन का उपयोग करने से पहले कृपया Chrome शुरू करके उसमें साइन इन करें.</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index f2f8384..9d790a5 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Jezici web-sadržaja</translation>
 <translation id="3429275422858276529">Označite ovu stranicu da biste je kasnije lakše pronašli</translation>
 <translation id="3432227430032737297">Ukloni sve prikazano</translation>
-<translation id="3432757130254800023">slati audio i videozapise na zaslone na lokalnoj mreži</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Ups! Sustav nije uspješno uspostavio zaključavanje atributa vremena instalacije uređaja.</translation>
 <translation id="3434272557872943250">Ako je za vaše dijete uključena dodatna aktivnost na webu i u aplikacijama, ti se podaci mogu spremati na djetetov Google račun. Više o tim postavkama i načinu na koji ih možete prilagoditi saznajte na families.google.com.</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470">Pronađena je <ph name="NUM" /> kartica</translation>
 <translation id="8148760431881541277">Ograničavanje prijave</translation>
 <translation id="8150259863378108853">Lacros je eksperimentalni preglednik. Poteškoće prijavite putem odjeljka Pomoć &gt; "Prijavite poteškoću..."</translation>
-<translation id="8151579390896831136">Prilagodite profil, uključujući njegov naziv</translation>
 <translation id="8151638057146502721">Konfiguracija</translation>
 <translation id="8154790740888707867">Nema datoteke</translation>
 <translation id="815491593104042026">Ups! Autentifikacija nije uspjela jer je konfigurirana za upotrebu nesigurnog URL-a (<ph name="BLOCKED_URL" />). Obratite se administratoru.</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">Pod upravljanjem vaše organizacije</translation>
 <translation id="8379878387931047019">Ovaj uređaj ne podržava vrstu sigurnosnog ključa koju zahtijeva ta web-lokacija</translation>
 <translation id="8379991678458444070">Označite ovu karticu da biste se brzo vratili na nju</translation>
-<translation id="8380266723152870797">Naziv prozora</translation>
 <translation id="8382913212082956454">Kopiraj &amp;adresu e-pošte</translation>
 <translation id="8386091599636877289">Pravilo nije pronađeno.</translation>
 <translation id="8386903983509584791">Traženje je dovršeno</translation>
@@ -6861,7 +6858,6 @@
 <translation id="8859402192569844210">Učitavanje Uvjeta pružanja usluge nije uspjelo</translation>
 <translation id="8859662783913000679">Račun roditelja</translation>
 <translation id="8862003515646449717">Prijeđite na brz preglednik</translation>
-<translation id="8863140399813345099">Pomoću vidljivosti uređaja određuje se tko s vama može dijeliti kad vam je zaslon otključan</translation>
 <translation id="8863753581171631212">Otvori vezu u novom prozoru aplikacije <ph name="APP" /></translation>
 <translation id="8864055848767439877">Kartica <ph name="TAB_NAME" /> dijeli se s aplikacijom <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Račun <ph name="EMAIL" /> uklonjen je s ovog uređaja</translation>
@@ -6915,7 +6911,6 @@
 <translation id="8912810933860534797">Omogući automatsko traženje</translation>
 <translation id="8915370057835397490">Učitavanje prijedloga</translation>
 <translation id="8916476537757519021">Anonimni podokvir: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Postavljanje naziva prozora</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> – <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Tamnotirkiznoplava</translation>
 <translation id="8925458182817574960">&amp;Postavke</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 57050d4..c9f632e 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Webes tartalmak nyelvei</translation>
 <translation id="3429275422858276529">Adja hozzá az oldalt a könyvjelzőkhöz, hogy később könnyen megtalálja</translation>
 <translation id="3432227430032737297">Az összes megjelenített eltávolítása</translation>
-<translation id="3432757130254800023">Hang és videó küldése a helyi hálózaton lévő kijelzőkre</translation>
 <translation id="3432762828853624962">Shared workers</translation>
 <translation id="3433621910545056227">Hoppá! A rendszer nem tudta létrehozni az eszköz telepítésiidő-attribútumainak zárolását.</translation>
 <translation id="3434272557872943250">Ha az Internetes és alkalmazástevékenységek beállítás is be van kapcsolva a gyermekénél, akkor a rendszer ezeket az adatokat mentheti a gyermek Google-fiókjába. Ezekről a funkciókról és beállításuk módjáról a families.google.com oldalon találhat további információt.</translation>
@@ -6247,7 +6246,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> lapot találtunk</translation>
 <translation id="8148760431881541277">Bejelentkezés korlátozása</translation>
 <translation id="8150259863378108853">A Lacros egy kísérleti böngésző. Az esetleges hibákat a Súgó &gt; „Probléma bejelentése...” pontjában jelentheti be.</translation>
-<translation id="8151579390896831136">Szabja személyre profilját, a profil nevével együtt.</translation>
 <translation id="8151638057146502721">Konfigurálás</translation>
 <translation id="8154790740888707867">Nincs fájl</translation>
 <translation id="815491593104042026">Hoppá! A hitelesítés nem sikerült, mert azt egy nem biztonságos URL használatára állították be (<ph name="BLOCKED_URL" />). Kérjük, forduljon rendszergazdájához.</translation>
@@ -6438,7 +6436,6 @@
 <translation id="8378714024927312812">Az Ön szervezete kezeli</translation>
 <translation id="8379878387931047019">Az eszköz nem támogatja a webhely által kért biztonsági hardverkulcstípust</translation>
 <translation id="8379991678458444070">Gyorsan visszajuthat ide, ha hozzáadja a lapot a könyvjelzőkhöz</translation>
-<translation id="8380266723152870797">Ablak neve</translation>
 <translation id="8382913212082956454">&amp;E-mail cím másolása</translation>
 <translation id="8386091599636877289">Az irányelv nem található.</translation>
 <translation id="8386903983509584791">Keresés befejezve</translation>
@@ -6863,7 +6860,6 @@
 <translation id="8859402192569844210">Nem sikerült az Általános Szerződési Feltételek betöltése</translation>
 <translation id="8859662783913000679">Szülői fiók</translation>
 <translation id="8862003515646449717">Váltás gyors böngészőre</translation>
-<translation id="8863140399813345099">Eszközének láthatósága befolyásolja azt, hogy ki oszthat meg Önnel fájlokat, amíg az Ön képernyőjének zárolása fel van oldva.</translation>
 <translation id="8863753581171631212">Link megnyitása új <ph name="APP" />-ablakban</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> megosztása a következővel: <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">A(z) <ph name="EMAIL" /> fiókot eltávolítottuk erről az eszközről</translation>
@@ -6917,7 +6913,6 @@
 <translation id="8912810933860534797">Automatikus keresés engedélyezése</translation>
 <translation id="8915370057835397490">Javaslatok betöltése</translation>
 <translation id="8916476537757519021">Inkognitó subframe: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Ablak nevének beállítása</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> – <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Sötét pávakék</translation>
 <translation id="8925458182817574960">&amp;Beállítások</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 24ce524c..138b2c4 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -2156,7 +2156,6 @@
 <translation id="3429271624041785769">Վեբ բովանդակության լեզուներ</translation>
 <translation id="3429275422858276529">Էջանշեք այս կայքէջը՝ ավելի ուշ այն հեշտությամբ գտնելու համար</translation>
 <translation id="3432227430032737297">Հեռացնել բոլոր ցուցադրվածները</translation>
-<translation id="3432757130254800023">Ուղարկել աուդիո և վիդեո ֆայլերը տեղային ցանցի սարքերին</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Համակարգին չհաջողվեց կողպել սարքի հատկությունները՝ տեղադրման ժամանակ:</translation>
 <translation id="3434272557872943250">Եթե Վեբ որոնման և հավելվածների լրացուցիչ պատմությունը միացված է, այս տվյալները կպահվեն երեխայի Google հաշվում։ Այս կարգավորումների մասին ավելին իմանալու և դրանք ըստ ձեր հայեցողության փոփոխելու համար անցեք families.google.com էջ։</translation>
@@ -6248,7 +6247,6 @@
 <translation id="8147900440966275470">Գտնվել է <ph name="NUM" /> ներդիր</translation>
 <translation id="8148760431881541277">Մուտքի սահմանափակում</translation>
 <translation id="8150259863378108853">Lacros-ը փորձնական դիտարկիչ է։ Խնդիրների մասին կարող եք հաղորդել՝ սեղմելով Օգնություն &gt; «Հաղորդել խնդրի մասին»։</translation>
-<translation id="8151579390896831136">Անհատականացրեք պրոֆիլը, այդ թվում՝ դրա անունը</translation>
 <translation id="8151638057146502721">Կազմաձևել</translation>
 <translation id="8154790740888707867">Ֆայլ չի գտնվել</translation>
 <translation id="815491593104042026">Իսկորոշումը չհաջողվեց, քանի որ նրա կազմաձևումը թույլ է տալիս օգտագործել ոչ ապահով URL (<ph name="BLOCKED_URL" />): Կապվեք ձեր ադմինիստրատորի հետ:</translation>
@@ -6439,7 +6437,6 @@
 <translation id="8378714024927312812">Կառավարվում է ձեր կազմակերպության կողմից</translation>
 <translation id="8379878387931047019">Սարքը չի աջակցում այս կայքի պահանջած անվտանգության բանալու տեսակը</translation>
 <translation id="8379991678458444070">Էջանշեք այս ներդիրը՝ ավելի ուշ այցելելու համար</translation>
-<translation id="8380266723152870797">Պատուհանի անունը</translation>
 <translation id="8382913212082956454">Պատճենել &amp;հասցեն</translation>
 <translation id="8386091599636877289">Քաղաքականությունը չգտնվեց։</translation>
 <translation id="8386903983509584791">Որոնումն ավարտվեց</translation>
@@ -6865,7 +6862,6 @@
 <translation id="8859402192569844210">Չհաջողվեց բեռնել օգտագործման պայմանները</translation>
 <translation id="8859662783913000679">Ծնողի հաշիվը</translation>
 <translation id="8862003515646449717">Ընտրեք արագ դիտարկիչ</translation>
-<translation id="8863140399813345099">Տեսանելիության կարգավորումների միջոցով դուք կարող եք նշել, թե ում եք թույլատրում կիսվել ձեզ հետ տվյալներով, երբ ձեր սարքն ապակողպված է։</translation>
 <translation id="8863753581171631212">Բացել հղումը <ph name="APP" />-ի նոր պատուհանում</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> ներդիրն ուղարկվում է <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> հասցեն հեռացվեց այս սարքից</translation>
@@ -6919,7 +6915,6 @@
 <translation id="8912810933860534797">Միացնել ավտոմատ որոնումը</translation>
 <translation id="8915370057835397490">Առաջարկը բեռնվում է</translation>
 <translation id="8916476537757519021">Ինկոգնիտո ռեժիմի ենթաշրջանակ՝ <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Նշեք պատուհանի անվանումը</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> (<ph name="GIVEN_NAME" />)</translation>
 <translation id="8923880975836399332">Մուգ փիրուզագույն</translation>
 <translation id="8925458182817574960">&amp;Կարգավորումներ</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 7a662a0..dc6a0fc 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Bahasan konten web</translation>
 <translation id="3429275422858276529">Bookmark halaman ini agar mudah ditemukan nanti</translation>
 <translation id="3432227430032737297">Buang Semua Yang Ditampilkan</translation>
-<translation id="3432757130254800023">Kirim audio dan video ke layar di jaringan lokal</translation>
 <translation id="3432762828853624962">Pekerja Bersama</translation>
 <translation id="3433621910545056227">Ups! Sistem gagal membuat kunci atribut waktu pemasangan perangkat.</translation>
 <translation id="3434272557872943250">Jika setelan Aktivitas Web &amp; Aplikasi tambahan diaktifkan untuk anak Anda, data ini mungkin akan disimpan ke Akun Google miliknya. Pelajari setelan ini dan cara menyesuaikannya lebih lanjut di families.google.com.</translation>
@@ -4369,7 +4368,7 @@
 <translation id="6011074160056912900">Jaringan ethernet</translation>
 <translation id="6011193465932186973">Sidik jari</translation>
 <translation id="6011449291337289699">Hapus data situs</translation>
-<translation id="6013027779243312217">Dapatkan teks untuk media dan video Anda</translation>
+<translation id="6013027779243312217">Dapatkan teks untuk audio dan video Anda</translation>
 <translation id="6015796118275082299">Tahun</translation>
 <translation id="6016178549409952427">Membuka konten tambahan <ph name="CURRENT_ELEMENT" /> dari <ph name="TOTAL_ELEMENTS" /></translation>
 <translation id="6016551720757758985">Konfirmasi Powerwash dengan kembali ke versi sebelumnya</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> Tab Ditemukan</translation>
 <translation id="8148760431881541277">Batasi login</translation>
 <translation id="8150259863378108853">Lacros adalah browser eksperimental. Laporkan masalah melalui Bantuan &gt; "Laporkan masalah..."</translation>
-<translation id="8151579390896831136">Sesuaikan profil Anda, termasuk nama</translation>
 <translation id="8151638057146502721">Konfigurasi</translation>
 <translation id="8154790740888707867">Tidak ada file</translation>
 <translation id="815491593104042026">Ups!  Autentikasi gagal karena telah dikonfigurasi untuk menggunakan URL yang tidak aman (<ph name="BLOCKED_URL" />).  Hubungi administrator Anda.</translation>
@@ -6254,7 +6252,7 @@
 <translation id="8157704005178149728">Menyiapkan pengawasan</translation>
 <translation id="8158117992543756526">Perangkat ini berhenti mendapatkan update software dan keamanan otomatis pada <ph name="MONTH_AND_YEAR" />. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="816055135686411707">Kesalahan Saat Menyetel Kepercayaan Sertifikat</translation>
-<translation id="8160775796528709999">Dapatkan teks untuk media dan video Anda dengan mengaktifkan Teks Otomatis di setelan</translation>
+<translation id="8160775796528709999">Dapatkan teks untuk audio dan video Anda dengan mengaktifkan Teks Otomatis di setelan</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />, <ph name="TIME_REMAINING" /></translation>
 <translation id="8161293209665121583">Mode pembaca untuk halaman web</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{Pindahkan Tab ke Jendela Baru}other{Pindahkan beberapa Tab ke Jendela Baru}}</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Dikelola oleh organisasi</translation>
 <translation id="8379878387931047019">Perangkat ini tidak mendukung jenis kunci keamanan yang diminta oleh situs ini</translation>
 <translation id="8379991678458444070">Kembali ke halaman secara cepat dengan mem-bookmark tab ini</translation>
-<translation id="8380266723152870797">Nama jendela</translation>
 <translation id="8382913212082956454">Salin alamat &amp;email</translation>
 <translation id="8386091599636877289">Kebijakan tidak ditemukan.</translation>
 <translation id="8386903983509584791">Pemindaian selesai</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Persyaratan Layanan tidak dapat dimuat</translation>
 <translation id="8859662783913000679">Akun orang tua</translation>
 <translation id="8862003515646449717">Beralih ke browser cepat</translation>
-<translation id="8863140399813345099">Visibilitas perangkat akan mengontrol siapa saja yang dapat berbagi dengan Anda saat kunci layar terbuka</translation>
 <translation id="8863753581171631212">Buka link di <ph name="APP" /> baru</translation>
 <translation id="8864055848767439877">Membagikan <ph name="TAB_NAME" /> ke <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> dihapus dari perangkat ini</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Aktifkan pindai otomatis</translation>
 <translation id="8915370057835397490">Memuat saran</translation>
 <translation id="8916476537757519021">Subframe Mode Samaran: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Setel Nama Jendela</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Hijau kebiruan gelap</translation>
 <translation id="8925458182817574960">&amp;Setelan</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 3061fe8..4308f4bf 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Tungumál vefefnis</translation>
 <translation id="3429275422858276529">Settu þessa síðu í bókamerki til að auðvelt sé að finna hana síðar</translation>
 <translation id="3432227430032737297">Fjarlægja öll sem birtast</translation>
-<translation id="3432757130254800023">Senda hljóð og mynd til skjáa á staðarnetinu</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Úbbs! Kerfinu mistókst að koma á eigindalás við uppsetningu tækisins.</translation>
 <translation id="3434272557872943250">Ef kveikt er á ítarlegri vef- og forritavirkni fyrir barnið geta þessi gögn verið vistuð á Google reikningi barnsins. Fáðu frekari upplýsingar um þessar stillingar og hvernig þær eru stilltar á families.google.com.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470">Fann <ph name="NUM" /> flipa</translation>
 <translation id="8148760431881541277">Takmarka innskráningu</translation>
 <translation id="8150259863378108853">Lacros er vafri á tilraunastigi. Tilkynntu vandamál með Hjálp &gt; „Tilkynna vandamál...“</translation>
-<translation id="8151579390896831136">Sérsníddu prófílinn, þar með talið heiti hans</translation>
 <translation id="8151638057146502721">Grunnstilla</translation>
 <translation id="8154790740888707867">Engin skrá</translation>
 <translation id="815491593104042026">Úbbs! Auðkenning mistókst vegna þess að hún var stillt á að nota óörugga vefslóð (<ph name="BLOCKED_URL" />). Hafðu samband við stjórnanda.</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">Stjórnað af fyrirtækinu þínu</translation>
 <translation id="8379878387931047019">Þetta tæki styður ekki þá gerð öryggislykils sem vefsíðan óskar eftir</translation>
 <translation id="8379991678458444070">Finndu þennan flipa aftur með því að bókamerkja hann</translation>
-<translation id="8380266723152870797">Gluggaheiti</translation>
 <translation id="8382913212082956454">Afrita n&amp;etfang</translation>
 <translation id="8386091599636877289">Regla fannst ekki.</translation>
 <translation id="8386903983509584791">Skönnun lokið</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Ekki var hægt að hlaða þjónustuskilmálum</translation>
 <translation id="8859662783913000679">Reikningur foreldris</translation>
 <translation id="8862003515646449717">Skiptu yfir í hraðvirkari vafra</translation>
-<translation id="8863140399813345099">Sýnileiki tækisins þíns stýrir því hverjir geta deilt efni með þér þegar skjárinn er ekki læstur</translation>
 <translation id="8863753581171631212">Opna tengil í <ph name="APP" /> í nýjum glugga</translation>
 <translation id="8864055848767439877">Deilir <ph name="TAB_NAME" /> í <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> var fjarlægt úr þessu tæki</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Kveikja á sjálfvirkri skönnun</translation>
 <translation id="8915370057835397490">Hleður tillögu</translation>
 <translation id="8916476537757519021">Huliðsundirrammi: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Stilla gluggaheiti</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> – <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Dökkblágrænn</translation>
 <translation id="8925458182817574960">&amp;Stillingar</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 1079463..b530cc7e 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">Lingue contenuti web</translation>
 <translation id="3429275422858276529">Aggiungi questa pagina ai preferiti per trovarla facilmente in seguito</translation>
 <translation id="3432227430032737297">Rimuovi tutti i cookie visualizzati</translation>
-<translation id="3432757130254800023">Invio di audio e video agli schermi sulla rete locale</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Spiacenti. Il sistema non è riuscito a stabilire il blocco degli attributi del tempo di installazione del dispositivo.</translation>
 <translation id="3434272557872943250">Se l'impostazione Attività web e app aggiuntiva è attiva per tuo figlio, questi dati potrebbero essere salvati nel suo Account Google. Ulteriori informazioni su queste impostazioni e su come configurarle sono disponibili all'indirizzo families.google.com.</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470">È stata trovata <ph name="NUM" /> scheda</translation>
 <translation id="8148760431881541277">Limitare l'accesso</translation>
 <translation id="8150259863378108853">Lacros è un browser sperimentale. Segnala eventuali problemi selezionando Guida &gt; Segnala un problema…</translation>
-<translation id="8151579390896831136">Personalizza il tuo profilo, nome incluso</translation>
 <translation id="8151638057146502721">Configura</translation>
 <translation id="8154790740888707867">Nessun file</translation>
 <translation id="815491593104042026">Spiacenti, impossibile eseguire l'autenticazione perché è stato configurato l'utilizzo di un URL non protetto (<ph name="BLOCKED_URL" />). Contatta l'amministratore.</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">Gestito dalla tua organizzazione</translation>
 <translation id="8379878387931047019">Questo dispositivo non supporta il tipo di token di sicurezza richiesto da questo sito web</translation>
 <translation id="8379991678458444070">Aggiungi questa scheda ai preferiti per ritrovarla rapidamente</translation>
-<translation id="8380266723152870797">Nome della finestra</translation>
 <translation id="8382913212082956454">Copia indirizzo &amp;email</translation>
 <translation id="8386091599636877289">Norme non trovate.</translation>
 <translation id="8386903983509584791">Scansione completata</translation>
@@ -6860,7 +6857,6 @@
 <translation id="8859402192569844210">Impossibile caricare i Termini di servizio</translation>
 <translation id="8859662783913000679">Account genitore</translation>
 <translation id="8862003515646449717">Passa a un browser veloce</translation>
-<translation id="8863140399813345099">L'impostazione Visibilità del dispositivo ti consente di stabilire chi può condividere file con te mentre il tuo schermo è sbloccato</translation>
 <translation id="8863753581171631212">Apri link in nuova finestra di <ph name="APP" /></translation>
 <translation id="8864055848767439877">Condivisione di <ph name="TAB_NAME" /> con <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">L'account <ph name="EMAIL" /> è stato rimosso da questo dispositivo</translation>
@@ -6914,7 +6910,6 @@
 <translation id="8912810933860534797">Attiva scansione automatica</translation>
 <translation id="8915370057835397490">Caricamento suggerimento</translation>
 <translation id="8916476537757519021">Frame secondario modalità di navigazione in incognito: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Imposta nome della finestra</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> di <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Verde petrolio</translation>
 <translation id="8925458182817574960">&amp;Impostazioni</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index db93ee0..7f4d850 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1087,7 +1087,7 @@
 <translation id="2200356397587687044">‏Chrome צריך הרשאה כדי להמשיך</translation>
 <translation id="220138918934036434">לחצן 'הסתרה'</translation>
 <translation id="2202898655984161076">היתה בעיה ברישום מדפסות. ייתכן שחלק מהמדפסות שלך לא נרשמו בהצלחה ב-<ph name="CLOUD_PRINT_NAME" />.</translation>
-<translation id="2204034823255629767">לקרוא ולשנות את כל מה שאתה מקליד</translation>
+<translation id="2204034823255629767">לקרוא ולשנות את כל מה שהקלדת</translation>
 <translation id="220858061631308971">יש להזין את קוד האימות הזה ב-"<ph name="DEVICE_NAME" />":</translation>
 <translation id="2212565012507486665">‏אישור קובצי cookie</translation>
 <translation id="2213140827792212876">הסרת השיתוף</translation>
@@ -1330,7 +1330,7 @@
 <translation id="2478176599153288112">הרשאות של קובץ מדיה עבור "<ph name="EXTENSION" />"</translation>
 <translation id="247949520305900375">שיתוף אודיו</translation>
 <translation id="248003956660572823">הסיסמאות לא נשמרו</translation>
-<translation id="2480868415629598489">שינוי נתונים שאתה מעתיק ומדביק</translation>
+<translation id="2480868415629598489">שינוי נתונים שהעתקת והדבקת</translation>
 <translation id="2482878487686419369">התראות</translation>
 <translation id="2482895651873876648">הכרטיסייה הועברה לקבוצה <ph name="GROUP_NAME" /> ‏– <ph name="GROUP_CONTENTS" /></translation>
 <translation id="2484959914739448251">‏כדי לנקות את נתוני הגלישה מכל המכשירים המסונכרנים ומחשבון Google שלך, <ph name="BEGIN_LINK" />יש להזין את ביטוי הסיסמה<ph name="END_LINK" />.</translation>
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">השפות של תוכן האינטרנט</translation>
 <translation id="3429275422858276529">כדאי לסמן את הדף בסימנייה כדי לגשת אליו בקלות בהמשך</translation>
 <translation id="3432227430032737297">‏הסרת כל קובצי ה-cookie המוצגים</translation>
-<translation id="3432757130254800023">שליחה של קטעי אודיו וסרטונים למסכים ברשת המקומית</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">אופס!  המערכת לא הצליחה ליצור את נעילת התכונות של המכשיר המתרחשת בזמן ההתקנה.</translation>
 <translation id="3434272557872943250">‏אם ההגדרה 'פעילות באתרי אינטרנט ובאפליקציות נוספים' הופעלה עבור הילד/ה שלך, ייתכן שהנתונים יישמרו בחשבון Google שלהם. למידע נוסף על ההגדרות האלה ואיך ניתן לשנות אותן, יש לעבור לכתובת families.google.com.</translation>
@@ -3639,7 +3638,7 @@
 <translation id="5153234146675181447">מחיקת הטלפון</translation>
 <translation id="5154108062446123722">הגדרות מתקדמות עבור <ph name="PRINTING_DESTINATION" /></translation>
 <translation id="5154702632169343078">נושא</translation>
-<translation id="5157635116769074044">הצמד דף זה למסך הפתיחה...</translation>
+<translation id="5157635116769074044">הצמדה של הדף למסך הפתיחה…</translation>
 <translation id="5158983316805876233">‏שימוש באותו שרת proxy עבור כל הפרוטוקולים</translation>
 <translation id="5159094275429367735">‏הגדרת Crostini</translation>
 <translation id="5159419673777902220">ההרשאות של התוסף הושבתו על ידי ההורה שלך</translation>
@@ -3811,7 +3810,7 @@
 <translation id="5353252989841766347">‏ייצוא סיסמאות מ-Chrome</translation>
 <translation id="5355099869024327351">‏מתן הרשאה ל-Assistant להציג הודעות</translation>
 <translation id="5355191726083956201">מופעלת הגנה משופרת</translation>
-<translation id="5355926466126177564">התוסף "<ph name="EXTENSION_NAME" />" שינה את הדף שמוצג כשאתה מבצע חיפוש מסרגל הכתובות.</translation>
+<translation id="5355926466126177564">התוסף "<ph name="EXTENSION_NAME" />" שינה את הדף שמוצג בעת ביצוע חיפוש מסרגל הכתובות.</translation>
 <translation id="5359910752122114278">תוצאה אחת</translation>
 <translation id="5360150013186312835">הצגה בסרגל הכלים</translation>
 <translation id="5362741141255528695">יש לבחור קובץ מפתח פרטי.</translation>
@@ -3842,7 +3841,7 @@
 <translation id="5390743329570580756">שליחה עבור</translation>
 <translation id="5392192690789334093">מורשים לשלוח התראות</translation>
 <translation id="5393761864111565424">{COUNT,plural, =1{קישור}two{# קישורים}many{# קישורים}other{# קישורים}}</translation>
-<translation id="5397794290049113714">אתה</translation>
+<translation id="5397794290049113714">את/ה</translation>
 <translation id="5398497406011404839">סימניות מוסתרות</translation>
 <translation id="5398572795982417028">התייחסות לדף מחוץ לטווח, המגבלה היא <ph name="MAXIMUM_PAGE" /></translation>
 <translation id="5402815541704507626">הורדת עדכון דרך חבילת גלישה</translation>
@@ -3899,7 +3898,7 @@
 <translation id="5463275305984126951">אינדקס של <ph name="LOCATION" /></translation>
 <translation id="5463625433003343978">מתבצע חיפוש מכשירים…</translation>
 <translation id="5463856536939868464">התפריט מכיל סימניות נסתרות</translation>
-<translation id="5464632865477611176">הפעל באופן חד פעמי</translation>
+<translation id="5464632865477611176">הפעלה חד פעמית</translation>
 <translation id="5464660706533281090">ילדים לא יכולים לשנות את ההגדרה הזו.</translation>
 <translation id="5466374726908360271">הד&amp;בקה וחיפוש של "<ph name="SEARCH_TERMS" />"</translation>
 <translation id="5468119583641912100">אתרים יכולים לבקש הרשאה להפעיל תוכן מוגן (מומלץ)</translation>
@@ -4134,7 +4133,7 @@
 <translation id="572328651809341494">כרטיסיות אחרונות</translation>
 <translation id="5723508132121499792">אין יישומים פועלים ברקע</translation>
 <translation id="5723967018671998714">‏קובצי cookie של צד שלישי חסומים במצב אנונימי</translation>
-<translation id="5727728807527375859">‏תוספים, Google Apps ועיצובים עלולים לפגוע במחשב שלך. ברצונך באמת להמשיך?</translation>
+<translation id="5727728807527375859">‏תוספים, Google Apps ועיצובים עלולים לפגוע במחשב שלך. להמשיך?</translation>
 <translation id="5728450728039149624">‏אפשרויות נעילת מסך ב-Smart Lock</translation>
 <translation id="5729712731028706266">&amp;הצגה</translation>
 <translation id="5731247495086897348">הד&amp;בקה ומעבר אל</translation>
@@ -5241,7 +5240,7 @@
 <translation id="701080569351381435">הצגת המקור</translation>
 <translation id="7014174261166285193">ההתקנה נכשלה.</translation>
 <translation id="7017004637493394352">‏צריך לומר שוב "Hey Google"</translation>
-<translation id="7017219178341817193">הוסף דף חדש</translation>
+<translation id="7017219178341817193">הוספת דף חדש</translation>
 <translation id="7017354871202642555">לא ניתן להגדיר מצב לאחר שהחלון הוגדר.</translation>
 <translation id="7018275672629230621">לקרוא ולשנות את היסטוריית הגלישה שלך</translation>
 <translation id="7019805045859631636">מהיר</translation>
@@ -6076,7 +6075,7 @@
 <translation id="7966571622054096916">{COUNT,plural, =1{פריט אחד ברשימת הסימניות}two{{COUNT} פריטים ברשימת הסימניות}many{{COUNT} פריטים ברשימת הסימניות}other{{COUNT} פריטים ברשימת הסימניות}}</translation>
 <translation id="7968072247663421402">אפשרויות ספק</translation>
 <translation id="7968198493605442410">העתקת הקישור לטקסט</translation>
-<translation id="7968742106503422125">קריאה ושינוי של נתונים שאתה מעתיק ומדביק</translation>
+<translation id="7968742106503422125">קריאה ושינוי של נתונים שהעתקת והדבקת</translation>
 <translation id="7968833647796919681">הפעלת איסוף של נתוני ביצועים</translation>
 <translation id="7968982339740310781">הצגת פרטים</translation>
 <translation id="7969046989155602842">פקודה</translation>
@@ -6099,7 +6098,7 @@
 <translation id="7984068253310542383">שיקוף מסך של <ph name="DISPLAY_NAME" /></translation>
 <translation id="7986295104073916105">קריאה ושינוי של הגדרות בשביל סיסמאות שמורות</translation>
 <translation id="7987814697832569482">‏החיבור יתבצע תמיד דרך ה-VPN הזה</translation>
-<translation id="7988355189918024273">יש להפוך תכונות נגישות לפעילות</translation>
+<translation id="7988355189918024273">יש להפעיל תכונות נגישות</translation>
 <translation id="7990197569510003844"><ph name="USERNAME" /> <ph name="MASKED_PASSWORD" /> תישמר בחשבון <ph name="ACCOUNT" /></translation>
 <translation id="7991296728590311172">הגדרות גישה באמצעות מתג</translation>
 <translation id="7997826902155442747">עדיפות תהליך</translation>
@@ -6247,7 +6246,6 @@
 <translation id="8147900440966275470">נמצאה כרטיסייה אחת (<ph name="NUM" />)</translation>
 <translation id="8148760431881541277">הגבלת כניסה</translation>
 <translation id="8150259863378108853">‏Lacros הוא דפדפן ניסיוני. אפשר לדווח על כל בעיה דרך 'עזרה' &gt; "דיווח על בעיה..."</translation>
-<translation id="8151579390896831136">כדאי להתאים אישית את הפרופיל, כולל שמו</translation>
 <translation id="8151638057146502721">הגדרה</translation>
 <translation id="8154790740888707867">אין קובץ</translation>
 <translation id="815491593104042026">אופס! האימות נכשל מפני שהוא הוגדר להשתמש בכתובת אתר לא-מאובטחת (<ph name="BLOCKED_URL" />). יש לפנות למנהל המערכת.</translation>
@@ -6438,7 +6436,6 @@
 <translation id="8378714024927312812">מנוהל על-ידי הארגון</translation>
 <translation id="8379878387931047019">המכשיר לא תומך במפתח אבטחה מהסוג המבוקש באתר הזה</translation>
 <translation id="8379991678458444070">הוספת הכרטיסייה לסימניות תאפשר לך לגשת אליה במהירות</translation>
-<translation id="8380266723152870797">שם החלון</translation>
 <translation id="8382913212082956454">העתקת &amp;כתובת אימייל</translation>
 <translation id="8386091599636877289">המדיניות לא נמצאה.</translation>
 <translation id="8386903983509584791">הסריקה הושלמה</translation>
@@ -6730,7 +6727,7 @@
 <translation id="8731787661154643562">מספר יציאה</translation>
 <translation id="8731851055419582926">הסיסמאות נבדקו</translation>
 <translation id="8732030010853991079">אפשר להשתמש בתוסף על ידי לחיצה על סמל הזה.</translation>
-<translation id="8732212173949624846">לקרוא ולשנות את היסטוריית הגלישה בכל המכשירים שבהם אתה מחובר לחשבון</translation>
+<translation id="8732212173949624846">לקרוא ולשנות את היסטוריית הגלישה בכל המכשירים שבהם התחברת לחשבון</translation>
 <translation id="8732844209475700754">עוד הגדרות הקשורות לפרטיות, אבטחה ואיסוף נתונים</translation>
 <translation id="8734073480934656039">הפעלת ההגדרה הזו מאפשרת הפעלה אוטומטית של יישומי קיוסק בעת האתחול.</translation>
 <translation id="8734674662128056360">‏חסימת קובצי cookie של צד שלישי</translation>
@@ -6865,7 +6862,6 @@
 <translation id="8859402192569844210">לא ניתן לטעון את התנאים וההגבלות</translation>
 <translation id="8859662783913000679">חשבון הורה</translation>
 <translation id="8862003515646449717">החלפה לדפדפן מהיר</translation>
-<translation id="8863140399813345099">הרשאות הגישה של המכשיר קובעות מי יכול לשתף איתך כשהמסך לא נעול</translation>
 <translation id="8863753581171631212">פתיחת הקישור ב-<ph name="APP" /></translation>
 <translation id="8864055848767439877">המערכת משתפת את <ph name="TAB_NAME" /> עם <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> הוסר מהמכשיר הזה</translation>
@@ -6885,7 +6881,7 @@
 <translation id="8875736897340638404">בחירת הרשאות הגישה שלך</translation>
 <translation id="8876307312329369159">לא ניתן לשנות את ההגדרה הזו בסשן להדגמה.</translation>
 <translation id="8877448029301136595">[ספריית אב]</translation>
-<translation id="8879284080359814990">הצ&amp;ג ככרטיסייה</translation>
+<translation id="8879284080359814990">הצ&amp;גה ככרטיסייה</translation>
 <translation id="8879921471468674457">שמירת פרטי הכניסה</translation>
 <translation id="8880054210564666174">לא ניתן להוריד את רשימת אנשי הקשר. יש לבדוק את החיבור לרשת, או <ph name="LINK_BEGIN" />לנסות שוב<ph name="LINK_END" />.</translation>
 <translation id="8881020143150461183">יש לנסות שוב. לתמיכה טכנית יש לפנות אל <ph name="CARRIER_NAME" />.</translation>
@@ -6919,7 +6915,6 @@
 <translation id="8912810933860534797">הפעלת סריקה אוטומטית</translation>
 <translation id="8915370057835397490">טעינת ההצעה מתבצעת...</translation>
 <translation id="8916476537757519021">תת-מסגרת למצב אנונימי: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">הגדרת שם החלון</translation>
 <translation id="8918637186205009138">ה-<ph name="DEVICE_TYPE" /> של <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">כחול-ירקרק כהה</translation>
 <translation id="8925458182817574960">&amp;הגדרות</translation>
@@ -6953,7 +6948,7 @@
 <translation id="8962051932294470566">אפשר לשתף רק קובץ אחד בכל פעם. יש לנסות שוב כאשר ההעברה הנוכחית תסתיים.</translation>
 <translation id="8962083179518285172">הסתרת פרטים</translation>
 <translation id="8962918469425892674">האתר הזה משתמש בחיישני תנועה או תאורה.</translation>
-<translation id="8965037249707889821">הזן את הסיסמה הישנה</translation>
+<translation id="8965037249707889821">יש להזין את הסיסמה הישנה</translation>
 <translation id="8966809848145604011">פרופילים אחרים</translation>
 <translation id="8966870118594285808">ניתן לפתוח כרטיסייה מחדש אם סגרת אותה בטעות</translation>
 <translation id="8967427617812342790">הוסף לרשימת הקריאה</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 6fb4368..58a49bbd 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">ウェブ コンテンツの言語</translation>
 <translation id="3429275422858276529">後で見つけやすいようにこのページをブックマークできます</translation>
 <translation id="3432227430032737297">表示中のサイトをすべて削除</translation>
-<translation id="3432757130254800023">映像と音声をローカル ネットワーク経由でディスプレイに送信する</translation>
 <translation id="3432762828853624962">共有ワーカー</translation>
 <translation id="3433621910545056227">デバイス インストール時の属性のロックを確立できませんでした。</translation>
 <translation id="3434272557872943250">お子様の [その他のウェブとアプリのアクティビティ] の設定がオンになっている場合、このデータはお子様の Google アカウントに保存されます。これらの設定の詳細と変更方法については、families.google.com をご覧ください。</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> 個のタブが見つかりました</translation>
 <translation id="8148760431881541277">ログインの制限</translation>
 <translation id="8150259863378108853">Lacros は試験運用版のブラウザです。問題が発生した場合は、[ヘルプ] &gt; [問題の報告...] からご報告ください。</translation>
-<translation id="8151579390896831136">プロファイルの名前などをカスタマイズします</translation>
 <translation id="8151638057146502721">設定</translation>
 <translation id="8154790740888707867">ファイルがありません</translation>
 <translation id="815491593104042026">セキュリティで保護されていない URL(<ph name="BLOCKED_URL" />)を使用するよう設定されているため、認証に失敗しました。管理者にお問い合わせください。</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">組織によって管理されています</translation>
 <translation id="8379878387931047019">このデバイスでは、このウェブサイトからリクエストされているセキュリティ キーのタイプはサポートされていません。</translation>
 <translation id="8379991678458444070">このタブをブックマークに追加すると、すばやくこのタブに戻ることができます</translation>
-<translation id="8380266723152870797">ウィンドウ名</translation>
 <translation id="8382913212082956454">メール アドレスをコピー(&amp;E)</translation>
 <translation id="8386091599636877289">ポリシーが見つかりません。</translation>
 <translation id="8386903983509584791">スキャンが完了しました</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">利用規約を読み込むことができませんでした。</translation>
 <translation id="8859662783913000679">保護者のアカウント</translation>
 <translation id="8862003515646449717">高速なブラウザをぜひご利用ください</translation>
-<translation id="8863140399813345099">デバイスの公開設定では、画面のロックが解除されているときに、あなたとファイルを共有できる相手を管理します</translation>
 <translation id="8863753581171631212">新しい <ph name="APP" /> でリンクを開く</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> を <ph name="APP_NAME" /> に共有しています</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> はこのデバイスから削除されました</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">自動スキャンを有効にする</translation>
 <translation id="8915370057835397490">候補を読み込んでいます</translation>
 <translation id="8916476537757519021">シークレット サブフレーム: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ウィンドウ名の設定</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> さんの <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">暗い青緑</translation>
 <translation id="8925458182817574960">設定(&amp;S)</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 62091e01..431e3ffc 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">ვებკონტენტის ენები</translation>
 <translation id="3429275422858276529">დაამატეთ ეს გვერდი სანიშნეებს, რათა მოგვიანებით მარტივად იპოვოთ</translation>
 <translation id="3432227430032737297">ყველა ნაჩვენების ამოშლა</translation>
-<translation id="3432757130254800023">ადგილობრივ ქსელში არსებულ ეკრანებზე აუდიოსა და ვიდეოს გაგზავნა</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">უი! სისტემამ ვერ დააყენა მოწყობილობის ინსტალაციის დროის ატრიბუტების ბლოკი.</translation>
 <translation id="3434272557872943250">თუ თქვენი შვილისთვის ჩართულია ვებსა და აპებში დამატებითი აქტივობის პარამეტრი, აღნიშნული მონაცემები შესაძლოა შეინახოს მის Google ანგარიშში. ამ პარამეტრების და მათი დარეგულირების შესახებ დამატებითი ინფორმაცია ხელმისაწვდომია შემდეგ მისამართზე: families.google.com.</translation>
@@ -6242,7 +6241,6 @@
 <translation id="8147900440966275470">მოიძებნა <ph name="NUM" /> ჩანართი</translation>
 <translation id="8148760431881541277">შესვლის შეზღუდვა</translation>
 <translation id="8150259863378108853">Lacros ექსპერიმენტული ბრაუზერია. პრობლემის შესატყობინებლად გადადით აქ: დახმარება &gt; „შეტყობინება პრობლემის შესახებ...“</translation>
-<translation id="8151579390896831136">მოირგეთ პროფილი, მისი სახელის ჩათვლით</translation>
 <translation id="8151638057146502721">კონფიგურირება</translation>
 <translation id="8154790740888707867">ფაილი არ არის</translation>
 <translation id="815491593104042026">უი! ავთენტიფიკაცია ვერ განხორციელდა, რადგან იგი დაკონფიგურირდა არაუსაფრთხო URL-ის (<ph name="BLOCKED_URL" />) გამოსაყენებლად. დაუკავშირდით ადმინისტრატორს.</translation>
@@ -6433,7 +6431,6 @@
 <translation id="8378714024927312812">იმართება თქვენი ორგანიზაციის მიერ</translation>
 <translation id="8379878387931047019">ამ მოწყობილობის მიერ მხარდაუჭერელია უსაფრთხოების გასაღების ის ტიპი, რომელსაც ითხოვს ეს ვებსაიტი</translation>
 <translation id="8379991678458444070">დაბრუნდით აქ უფრო სწრაფად — დაამატეთ ეს ჩანართი სანიშნეებს</translation>
-<translation id="8380266723152870797">ფანჯრის სახელი</translation>
 <translation id="8382913212082956454">&amp;ელფოსტის მისამართის დაკოპირება</translation>
 <translation id="8386091599636877289">წესი ვერ მოიძებნა.</translation>
 <translation id="8386903983509584791">სკანირება დასრულდა</translation>
@@ -6858,7 +6855,6 @@
 <translation id="8859402192569844210">მომსახურების პირობები ვერ ჩაიტვირთა</translation>
 <translation id="8859662783913000679">მშობლის ანგარიში</translation>
 <translation id="8862003515646449717">გადადით სწრაფ ბრაუზერზე</translation>
-<translation id="8863140399813345099">თქვენი მოწყობილობის ხილვადობა განსაზღვრავს, თუ ვის შეუძლია თქვენთვის გაზიარება, როცა თქვენი ეკრანი განბლოკილია</translation>
 <translation id="8863753581171631212">ბმულის გახსნა ახალ <ph name="APP" />-ში</translation>
 <translation id="8864055848767439877">მიმდინარეობს „<ph name="TAB_NAME" />“-ის გაზიარება <ph name="APP_NAME" />-თან</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> ამოიშალა ამ მოწყობილობიდან</translation>
@@ -6912,7 +6908,6 @@
 <translation id="8912810933860534797">ავტომატური სკანირების ჩართვა</translation>
 <translation id="8915370057835397490">შემოთავაზების ჩატვირთვა</translation>
 <translation id="8916476537757519021">ანონიმური ქვეჩარჩო: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">მიუთითეთ ფანჯრის სახელი</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />-ის <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">მუქი ფირუზისფერი</translation>
 <translation id="8925458182817574960">&amp;პარამეტრები</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index c41c3ec..005ca2f4 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -2151,7 +2151,6 @@
 <translation id="3429271624041785769">Веб-мазмұн тілдері</translation>
 <translation id="3429275422858276529">Бетті кейінірек табу үшін оған бетбелгі қою</translation>
 <translation id="3432227430032737297">Барлық көрсетілгендерді өшіру</translation>
-<translation id="3432757130254800023">Жергілікті желідегі дисплейлерге аудио және бейне жіберу</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Жүйенің құрылғы орнату уақытының атрибуттары құлпын орнатуы сәтсіз аяқталды.</translation>
 <translation id="3434272557872943250">Егер "Интернет пен қолданбаларды пайдаланудың қосымша тарихы" параметрі қосулы болса, бұл деректер балаңыздың Google есептік жазбасына сақталуы мүмкін. Бұл параметрлер және оларды қалай реттеу керектігі туралы ақпаратты families.google.com сайтынан біле аласыз.</translation>
@@ -3235,7 +3234,7 @@
 <translation id="4651484272688821107">Демо режиміндегі ресурстары бар онлайн компонент жүктелмеді.</translation>
 <translation id="4652935475563630866">Камераның параметріне өзгеріс енгізілгендіктен, Parallels Desktop қайта іске қосылуы қажет. Жалғастыру үшін Parallels Desktop қолданбасын қайта іске қосыңыз.</translation>
 <translation id="4653405415038586100">Linux-ті конфигурациялау қатесі шықты</translation>
-<translation id="4654236001025007561">Файлдарды Chromebook және Android құрылғыларымен бөлісіңіз.</translation>
+<translation id="4654236001025007561">Файлдарды маңайдағы Chromebook және Android құрылғыларымен бөлісіңіз.</translation>
 <translation id="4657914796247705218">TrackPoint жылдамдығы</translation>
 <translation id="465878909996028221">Тек http, https және файл протоколдары браузер бағытын ауыстырады.</translation>
 <translation id="4659077111144409915">Негізгі есептік жазба</translation>
@@ -6241,7 +6240,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> қойынды табылды.</translation>
 <translation id="8148760431881541277">Кіруді шектеу</translation>
 <translation id="8150259863378108853">Lacros – эксперименттік браузер. Ондағы кез келген ақауды "Анықтама &gt; Ақау туралы хабарлау" тармағынан көрсетіңіз.</translation>
-<translation id="8151579390896831136">Профиліңізді, сонымен қатар оның атын реттеу</translation>
 <translation id="8151638057146502721">Конфигурациялау</translation>
 <translation id="8154790740888707867">Файл жоқ</translation>
 <translation id="815491593104042026">Аутентификация сәтсіз аяқталды, себебі ол қауіпсіз емес URL (<ph name="BLOCKED_URL" />) пайдалануға конфигурацияланған. Әкімшіңізге хабарласыңыз.</translation>
@@ -6432,7 +6430,6 @@
 <translation id="8378714024927312812">Ұйым басқарады</translation>
 <translation id="8379878387931047019">Бұл құрылғы веб-сайт талап еткен қауіпсіздік кілтін қолдамайды</translation>
 <translation id="8379991678458444070">Осы қойындыға бетбелгі қою арқылы оған жылдам оралыңыз.</translation>
-<translation id="8380266723152870797">Терезенің аты</translation>
 <translation id="8382913212082956454">&amp;Электрондық пошта мекенжайын көшіру</translation>
 <translation id="8386091599636877289">Саясат табылмады.</translation>
 <translation id="8386903983509584791">Іздеу аяқталды</translation>
@@ -6857,7 +6854,6 @@
 <translation id="8859402192569844210">Қызмет көрсету шарттары жүктелмеді.</translation>
 <translation id="8859662783913000679">Ата-ананың есептік жазбасы</translation>
 <translation id="8862003515646449717">Жылдам браузерге ауысыңыз</translation>
-<translation id="8863140399813345099">Экранның құлпы ашық кезде, көріну мүмкіндігі сізбен кім бөлісе алатынын басқарады.</translation>
 <translation id="8863753581171631212">Сілтемені жаңа <ph name="APP" /> қолданбасында ашу</translation>
 <translation id="8864055848767439877">"<ph name="TAB_NAME" />" қойындысы <ph name="APP_NAME" /> қолданбасына жіберілуде.</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> осы құрылғыдан өшірілген.</translation>
@@ -6911,7 +6907,6 @@
 <translation id="8912810933860534797">Автоматты түрде іздеу функциясын қосу</translation>
 <translation id="8915370057835397490">Ұсынысты жүктеу</translation>
 <translation id="8916476537757519021">Инкогнито режиміндегі ішкі жақтау: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Терезе атауын көрсетіңіз</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> иелік ететін <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Қою көкшіл жасыл</translation>
 <translation id="8925458182817574960">&amp;Параметрлер</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index eab9c228..24095303 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">ភាសា​របស់ខ្លឹមសារ​បណ្ដាញ</translation>
 <translation id="3429275422858276529">ចំណាំ​ទំព័រនេះ​ដើម្បី​ងាយស្រួល​ក្នុងការ​រកវា​នៅពេល​ក្រោយ</translation>
 <translation id="3432227430032737297">លុបអ្វីដែលបានបង្ហាញចេញទាំងអស់</translation>
-<translation id="3432757130254800023">ផ្ញើសម្លេង និងវីដេអូទៅអេក្រង់នៅលើបណ្តាញមូលដ្ឋាន</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">អូ! ប្រព័ន្ធបានបរាជ័យក្នុងការបង្កើតសោគុណលក្ខណៈរយៈពេលតំឡើងឧបករណ៍។</translation>
 <translation id="3434272557872943250">ប្រសិនបើ​ការកំណត់​សកម្មភាព​កម្មវិធី និង​គេហទំព័រ​បន្ថែម​ត្រូវបាន​បើកសម្រាប់​កូនរបស់អ្នក នោះ​ទិន្នន័យនេះ​អាចត្រូវ​បានរក្សាទុក​ទៅក្នុង​គណនី Google របស់គាត់។ ស្វែងយល់​បន្ថែម​អំពី​ការកំណត់​ទាំង​នេះ និង​របៀប​កែតម្រូវ​​វាតាមរយៈ families.google.com។</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470">បានរកឃើញផ្ទាំង <ph name="NUM" /></translation>
 <translation id="8148760431881541277">ដាក់កំហិត​ការចូលគណនី</translation>
 <translation id="8150259863378108853">Lacros គឺជាកម្មវិធីរុករក​តាមអ៊ីនធឺណិត​សាកល្បង។ សូមរាយការណ៍​អំពីបញ្ហាទាំងឡាយ​តាមរយៈជំនួយ &gt; "រាយការណ៍អំពីបញ្ហា..."</translation>
-<translation id="8151579390896831136">ប្ដូរ​កម្រងព័ត៌មាន​របស់អ្នក​តាមបំណង រួមទាំង​ឈ្មោះ​កម្រងព័ត៌មាន​ផងដែរ</translation>
 <translation id="8151638057146502721">តំឡើង</translation>
 <translation id="8154790740888707867">គ្មានឯកសារទេ</translation>
 <translation id="815491593104042026">អូយ! ការសម្គាល់អត្តសញ្ញាណបានបរាជ័យ ពីព្រោះវាត្រូវបានតំឡើងដើម្បីប្រើ URL (<ph name="BLOCKED_URL" />) ដែលគ្មានសុវត្ថិភាព។  សូមទំនាក់ទំនងអ្នកគ្រប់គ្រងរបស់អ្នក។</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">គ្រប់គ្រងដោយ​ស្ថាប័ន​របស់អ្នក</translation>
 <translation id="8379878387931047019">ឧបករណ៍នេះ​មិនស្គាល់​ប្រភេទសោសុវត្ថិភាព​ដែលបានស្នើសុំ​ដោយគេហទំព័រ​នេះទេ</translation>
 <translation id="8379991678458444070">ត្រឡប់​មកទីនេះ​វិញបាន​យ៉ាង​រហ័ស​ដោយ​ចំណាំ​ផ្ទាំងនេះ</translation>
-<translation id="8380266723152870797">ឈ្មោះ​វិនដូ</translation>
 <translation id="8382913212082956454">ចម្លងអាសយដ្ឋានអ៊ីម៉ែល</translation>
 <translation id="8386091599636877289">រកមិន​ឃើញគោលការណ៍ទេ។</translation>
 <translation id="8386903983509584791">ការស្កេនបានបញ្ចប់</translation>
@@ -6861,7 +6858,6 @@
 <translation id="8859402192569844210">មិនអាចផ្ទុក​លក្ខខណ្ឌប្រើប្រាស់​បានទេ</translation>
 <translation id="8859662783913000679">គណនី​មាតាបិតា</translation>
 <translation id="8862003515646449717">ប្តូរទៅ​កម្មវិធីរុករកតាមអ៊ីនធឺណិតដែលរហ័ស</translation>
-<translation id="8863140399813345099">លទ្ធភាព​មើលឃើញឧបករណ៍​របស់អ្នក​គ្រប់គ្រង​ថា​តើនរណាខ្លះអាច​ចែករំលែក​ជាមួយអ្នកបាន នៅពេល​អេក្រង់​របស់អ្នកមិនជាប់សោ</translation>
 <translation id="8863753581171631212">បើក​តំណ​នៅក្នុង <ph name="APP" /> ថ្មី</translation>
 <translation id="8864055848767439877">កំពុងចែករំលែក <ph name="TAB_NAME" /> ទៅ <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">បាន​លុប <ph name="EMAIL" /> ចេញ​ពីឧបករណ៍នេះ</translation>
@@ -6915,7 +6911,6 @@
 <translation id="8912810933860534797">បើក​ការស្កេនស្វ័យប្រវត្តិ</translation>
 <translation id="8915370057835397490">កំពុងដំណើរការការផ្តល់យោបល់</translation>
 <translation id="8916476537757519021">ហ្វ្រេមរងអនាមិក៖ <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">កំណត់​ឈ្មោះ​វិនដូ</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> របស់ <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">បៃតងចាស់</translation>
 <translation id="8925458182817574960">ការកំណត់</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 015400b..53057d3 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">ವೆಬ್ ವಿಷಯದ ಭಾಷೆಗಳು</translation>
 <translation id="3429275422858276529">ಈ ಪುಟವನ್ನು ನಂತರ ಸುಲಭವಾಗಿ ಹುಡುಕಲು ಬುಕ್‌ಮಾರ್ಕ್‌ ಮಾಡಿ</translation>
 <translation id="3432227430032737297">ತೋರಿಸಿರುವ ಎಲ್ಲವನ್ನೂ ತೆಗೆದುಹಾಕು</translation>
-<translation id="3432757130254800023">ಸ್ಥಳೀಯ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಪ್ರದರ್ಶನಗಳಿಗೆ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊ ಕಳುಹಿಸಿ</translation>
 <translation id="3432762828853624962">ಹಂಚಿಕೊಳ್ಳಲಾದ ಕೆಲಸಗಾರರು</translation>
 <translation id="3433621910545056227">ಓಹ್! ಸಾಧನ ಇನ್‌ಸ್ಟಾಲೇಶನ್-ಸಮಯದ ಲಕ್ಷಣಗಳ ಲಾಕ್ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಸಿಸ್ಟಂ ವಿಫಲವಾಗಿದೆ.</translation>
 <translation id="3434272557872943250">ನಿಮ್ಮ ಮಗುವಿಗಾಗಿ, ಹೆಚ್ಚುವರಿ ವೆಬ್ ಮತ್ತು ಆ್ಯಪ್‌ ಚಟುವಟಿಕೆಯನ್ನು ಆನ್ ಮಾಡಿದ್ದರೆ, ಈ ಡೇಟಾವನ್ನು ಅವರ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಬಹುದು. ಈ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಕುರಿತು ಮತ್ತು ಇವುಗಳನ್ನು ಹೇಗೆ ಹೊಂದಿಸುವುದು ಎಂಬ ಕುರಿತು families.google.com ನಲ್ಲಿ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ.</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ಟ್ಯಾಬ್ ಕಂಡುಬಂದಿದೆ</translation>
 <translation id="8148760431881541277">ಸೈನ್ ಇನ್ ಅನ್ನು ಮಿತಿಗೊಳಿಸಿ</translation>
 <translation id="8150259863378108853">ಲ್ಯಾಕ್ರೋಸ್ ಪ್ರಾಯೋಗಿಕ ಬ್ರೌಸರ್ ಆಗಿದೆ. ಯಾವುದೇ ಸಮಸ್ಯೆಗಳಿದ್ದರೆ, ಸಹಾಯ &gt; "ಸಮಸ್ಯೆಯನ್ನು ವರದಿ ಮಾಡಿ..." ನಲ್ಲಿ ವರದಿ ಮಾಡಿ</translation>
-<translation id="8151579390896831136">ನಿಮ್ಮ ಪ್ರೊಫೈಲ್‌ನ ಹೆಸರು ಒಳಗೊಂಡಂತೆ, ಪ್ರೊಫೈಲ್ ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ</translation>
 <translation id="8151638057146502721">ಕಾನ್ಫಿಗರ್ ಮಾಡಿ</translation>
 <translation id="8154790740888707867">ಫೈಲ್‌ ಇಲ್ಲ</translation>
 <translation id="815491593104042026">ಓಹ್‌!  ದೃಢೀಕರಣವು ವಿಫಲಗೊಂಡಿದೆ ಏಕೆಂದರೆ ಅದನ್ನು ಸುರಕ್ಷಿತವಲ್ಲದ URL (<ph name="BLOCKED_URL" />) ಬಳಸಿ ಕಾನ್ಫಿಗರ್‌ ಮಾಡಿದೆ.  ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation>
 <translation id="8379878387931047019">ಈ ವೆಬ್‌ಸೈಟ್ ವಿನಂತಿಸಿದ ಸುರಕ್ಷತಾ ಕೀಯ ಪ್ರಕಾರವನ್ನು ಈ ಸಾಧನ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation>
 <translation id="8379991678458444070">ಈ ಟ್ಯಾಬ್ ಅನ್ನು ಬುಕ್‌ಮಾರ್ಕ್‌ ಮಾಡಿ ಮತ್ತು ನಿಮಗೆ ಅಗತ್ಯವಿರುವಾಗ ತ್ವರಿತವಾಗಿ ಇಲ್ಲಿಗೆ ಹಿಂತಿರುಗಿ</translation>
-<translation id="8380266723152870797">ವಿಂಡೋ ಹೆಸರು</translation>
 <translation id="8382913212082956454">ಇಮೇಲ್ &amp;ವಿಳಾಸವನ್ನು ನಕಲು ಮಾಡಿ</translation>
 <translation id="8386091599636877289">ಕಾರ್ಯನೀತಿ ಕಂಡುಬಂದಿಲ್ಲ.</translation>
 <translation id="8386903983509584791">ಸ್ಕ್ಯಾನ್ ಪೂರ್ಣಗೊಂಡಿದೆ</translation>
@@ -6861,7 +6858,6 @@
 <translation id="8859402192569844210">ಸೇವಾ ನಿಯಮಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="8859662783913000679">ಪೋಷಕರ ಖಾತೆ</translation>
 <translation id="8862003515646449717">ವೇಗವಾದ ಬ್ರೌಸರ್‌ಗೆ ಬದಲಿಸಿ</translation>
-<translation id="8863140399813345099">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಅನ್‌ಲಾಕ್ ಆಗಿರುವಾಗ ನಿಮ್ಮ ಜೊತೆಗೆ ಯಾರು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಎಂಬುದನ್ನು ನಿಮ್ಮ ಸಾಧನದ ಗೋಚರತೆ ನಿಯಂತ್ರಿಸುತ್ತದೆ</translation>
 <translation id="8863753581171631212">ಹೊಸ <ph name="APP" /> ನಲ್ಲಿ ಲಿಂಕ್‌ ಅನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> ಅನ್ನು <ph name="APP_NAME" /> ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತಿದೆ</translation>
 <translation id="8864458770072227512">ಈ ಸಾಧನದಿಂದ <ph name="EMAIL" /> ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ</translation>
@@ -6915,7 +6911,6 @@
 <translation id="8912810933860534797">ಸ್ವಯಂ ಸ್ಕ್ಯಾನ್ ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="8915370057835397490">ಸಲಹೆಯನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation>
 <translation id="8916476537757519021">ಅದೃಶ್ಯ ಉಪಫ್ರೇಮ್: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ವಿಂಡೋ ಹೆಸರನ್ನು ಹೊಂದಿಸಿ</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />ನ <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">ಗಾಢ ಕೆನ್ನೀಲಿ</translation>
 <translation id="8925458182817574960">&amp;ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index d75e1c8..724074e5 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">웹 콘텐츠 언어</translation>
 <translation id="3429275422858276529">이 페이지를 북마크에 추가하여 나중에 쉽게 찾으세요.</translation>
 <translation id="3432227430032737297">표시된 항목 모두 삭제</translation>
-<translation id="3432757130254800023">로컬 네트워크의 디스플레이로 오디오 및 동영상 전송</translation>
 <translation id="3432762828853624962">공유 작업자</translation>
 <translation id="3433621910545056227">시스템이 기기 설치 시간 속성 잠금을 설정하는 데 실패했습니다.</translation>
 <translation id="3434272557872943250">자녀의 추가 웹 및 앱 활동이 사용 설정되어 있다면 이 데이터가 자녀의 Google 계정에 저장될 수 있습니다. families.google.com에서 이러한 설정 및 설정 조정 방법을 자세히 알아보세요.</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470">탭 <ph name="NUM" />개 찾음</translation>
 <translation id="8148760431881541277">로그인 제한</translation>
 <translation id="8150259863378108853">Lacros는 실험 단계의 브라우저입니다. 문제가 발생하면 도움말 &gt; ‘문제 신고...’에서 신고해 주세요.</translation>
-<translation id="8151579390896831136">이름을 포함한 프로필 맞춤설정</translation>
 <translation id="8151638057146502721">구성</translation>
 <translation id="8154790740888707867">파일 없음</translation>
 <translation id="815491593104042026">보안되지 않는 URL(<ph name="BLOCKED_URL" />)을 사용하도록 설정되었기 때문에 인증할 수 없습니다. 관리자에게 문의하세요.</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">조직에서 관리</translation>
 <translation id="8379878387931047019">이 기기는 이 웹사이트에서 요청하는 유형의 보안 키를 지원하지 않습니다.</translation>
 <translation id="8379991678458444070">이 탭을 북마크에 추가하여 간편하게 다시 방문하세요.</translation>
-<translation id="8380266723152870797">창 이름</translation>
 <translation id="8382913212082956454">이메일 주소 복사(&amp;E)</translation>
 <translation id="8386091599636877289">정책을 찾을 수 없습니다.</translation>
 <translation id="8386903983509584791">검색 완료</translation>
@@ -6860,7 +6857,6 @@
 <translation id="8859402192569844210">서비스 약관을 로드할 수 없습니다.</translation>
 <translation id="8859662783913000679">부모 계정</translation>
 <translation id="8862003515646449717">빠른 브라우저로 전환</translation>
-<translation id="8863140399813345099">화면이 잠금 해제되어 있을 때 나와 파일을 공유할 수 있는 사람은 기기 공개 범위에 따라 다릅니다.</translation>
 <translation id="8863753581171631212">새 <ph name="APP" />에서 링크 열기</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> 탭을 <ph name="APP_NAME" /> 앱과 공유하는 중</translation>
 <translation id="8864458770072227512">기기에서 <ph name="EMAIL" />이(가) 삭제되었습니다.</translation>
@@ -6914,7 +6910,6 @@
 <translation id="8912810933860534797">자동 스캔 사용</translation>
 <translation id="8915370057835397490">추천 단어 로드 중...</translation>
 <translation id="8916476537757519021">시크릿 모드 서브프레임: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">창 이름 설정</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />님의 <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">진한 청록색</translation>
 <translation id="8925458182817574960">설정(&amp;S)</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index 81b1652..3be3af25 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Веб мазмундун тилдери</translation>
 <translation id="3429275422858276529">Бул баракчаны кыстармаларга кошуп, кийинчерээк оңой эле таап алыңыз</translation>
 <translation id="3432227430032737297">Көрсөтүлгөндөрдүн баары алынсын</translation>
-<translation id="3432757130254800023">Жергиликтүү тармактагы дисплейлерге аудио жана видео жөнөтүү</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Ой! Тутум түзмөктү орнотуу убакытынын аттрибуттарынын кулпусу негизделбей калды.</translation>
 <translation id="3434272557872943250">Эгер кошумча Колдонмолор жана Интернеттеги аракеттер таржымалы балаңыз үчүн күйгүзүлгөн болсо, бул маалымат анын Google аккаунтуна сакталышы мүмкүн. Төмөнкү шилтеме менен өтүп, бул жөндөөлөр жана аларды кантип тууралоо керек экендиги жөнүндө кеңири маалымат алыңыз: families.google.com.</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> өтмөк табылды</translation>
 <translation id="8148760431881541277">Кирүүнү чектөө</translation>
 <translation id="8150259863378108853">Lacros cерепчиси учурда сыналууда. Көйгөйлөрдү кабарлоо үчүн Жардам &gt; "Көйгөйдү кабарлоо..." бөлүмүнө өтүңүз</translation>
-<translation id="8151579390896831136">Профилиңизди, анын ичинде аталышын ыңгайлаштырыңыз</translation>
 <translation id="8151638057146502721">Конфигурациялоо</translation>
 <translation id="8154790740888707867">Файл жок</translation>
 <translation id="815491593104042026">Ой! Кооптуу URL дареги (<ph name="BLOCKED_URL" />) колдонулуп жаткандыктан, аныктыктыгы текшерилбей калды. Администраторуңузга кайрылыңыз.</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">Уюмуңуз тарабынан башкарылат</translation>
 <translation id="8379878387931047019">Бул вебсайтта катталган коопсуздук ачкычынын түрү бул түзмөктө колдоого алынбайт</translation>
 <translation id="8379991678458444070">Бул өтмөктү кайра оңой таап алуу үчүн аны кыстарып коюңуз.</translation>
-<translation id="8380266723152870797">Терезенин аталышы</translation>
 <translation id="8382913212082956454">&amp;Электрондук почта дарегин көчүрүү</translation>
 <translation id="8386091599636877289">Саясат табылган жок.</translation>
 <translation id="8386903983509584791">Текшерүү аяктады</translation>
@@ -6860,7 +6857,6 @@
 <translation id="8859402192569844210">Тейлөө шарттары жүктөлгөн жок</translation>
 <translation id="8859662783913000679">Ата-эненин аккаунту</translation>
 <translation id="8862003515646449717">Ылдам серепчиге которулуу</translation>
-<translation id="8863140399813345099">Түзмөктү көрүү мүмкүнчүлүгү жөндөөсү экраныңыз кулпуланып турганда сиз менен файлдарды ким бөлүшө аларын көзөмөлдөйт</translation>
 <translation id="8863753581171631212">Шилтемени жаңы <ph name="APP" /> колдонмосунда ачуу</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> <ph name="APP_NAME" /> колдонмосу менен бөлүшүлүүдө</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> бул түзмөктөн өчүрүлдү</translation>
@@ -6914,7 +6910,6 @@
 <translation id="8912810933860534797">Авто-скандоону иштетүү</translation>
 <translation id="8915370057835397490">Сунуш жүктөлүүдө</translation>
 <translation id="8916476537757519021">Жашыруун көмөкчү алкак: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Терезенин аталышын коюңуз</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> аттуу колдонуучунун <ph name="DEVICE_TYPE" /> түзмөгү</translation>
 <translation id="8923880975836399332">Күңүрт көгүш жашыл</translation>
 <translation id="8925458182817574960">&amp;Жөндөөлөр</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index abf23de4..02e51dcd 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -2152,7 +2152,6 @@
 <translation id="3429271624041785769">ພາສາຂອງເນື້ອຫາເວັບ</translation>
 <translation id="3429275422858276529">ບຸກມາກໜ້ານີ້ໄວ້ເພື່ອຊອກຫາໄດ້ງ່າຍໃນພາຍຫຼັງ</translation>
 <translation id="3432227430032737297">ລຶບທຸກອັນທີ່ປາກົດ</translation>
-<translation id="3432757130254800023">ສົ່ງສຽງ ແລະວິດີໂອ ເພື່ອສະແດງຢູ່ໃນເຄືອຂ່າຍທ້ອງຖິ່ນ</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">ອຸ້ຍ!  ລະບົບຕັ້ງລັອກລັກສະນະການຕິດຕັ້ງເວລາອຸປະກອນບໍ່ໄດ້.</translation>
 <translation id="3434272557872943250">ຖ້າເປີດການຕັ້ງຄ່າການເຄື່ອນໄຫວເວັບ ແລະ ແອັບເພີ່ມເຕີມສໍາລັບລູກຂອງທ່ານ, ລະບົບອາດຈະບັນທຶກຂໍ້ມູນນີ້ໄວ້ໃນບັນຊີ Google ຂອງເຂົາເຈົ້າ. ສຶກສາເພີ່ມເຕີມກ່ຽວກັບການຕັ້ງຄ່າເຫຼົ່ານີ້ ແລະ ວິທີປັບການຕັ້ງຄ່າໄດ້ທີ່ families.google.com.</translation>
@@ -6241,7 +6240,6 @@
 <translation id="8147900440966275470">ພົບ <ph name="NUM" /> ແຖບ</translation>
 <translation id="8148760431881541277">ຈຳກັດການເຂົ້າສູ່ລະບົບ</translation>
 <translation id="8150259863378108853">Lacros ເປັນບຣາວເຊີທົດລອງ. ກະລຸນາລາຍງານບັນຫາຕ່າງໆດ້ວຍ ຊ່ວຍເຫຼືອ &gt; "ລາຍງານບັນຫາ..."</translation>
-<translation id="8151579390896831136">ປັບແຕ່ງໂປຣໄຟລ໌ຂອງທ່ານ, ຮວມທັງຊື່ຂອງມັນ</translation>
 <translation id="8151638057146502721">ປັບ​ຕັ້ງ​ຄ່າ</translation>
 <translation id="8154790740888707867">ບໍ່​ມີ​ໄຟລ​໌</translation>
 <translation id="815491593104042026">ອຸ້ຍ! ການຮັບຮອງບໍ່ສໍາເລັດ ເພາະວ່າມັນບໍ່ຖືກປັບ​ຕັ້ງ​ຄ່າໃຫ້ໃຊ້ URL (<ph name="BLOCKED_URL" />) ທີ່ບໍ່ປອດໄພ.  ກະລຸນາຕິດຕໍ່ຜູ້ຄວບຄຸມຂອງທ່ານ.</translation>
@@ -6432,7 +6430,6 @@
 <translation id="8378714024927312812">ຈັດການໂດຍອົງການຂອງທ່ານ</translation>
 <translation id="8379878387931047019">ອຸປະກອນນີ້ບໍ່ຮອງຮັບປະເພດກະແຈຄວາມປອດໄພທີ່ເວັບໄຊນີ້ຂໍເອົາ</translation>
 <translation id="8379991678458444070">ກັບຄືນຫາບ່ອນນີ້ໄດ້ຢ່າງວ່ອງໄວດ້ວຍການບຸກມາກແຖບນີ້ໄວ້</translation>
-<translation id="8380266723152870797">ຊື່ໜ້າຈໍ</translation>
 <translation id="8382913212082956454">ກັອບປີ້ທີ່ຢູ່ອີເມວ</translation>
 <translation id="8386091599636877289">ບໍ່ເຫັນນະໂຍບາຍ.</translation>
 <translation id="8386903983509584791">ສຳເລັດການສະແກນແລ້ວ</translation>
@@ -6857,7 +6854,6 @@
 <translation id="8859402192569844210">ບໍ່ສາມາດດາວໂຫຼດຂໍ້ກຳນົດການບໍລິການໄດ້</translation>
 <translation id="8859662783913000679">ບັນຊີພໍ່ແມ່</translation>
 <translation id="8862003515646449717">ປ່ຽນເປັນໂປຣແກຣມທ່ອງເວັບທີ່ໄວ</translation>
-<translation id="8863140399813345099">ການເບິ່ງເຫັນຂອງອຸປະກອນທ່ານຈະຄວບຄຸມວ່າໃຜສາມາດແບ່ງປັນໃຫ້ກັບທ່ານໃນຕອນທີ່ໜ້າຈໍຂອງທ່ານຖືກປົດລັອກໄດ້ແດ່</translation>
 <translation id="8863753581171631212">ເປີດລິ້ງໃນ <ph name="APP" /> ໃໝ່</translation>
 <translation id="8864055848767439877">ກຳລັງແບ່ງປັນ <ph name="TAB_NAME" /> ໄປໃສ່ <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">ລຶບ <ph name="EMAIL" /> ອອກຈາກອຸປະກອນນີ້ແລ້ວ</translation>
@@ -6911,7 +6907,6 @@
 <translation id="8912810933860534797">ເປີດນຳໃຊ້ການສະແກນອັດຕະໂນມັດ</translation>
 <translation id="8915370057835397490">ກໍາລັງໂຫຼດຄໍາແນະນໍາ</translation>
 <translation id="8916476537757519021">ຂອບຍ່ອຍທີ່ບໍ່ເຜີຍຕົນຕົວ​: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ຕັ້ງຊື່ໜ້າຈໍ</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> ຂອງ <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">ສີຂຽວອົມຟ້າເຂັ້ມ</translation>
 <translation id="8925458182817574960">ການຕັ້ງຄ່າ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 206f9b7..6b1d3be 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -2157,7 +2157,6 @@
 <translation id="3429271624041785769">Žiniatinklio turinio kalbos</translation>
 <translation id="3429275422858276529">Pažymėkite šį puslapį, kad galėtumėte lengvai jį rasti vėliau</translation>
 <translation id="3432227430032737297">Pašalinti visus rodomus</translation>
-<translation id="3432757130254800023">Siųsti garso ir vaizdo įrašus vietiniame tinkle</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Deja, sistemai vykdant įrenginio diegimo laiko atributų fiksavimą įvyko klaida.</translation>
 <translation id="3434272557872943250">Jei papildomas Žiniatinklio ir programų veiklos nustatymas įjungtas vaiko įrenginyje, šie duomenys gali būti išsaugoti vaiko „Google“ paskyroje. Sužinokite daugiau apie šiuos nustatymus ir kaip juos koreguoti, adresu families.google.com.</translation>
@@ -6250,7 +6249,6 @@
 <translation id="8147900440966275470">Rasta skirtukų: <ph name="NUM" /></translation>
 <translation id="8148760431881541277">Prisijungimo ribojimas</translation>
 <translation id="8150259863378108853">„Lacros“ yra eksperimentinė naršyklė. Praneškite, jei kils problemų, skiltyje „Pagalba“ &gt; „Pranešti apie problemą...“</translation>
-<translation id="8151579390896831136">Tinkinkite profilį, įskaitant pavadinimą</translation>
 <translation id="8151638057146502721">Konfigūruoti</translation>
 <translation id="8154790740888707867">Nėra failo</translation>
 <translation id="815491593104042026">Oi! Nepavyko autentifikuoti, nes buvo sukonfigūruoti naudoti nesaugų URL (<ph name="BLOCKED_URL" />). Susisiekite su administratoriumi.</translation>
@@ -6441,7 +6439,6 @@
 <translation id="8378714024927312812">Tvarko jūsų organizacija</translation>
 <translation id="8379878387931047019">Šis įrenginys nepalaiko saugos rakto, kurio reikalaujama šioje svetainėje, tipo</translation>
 <translation id="8379991678458444070">Grįžkite čia greičiau pasižymėję šį skirtuką</translation>
-<translation id="8380266723152870797">Lango pavadinimas</translation>
 <translation id="8382913212082956454">Kopijuoti &amp;el. pašto adresą</translation>
 <translation id="8386091599636877289">Politika nerasta.</translation>
 <translation id="8386903983509584791">Nuskaitymas baigtas</translation>
@@ -6869,7 +6866,6 @@
 <translation id="8859402192569844210">Nepavyko įkelti paslaugų teikimo sąlygų</translation>
 <translation id="8859662783913000679">Vieno iš tėvų paskyra</translation>
 <translation id="8862003515646449717">Perjunkite į sparčią naršyklę</translation>
-<translation id="8863140399813345099">Įrenginio matomumo nustatymais valdoma, kas gali bendrinti su jumis, kai jūsų ekranas atrakintas</translation>
 <translation id="8863753581171631212">Atidaryti nuorodą naujoje programoje „<ph name="APP" />“</translation>
 <translation id="8864055848767439877">Bendrinamas skirtukas „<ph name="TAB_NAME" />“ su „<ph name="APP_NAME" />“</translation>
 <translation id="8864458770072227512">Paskyra <ph name="EMAIL" /> pašalinta iš šio įrenginio</translation>
@@ -6923,7 +6919,6 @@
 <translation id="8912810933860534797">Įgalinti automatinį nuskaitymą</translation>
 <translation id="8915370057835397490">Įkeliamas pasiūlymas</translation>
 <translation id="8916476537757519021">Inkognito antrinis kadras: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Nustatykite lango pavadinimą</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />, <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Tamsi žalsvai mėlyna</translation>
 <translation id="8925458182817574960">&amp;Nustatymai</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index bc07bfb..d0bfff9 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -2156,7 +2156,6 @@
 <translation id="3429271624041785769">Tīmekļa satura valodas</translation>
 <translation id="3429275422858276529">Saglabājiet šo lapu kā grāmatzīmi, lai vēlāk varētu to viegli atrast</translation>
 <translation id="3432227430032737297">Noņemt visu parādīto</translation>
-<translation id="3432757130254800023">Sūtīt audio un video saturu uz ekrāniem lokālajā tīklā</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Hmm... Sistēma nevarēja iestatīt ierīces instalēšanas laika atribūta bloķēšanu.</translation>
 <translation id="3434272557872943250">Ja jūsu bērnam ir ieslēgts iestatījums “papildu darbības tīmeklī un lietotnēs”, šie dati var tikt saglabāti bērna Google kontā. Plašāku informāciju par šiem iestatījumiem un to pielāgošanu skatiet vietnē families.google.com.</translation>
@@ -6247,7 +6246,6 @@
 <translation id="8147900440966275470">Atrasta <ph name="NUM" /> cilne</translation>
 <translation id="8148760431881541277">Pierakstīšanās ierobežošana</translation>
 <translation id="8150259863378108853">Lacros ir eksperimentāls pārlūks. Lūdzu, ziņojiet par problēmām šeit: Palīdzība &gt; “Ziņot par problēmu...”</translation>
-<translation id="8151579390896831136">Pielāgot savu profilu, tostarp tā nosaukumu</translation>
 <translation id="8151638057146502721">Konfigurēt</translation>
 <translation id="8154790740888707867">Nav faila.</translation>
 <translation id="815491593104042026">Diemžēl autentifikācija neizdevās, jo konfigurācijā tika norādīts izmantot nedrošu URL (<ph name="BLOCKED_URL" />). Lūdzu, sazinieties ar administratoru.</translation>
@@ -6438,7 +6436,6 @@
 <translation id="8378714024927312812">Pārvalda jūsu organizācija</translation>
 <translation id="8379878387931047019">Šī ierīce neatbalsta vietnes pieprasītās drošības atslēgas veidu.</translation>
 <translation id="8379991678458444070">Saglabājiet šo cilni kā grāmatzīmi, lai vēlāk to varētu ātrāk atrast.</translation>
-<translation id="8380266723152870797">Loga nosaukums</translation>
 <translation id="8382913212082956454">Kopēt un nosūtīt adresi pa e-pastu</translation>
 <translation id="8386091599636877289">Politika netika atrasta.</translation>
 <translation id="8386903983509584791">Meklēšana ir pabeigta</translation>
@@ -6865,7 +6862,6 @@
 <translation id="8859402192569844210">Nevarēja ielādēt pakalpojumu sniegšanas noteikumus</translation>
 <translation id="8859662783913000679">Vecāku konts</translation>
 <translation id="8862003515646449717">Pāreja uz ātru pārlūku</translation>
-<translation id="8863140399813345099">Jūsu ierīces redzamības iestatījums nosaka, kas var kopīgot saturu ar jums, kamēr jūsu ierīces ekrāns ir atbloķēts</translation>
 <translation id="8863753581171631212">Atvērt saiti jaunā <ph name="APP" /> logā</translation>
 <translation id="8864055848767439877">Notiek <ph name="TAB_NAME" /> kopīgošana lietotnē <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Konts <ph name="EMAIL" /> tika noņemts no šīs ierīces</translation>
@@ -6919,7 +6915,6 @@
 <translation id="8912810933860534797">Iespējot automātisko meklēšanu</translation>
 <translation id="8915370057835397490">Notiek ieteikumu ielāde...</translation>
 <translation id="8916476537757519021">Inkognito apakšrāmis: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Iestatiet loga nosaukumu</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" />, ko izmanto <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Tumši zilganzaļa</translation>
 <translation id="8925458182817574960">&amp;Iestatījumi</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 5f645e22..6d6d640 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Јазици за содржини од интернет</translation>
 <translation id="3429275422858276529">Обележете ја страницава за полесно да ја најдете подоцна</translation>
 <translation id="3432227430032737297">Отстрани ги сите прикажани</translation>
-<translation id="3432757130254800023">Испратете аудио и видео на екрани на локалната мрежа</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Уф! Системот не успеа да воспостави заклучување на уредот за атрибути за време на инсталацијата.</translation>
 <translation id="3434272557872943250">Ако сте ја вклучиле дополнителната поставка „Активност на интернет и апликации“ за вашето дете, овие податоци може да се зачувуваат во сметката на Google на детето. Дознајте повеќе за поставкиве и за тоа како да ги приспособите на families.google.com.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470">Најдена е <ph name="NUM" /> картичка</translation>
 <translation id="8148760431881541277">Ограничи најавување</translation>
 <translation id="8150259863378108853">Lacros е експериментален прелистувач. Ако наидете на проблем, пријавете го во „Помош &gt; Пријавате проблем…“</translation>
-<translation id="8151579390896831136">Приспособете го вашиот профил, вклучително и името</translation>
 <translation id="8151638057146502721">Конфигурирај</translation>
 <translation id="8154790740888707867">Нема датотека</translation>
 <translation id="815491593104042026">Уф! Автентикацијата не успеа затоа што била конфигурирана да користи небезбеден URL (<ph name="BLOCKED_URL" />). Контактирајте со администраторот.</translation>
@@ -6439,7 +6437,6 @@
 <translation id="8378714024927312812">Управувано од вашата организација</translation>
 <translation id="8379878387931047019">Уредов не го поддржува типот на безбедносен клуч што го бара веб-страницава</translation>
 <translation id="8379991678458444070">Ако ја обележите картичкава, ќе може да се вратите тука набрзина</translation>
-<translation id="8380266723152870797">Име на прозорецот</translation>
 <translation id="8382913212082956454">Копирај &amp;адреса на е-пошта</translation>
 <translation id="8386091599636877289">Правилото не е пронајдено.</translation>
 <translation id="8386903983509584791">Скенирањето заврши</translation>
@@ -6865,7 +6862,6 @@
 <translation id="8859402192569844210">„Условите за користење“ не може да се вчитаат</translation>
 <translation id="8859662783913000679">Сметка на родител</translation>
 <translation id="8862003515646449717">Префрлете се на брз прелистувач</translation>
-<translation id="8863140399813345099">Видливоста на вашиот уред контролира кој може да споделува со вас додека ви е отклучен екранот</translation>
 <translation id="8863753581171631212">Отвори го линкот во нов прозорец на <ph name="APP" /></translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> се споделува на <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> беше отстранета од уредов</translation>
@@ -6919,7 +6915,6 @@
 <translation id="8912810933860534797">Овозможете автоматско скенирање</translation>
 <translation id="8915370057835397490">Се вчитува предлог</translation>
 <translation id="8916476537757519021">Инкогнито подрамка: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Поставете име на прозорецот</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> на <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Темна синозелена</translation>
 <translation id="8925458182817574960">&amp;Поставки</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 2151b64..c2eb326 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -2149,7 +2149,6 @@
 <translation id="3429271624041785769">വെബ് ഉള്ളടക്കം ലഭ്യമായ ഭാഷകൾ</translation>
 <translation id="3429275422858276529">പിന്നീട് ഈ പേജ് എളുപ്പത്തിൽ കണ്ടെത്താൻ ബുക്ക്‌മാർക്ക് ചെയ്യുക</translation>
 <translation id="3432227430032737297">ദൃശ്യമാക്കിയിരിക്കുന്നതെല്ലാം നീക്കംചെയ്യുക</translation>
-<translation id="3432757130254800023">പ്രാദേശിക നെറ്റ്‌വർക്കിലെ ഡിസ്‌പ്ലേകളിലേക്ക് ഓഡിയോയും വീഡിയോയും അയയ്‌ക്കുക</translation>
 <translation id="3432762828853624962">പങ്കിട്ട വർക്കർമാർ</translation>
 <translation id="3433621910545056227">ക്ഷമിക്കണം! ഉപകരണ ഇൻസ്റ്റലേഷൻ-സമയ ആട്രിബ്യൂട്ട് ലോക്ക് സ്ഥാപിക്കുന്നതിൽ സിസ്റ്റം പരാജയപ്പെട്ടു.</translation>
 <translation id="3434272557872943250">നിങ്ങളുടെ കുട്ടിയുടെ അധിക വെബ്, ആപ്പ് പ്രവർത്തന ക്രമീകരണം ഓണാക്കിയിട്ടുണ്ടെങ്കിൽ, ഈ ഡാറ്റ അവരുടെ Google അക്കൗണ്ടിൽ സംരക്ഷിക്കപ്പെട്ടേക്കാം. ഈ ക്രമീകരണത്തെ കുറിച്ചും അതെങ്ങനെയാണ് ക്രമപ്പെടുത്തുന്നത് എന്നതിനെ കുറിച്ചും families.google.com എന്നതിൽ കൂടുതലറിയുക.</translation>
@@ -6242,7 +6241,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ടാബ് കണ്ടെത്തി</translation>
 <translation id="8148760431881541277">സൈൻ ഇൻ ചെയ്യൽ പരിമിതപ്പെടുത്തുക</translation>
 <translation id="8150259863378108853">Lacros ഒരു പരീക്ഷണാത്മക ബ്രൗസറാണ്. സഹായം &gt; "പ്രശ്‌നം റിപ്പോർട്ട് ചെയ്യുക" ഉപയോഗിച്ച് ഏത് പ്രശ്‌നവും റിപ്പോർട്ട് ചെയ്യുക...</translation>
-<translation id="8151579390896831136">നിങ്ങളുടെ പ്രൊഫൈലിന്റെ പേരുൾപ്പെടെ ഇഷ്‌ടാനുസൃതമാക്കുക</translation>
 <translation id="8151638057146502721">കോൺഫിഗർ ചെയ്യുക</translation>
 <translation id="8154790740888707867">ഫയലൊന്നുമില്ല</translation>
 <translation id="815491593104042026">ക്ഷമിക്കണം!  സുരക്ഷിതമല്ലാത്ത URL ഉപയോഗിക്കുന്നതിന് കോൺഫിഗർ ചെയ്‌തിരിക്കുന്നതിനാൽ പരിശോധിച്ചുറപ്പിക്കൽ പരാജയപ്പെട്ടു (<ph name="BLOCKED_URL" />). നിങ്ങളുടെ അഡ്‌മിനി‌സ്‌ട്രേറ്ററെ ബന്ധപ്പെടുക.</translation>
@@ -6433,7 +6431,6 @@
 <translation id="8378714024927312812">നിങ്ങളുടെ സ്ഥാപനം മാനേജ് ചെയ്യുന്നത്</translation>
 <translation id="8379878387931047019">ഈ വെബ്സൈറ്റ് അഭ്യർത്ഥിച്ച തരത്തിലുള്ള സുരക്ഷാ കീ ഈ ഉപകരണം പിന്തുണയ്ക്കുന്നില്ല</translation>
 <translation id="8379991678458444070">ഈ ടാബ് ബുക്ക്‌മാർക്ക് ചെയ്‌താൽ വേഗത്തിൽ ഇവിടേക്ക് മടങ്ങിയെത്താൻ കഴിയും</translation>
-<translation id="8380266723152870797">വിൻഡോയുടെ പേര്</translation>
 <translation id="8382913212082956454">&amp;ഇമെയിൽ വിലാസം പകർത്തുക</translation>
 <translation id="8386091599636877289">നയം കണ്ടെത്തിയില്ല.</translation>
 <translation id="8386903983509584791">സ്‌കാൻ ചെയ്യുന്നത് പൂർത്തിയായി</translation>
@@ -6857,7 +6854,6 @@
 <translation id="8859402192569844210">സേവന നിബന്ധനകൾ ലോഡ് ചെയ്യാനായില്ല</translation>
 <translation id="8859662783913000679">രക്ഷാകർതൃ അക്കൗണ്ട്</translation>
 <translation id="8862003515646449717">ഒരു വേഗതയേറിയ ബ്രൗസറിലേക്ക് മാറുക</translation>
-<translation id="8863140399813345099">സ്ക്രീൻ അൺലോക്കായിരിക്കുമ്പോൾ ആർക്കൊക്കെ നിങ്ങളുമായി പങ്കിടാനാകുമെന്നത് നിങ്ങളുടെ ഉപകരണത്തിന്റെ ദൃശ്യപരത നിയന്ത്രിക്കുന്നു</translation>
 <translation id="8863753581171631212">പുതിയ <ph name="APP" /> ആപ്പിൽ ലിങ്ക് തുറക്കുക</translation>
 <translation id="8864055848767439877"><ph name="APP_NAME" /> എന്നതിലേക്ക് <ph name="TAB_NAME" /> പങ്കിടുന്നു</translation>
 <translation id="8864458770072227512">ഈ ഉപകരണത്തിൽ നിന്ന് <ph name="EMAIL" /> നീക്കം ചെയ്‌തു</translation>
@@ -6911,7 +6907,6 @@
 <translation id="8912810933860534797">സ്വയമേവയുള്ള സ്‌കാൻ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="8915370057835397490">നിർദ്ദേശം ലോഡുചെയ്യുന്നു</translation>
 <translation id="8916476537757519021">ആൾമാറാട്ട സബ്‌ഫ്രെയിം: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">വിൻഡോയുടെ പേര് സജ്ജീകരിക്കുക</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> എന്നയാളുടെ <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">ഇരുണ്ട ടീൽ</translation>
 <translation id="8925458182817574960">&amp;ക്രമീകരണങ്ങള്‍</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index 393885ce..46beba9 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -2149,7 +2149,6 @@
 <translation id="3429271624041785769">Веб контентын хэлнүүд</translation>
 <translation id="3429275422858276529">Энэ хуудсыг дараа хялбар олохын тулд тэмдэглэнэ үү</translation>
 <translation id="3432227430032737297">Харуулсан бүх зүйлийг устгах</translation>
-<translation id="3432757130254800023">Дотоод сүлжээнд харуулах аудио болон видеог илгээх</translation>
 <translation id="3432762828853624962">Хуваалцсан ажилчид</translation>
 <translation id="3433621910545056227">Анхаарна уу! Систем төхөөрөмжийг суурьлуулж чадахгүй байна.</translation>
 <translation id="3434272557872943250">Хэрэв таны хүүхдийн Веб, аппын нэмэлт үйл ажиллагааны тохиргоо асаалттай байвал энэ өгөгдлийг түүний Google Бүртгэлд хадгалж болзошгүй. Эдгээр тохиргооны талаар болон тэднийг хэрхэн тохируулах тухай нэмэлт мэдээллийг families.google.com дээрээс авна уу.</translation>
@@ -6235,7 +6234,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> таб оллоо</translation>
 <translation id="8148760431881541277">Нэвтрэхийг хязгаарлах</translation>
 <translation id="8150259863378108853">Lacros нь туршилтын хөтөч юм. Аливаа асуудлыг Тусламж &gt; "Асуудлыг мэдээлэх..."-ээр мэдээлнэ үү</translation>
-<translation id="8151579390896831136">Нэрийг нь оруулаад профайлаа өөрчлөх</translation>
 <translation id="8151638057146502721">Тохируулах</translation>
 <translation id="8154790740888707867">Файл байхгүй байна</translation>
 <translation id="815491593104042026">Өө! Холбоосыг аюулгүй-бус гэж тохируулсан учраас таниулах ажиллагаа амжилтгүй боллоо ( <ph name="BLOCKED_URL" /> ). Админтайгаа холбоо барина уу.</translation>
@@ -6426,7 +6424,6 @@
 <translation id="8378714024927312812">Танай байгууллагаас удирддаг</translation>
 <translation id="8379878387931047019">Энэ төхөөрөмж энэ веб сайтаас хүссэн аюулгүй байдлын түлхүүрийн төрлийг дэмждэггүй</translation>
 <translation id="8379991678458444070">Энэ табыг тэмдэглэснээр дараа олоход хялбар болно</translation>
-<translation id="8380266723152870797">Цонхны нэр</translation>
 <translation id="8382913212082956454">И-мэйл хаягийг хуулбарлах</translation>
 <translation id="8386091599636877289">Удирдамж олдсонгүй.</translation>
 <translation id="8386903983509584791">Шалгаж дууслаа</translation>
@@ -6849,7 +6846,6 @@
 <translation id="8859402192569844210">Үйлчилгээний нөхцөлийг ачаалж чадсангүй</translation>
 <translation id="8859662783913000679">Эцэг эхийн бүртгэл</translation>
 <translation id="8862003515646449717">Хурдан хөтөч рүү сэлгэх</translation>
-<translation id="8863140399813345099">Таны төхөөрөмжийн харагдац нь дэлгэцийн тань түгжээ тайлагдсан үед тантай хуваалцах боломжтой хүмүүсийг хянадаг</translation>
 <translation id="8863753581171631212">Холбоосыг шинэ <ph name="APP" />-д нээх</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" />-г <ph name="APP_NAME" />-тай хуваалцаж байна</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" />-г энэ төхөөрөмжөөс устгалаа</translation>
@@ -6903,7 +6899,6 @@
 <translation id="8912810933860534797">Автомат сканыг идэвхжүүлэх</translation>
 <translation id="8915370057835397490">Зөвлөмжийг ачаалж байна</translation>
 <translation id="8916476537757519021">Нууцлалтай дэд хүрээ: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Цонхны нэр тохируулах</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />-н <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Бараан номин ногоон</translation>
 <translation id="8925458182817574960">&amp;Тохиргоонууд</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index b4e5db9a..445c8dc 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -217,6 +217,7 @@
 <translation id="1234808891666923653">सेवा कामगार</translation>
 <translation id="1235458158152011030">ज्ञात नेटवर्क</translation>
 <translation id="123578888592755962">डिस्क भरली</translation>
+<translation id="1235924639474699896">{COUNT,plural, =1{मजकूर}other{# मजकूर}}</translation>
 <translation id="1239594683407221485">Files अ‍ॅप मधील डिव्हाइसचा आशय एक्सप्लोर करा.</translation>
 <translation id="124116460088058876">आणखी भाषा...</translation>
 <translation id="1241753985463165747">विनंती केल्यावर सध्याच्या वेबसाइटवर असलेला सर्व डेटा वाचू आणि बदलू शकता</translation>
@@ -439,6 +440,7 @@
 <translation id="1486096554574027028">पासवर्ड शोधा</translation>
 <translation id="1487335504823219454">सुरू - कस्टम सेटिंग्ज</translation>
 <translation id="1489664337021920575">दुसरा पर्याय निवडा</translation>
+<translation id="1490491397986065675">तुमच्या अ‍ॅडमिनिस्ट्रेटरनुसार, "<ph name="CUSTOM_MESSAGE" />".</translation>
 <translation id="1492417797159476138">तुम्ही या साइटसाठी आधीच वापरकर्ता नाव सेव्ह केले आहे</translation>
 <translation id="1493892686965953381">यासाठी प्रतीक्षा करत आहे <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495677929897281669">टॅबवर परत</translation>
@@ -806,6 +808,7 @@
 <translation id="1879000426787380528">हे म्हणून साइन करा</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" सर्टिफिकेट हटवायचे?</translation>
 <translation id="1881445033931614352">कीबोर्ड लेआउट</translation>
+<translation id="1881577802939775675">{COUNT,plural, =1{आयटम}other{# आयटम}}</translation>
 <translation id="1884013283844450420"><ph name="NETWORK_COUNT" /> पैकी <ph name="NETWORK_INDEX" /> नेटवर्क, <ph name="NETWORK_NAME" />, कनेक्ट करा</translation>
 <translation id="1884340228047885921">सध्याचे दृश्यमानता सेटिंग हे काही संपर्क आहेत</translation>
 <translation id="1884705339276589024">Linux डिस्कचा आकार बदला</translation>
@@ -983,6 +986,7 @@
 <translation id="2099686503067610784">सर्व्हर सर्टिफिकेट "<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
 <translation id="2100273922101894616">ऑटो साइन इन करा</translation>
 <translation id="2101225219012730419">आवृत्ती:</translation>
+<translation id="2108349519800154983">{COUNT,plural, =1{फोन नंबर}other{# फोन नंबर}}</translation>
 <translation id="211144231511833662">प्रकार साफ करा</translation>
 <translation id="2111670510994270194">उजवीकडील नवीन टॅब</translation>
 <translation id="21133533946938348">टॅब पिन करा</translation>
@@ -1279,6 +1283,7 @@
 <translation id="2435457462613246316">पासवर्ड दर्शवा</translation>
 <translation id="2435579801172349831">गुप्त विंडोमध्ये सर्व ( <ph name="URL_COUNT" />) उघडा</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> ला सर्व <ph name="PROTOCOL" /> लिंक उघडण्याची अनुमती द्यायची?</translation>
+<translation id="2440366609912234507">{COUNT,plural, =1{अ‍ॅप}other{# अ‍ॅप्स}}</translation>
 <translation id="2440604414813129000">स्त्रो&amp;त पाहा</translation>
 <translation id="244231003699905658">चुकीचा ॲड्रेस. कृपया ॲड्रेस तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="2442916515643169563">मजकुराची शॅडो</translation>
@@ -1426,6 +1431,7 @@
 <translation id="2604255671529671813">नेटवर्क कनेक्शन एरर</translation>
 <translation id="2606246518223360146">डेटा लिंक करा</translation>
 <translation id="2606454609872547359">नाही, ChromeVox शिवाय पुढे सुरू ठेवा</translation>
+<translation id="2606568927909309675">इंग्रजी ऑडिओ आणि व्हिडिओसाठी आपोआप कॅप्शन तयार करते. ऑडिओ आणि कॅप्शन तुमच्या डिव्हाइसमध्येच राहतात.</translation>
 <translation id="2607101320794533334">विषय सार्वजनिक की माहिती</translation>
 <translation id="2609896558069604090">शॉर्टकट तयार करा...</translation>
 <translation id="2609980095400624569">कनेक्शन जोडता आले नाही</translation>
@@ -1689,6 +1695,7 @@
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
 <translation id="2889064240420137087">यासह लिंक उघडा...</translation>
 <translation id="2889925978073739256">सॅन्डबॉक्स न केलेले प्लगिन अवरोधित करणे सुरू ठेवा</translation>
+<translation id="2891922230654533301"><ph name="APP_NAME" /> वर साइन इन करण्यासाठी तुमचे डिव्हाइस वापरायचे आहे का?</translation>
 <translation id="2893168226686371498">डीफॉल्ट ब्राउझर</translation>
 <translation id="2894757982205307093">गटामधील नवीन टॅब</translation>
 <translation id="289644616180464099">सिम कार्ड लॉक केले आहे</translation>
@@ -1999,6 +2006,7 @@
 <translation id="3269069891205016797">तुम्ही साइन आउट करता तेव्हा डिव्हाइस मधून तुमची माहिती काढली जाईल.</translation>
 <translation id="3269093882174072735">इमेज लोड करा</translation>
 <translation id="3269612321104318480">फिकट टील आणि पांढरा</translation>
+<translation id="3269689705184377744">{COUNT,plural, =1{फाइल}other{# फाइल}}</translation>
 <translation id="326999365752735949">फरक डाउनलोड करत आहे</translation>
 <translation id="3270965368676314374">तुमच्या कॉंप्युटरवरील फोटो, संगीत आणि अन्य मीडिया वाचा, बदला आणि हटवा</translation>
 <translation id="327147043223061465">सर्व कुकीज आणि साइट डेटा पहा</translation>
@@ -2135,7 +2143,6 @@
 <translation id="3429271624041785769">वेब आशयाच्या भाषा</translation>
 <translation id="3429275422858276529">हे पेज नंतर सहजपणे शोधण्यासाठी ते बुकमार्क करा</translation>
 <translation id="3432227430032737297">सर्व दाखवलेले काढून टाका</translation>
-<translation id="3432757130254800023">स्थानिक नेटवर्कच्या प्रदर्शनांवर ऑडिओ आणि व्हिडिओ पाठवा</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">अरेरे!  सिस्टम डिव्हाइस स्थापना-वेळ विशेषता लॉक इंस्टॉल करण्यात अयशस्वी.</translation>
 <translation id="3434272557872943250">तुमच्या मुलासाठी अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सेटिंग सुरू केलेले असल्यास, हा डेटा त्यांच्या Google खात्यामध्ये स्टोअर केला जाऊ शकतो. ही सेटिंग्ज आणि ती अ‍ॅडजस्ट कशी करायची याबद्दल families.google.com येथे अधिक जाणून घ्या.</translation>
@@ -2293,6 +2300,7 @@
 <translation id="3600792891314830896">ध्वनी प्ले करणाऱ्या साइट म्यूट करा</translation>
 <translation id="360180734785106144">नवीन वैशिष्ट्ये उपलब्ध होताच क्षणी ते ऑफर करते</translation>
 <translation id="3602290021589620013">पूर्वावलोकन</translation>
+<translation id="3602870520245633055">प्रिंट आणि स्कॅन करा</translation>
 <translation id="3603622770190368340">नेटवर्क सर्टिफिकेट प्राप्त करा</translation>
 <translation id="3604193429970465812">दुय्यम खाती</translation>
 <translation id="3604713164406837697">वॉलपेपर बदला</translation>
@@ -2308,6 +2316,7 @@
 <translation id="3615579745882581859"><ph name="FILE_NAME" /> स्कॅन केली जात आहे.</translation>
 <translation id="3616741288025931835">ब्राउझिंग डेटा &amp;साफ करा...</translation>
 <translation id="3617891479562106823">बॅकग्राउंड अनुपलब्ध आहेत. नंतर पुन्हा प्रयत्न करा.</translation>
+<translation id="3618800144880386250">{COUNT,plural, =1{व्हिडिओ}other{# व्हिडिओ}}</translation>
 <translation id="3619115746895587757">कॅपिचिनो</translation>
 <translation id="362333465072914957">CA ने सर्टिफिकेट जारी करण्याची प्रतीक्षा करत आहे</translation>
 <translation id="3624567683873126087">डिव्हाइस अनलॉक करा आणि Google खात्यामध्ये साइन इन करा</translation>
@@ -2716,6 +2725,7 @@
 <translation id="4047726037116394521">घरी जा</translation>
 <translation id="4049783682480068824">{COUNT,plural, =1{# संपर्क उपलब्ध नाही. त्यांच्यासोबत Nearby सह शेअरिंग वापरण्यासाठी, तुमच्या संपर्कांमध्ये त्यांच्या Google खाते शी संबंधित ईमेल ॲड्रेस जोडा.}other{# संपर्क उपलब्ध नाहीत. त्यांच्यासोबत Nearby सह शेअरिंग वापरण्यासाठी, तुमच्या संपर्कांमध्ये त्यांच्या Google खाती शी संबंधित ईमेल ॲड्रेस जोडा.}}</translation>
 <translation id="4050225813016893843">ऑथेंटिकेशन पद्धत</translation>
+<translation id="4050534976465737778">दोन्‍ही डिव्‍हाइस अनलॉक असल्‍याची, एकमेकांच्‍या जवळ धरल्‍याची आणि त्‍यांचे ब्लूटूथ सुरू असल्‍याची खात्री करा. तुम्ही तुमच्या संपर्कामध्ये नसलेल्या Chromebook सह शेअर करत असल्यास, Nearby दृश्यमानता सुरू केली असल्याची खात्री करा (स्थिती क्षेत्र उघडा, त्यानंतर Nearby दृश्यमानता सुरू करा). <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="4052120076834320548"> लघु</translation>
 <translation id="4054070260844648638">सर्वांना दृश्यमान</translation>
 <translation id="4056908315660577142">तुम्ही तुमच्या पालकाने <ph name="APP_NAME" /> Chrome अ‍ॅपसाठी सेट केलेली वेळ मर्यादा गाठली आहे. तुम्ही ते उद्या <ph name="TIME_LIMIT" /> साठी वापरू शकता.</translation>
@@ -2947,6 +2957,7 @@
 <translation id="4364327530094270451">खरबूज</translation>
 <translation id="4364567974334641491"><ph name="APP_NAME" /> विंडो शेअर करीत आहे.</translation>
 <translation id="4364830672918311045">सूचना डिस्प्ले करा</translation>
+<translation id="4366138410738374926">प्रिंट करण्याच्या प्रक्रियेला सुरुवात झाली</translation>
 <translation id="437004882363131692"><ph name="DEVICE_TYPE" /> बाबत टिपा, ऑफर व अपडेट मिळवा आणि फीडबॅक शेअर करा. सदस्यत्व कधीही रद्द करा.</translation>
 <translation id="4370975561335139969">तुम्ही एंटर केलेला ईमेल आणि पासवर्ड जुळत नाही</translation>
 <translation id="4374831787438678295">Linux इंस्टॉलर</translation>
@@ -3128,6 +3139,7 @@
 <translation id="4568025708905928793">सिक्युरिटी कीसाठी विनंती केली आहे</translation>
 <translation id="4568213207643490790">क्षमस्व, Google खात्यांना या डिव्हाइसवर अनुमती नाही.</translation>
 <translation id="4569747168316751899">निष्क्रिय असताना</translation>
+<translation id="4569830245132310845">{COUNT,plural, =1{पत्ता}other{# पत्ते}}</translation>
 <translation id="4570387585180509432">पत्ते, फोन नंबर आणि अधिक</translation>
 <translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना ऑथेंटिकेशन रद्द झाले.</translation>
 <translation id="4572779512957829735">तुमच्या सिक्युरिटी कीसाठी पिन एंटर करा</translation>
@@ -3187,6 +3199,7 @@
 <translation id="4635444580397524003">Linux बॅकअप यशस्वीरीत्या रिस्टोअर केला गेला.</translation>
 <translation id="4636930964841734540">माहिती</translation>
 <translation id="4637083375689622795"><ph name="EMAIL" /> मधील आणखी क्रिया</translation>
+<translation id="4637252186848840278">{COUNT,plural, =1{मजकूर}other{# मजकूर}}</translation>
 <translation id="4638930039313743000">ADB डीबगिंग सुरू करा</translation>
 <translation id="4641539339823703554">प्रणाली वेळ सेट करण्यात Chrome अक्षम होते. कृपया खालील वेळ तपासा आणि आवश्यक असल्यास ती दुरुस्त करा.</translation>
 <translation id="4642769377300286600">मोबाइल प्रोफाइल इंस्टॉल करत आहे, <ph name="NETWORK_COUNT" /> पैकी <ph name="NETWORK_INDEX" /> नेटवर्क, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" /></translation>
@@ -3202,10 +3215,12 @@
 <translation id="4651484272688821107">डेमो मोड स्रोतांनी ऑनलाइन घटक लोड करता आला नाही.</translation>
 <translation id="4652935475563630866">कॅमेऱ्याच्या सेटिंगमधील बदलासाठी Parallels Desktop पुन्हा लाँच करणे आवश्यक आहे. Parallels Desktop वर पुढे सुरू ठेवण्यासाठी पुन्हा लाँच करा.</translation>
 <translation id="4653405415038586100">Linux कॉंफिगर करताना एरर आली</translation>
+<translation id="4654236001025007561">तुमच्या आजूबाजूला असलेल्या Chromebook आणि Android डिव्हाइससह फाइल शेअर करा</translation>
 <translation id="4657914796247705218">TrackPoint चा वेग</translation>
 <translation id="465878909996028221">फक्त http, https आणि फाइल प्रोटोकॉलना ब्राउझर रीडिरेक्‍टला सपोर्ट करते.</translation>
 <translation id="4659077111144409915">प्राथमिक खाते</translation>
 <translation id="4659126640776004816">तुम्ही तुमच्या Google खात्यामध्ये साइन इन केल्यावर, हे वैशिष्ट्य सुरू केले जाते.</translation>
+<translation id="4660465405448977105">{COUNT,plural, =1{इमेज}other{# इमेज}}</translation>
 <translation id="4660476621274971848">अपेक्षित आवृत्ती "<ph name="EXPECTED_VERSION" />", परंतु आवृत्ती "<ph name="NEW_ID" />" होती</translation>
 <translation id="4660540330091848931">आकार बदलत आहे</translation>
 <translation id="4661407454952063730">अ‍ॅप डेटा म्हणजे अ‍ॅपने सेव्ह केलेला (डेव्हलपर सेटिंंग्जवर आधारित) कोणताही डेटा असू शकतो, ज्यामध्ये संपर्क, मेसेज आणि फोटो यांसारखा डेटा असतो.</translation>
@@ -3305,6 +3320,7 @@
 <translation id="4794810983896241342">अपडेट <ph name="BEGIN_LINK" />तुमचा अ‍ॅडमिनिस्ट्रेटर<ph name="END_LINK" /> व्यवस्‍थापित करतो</translation>
 <translation id="479536056609751218">वेबपेज, केवळ HTML</translation>
 <translation id="4798236378408895261">(Google अंतर्गत) <ph name="BEGIN_LINK" />ब्लूटूथ लॉग<ph name="END_LINK" /> अटॅच करा</translation>
+<translation id="4798543057539040565">{COUNT,plural, =1{आयटम}other{# आयटम}}</translation>
 <translation id="4801448226354548035">खाती लपवा</translation>
 <translation id="4801512016965057443">मोबाइल डेटा रोमिंगची अनुमती द्या</translation>
 <translation id="4804818685124855865">‍डिस्कनेक्ट</translation>
@@ -3733,6 +3749,7 @@
 <translation id="531118851858162334">तुम्ही Google सेवा वापरून केलेल्या मागील अ‍ॅक्टिव्हिटीच्या आधारे तुम्हाला हा आयटम दिसत आहे. तुम्ही <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> येथे तुमचा डेटा पाहू शकता, तो हटवू शकता आणि तुमची सेटिंग्ज बदलू शकता.</translation>
 <translation id="5311304534597152726">हे म्हणून साइन करा</translation>
 <translation id="5311565231560644461">साइटना तुमची आभासी वास्तविकता डिव्हाइस आणि डेटा वापरू देऊ नका</translation>
+<translation id="5312876166662946389">{COUNT,plural, =1{इमेज}other{# इमेज}}</translation>
 <translation id="5314381603623123224">Chrome च्या सेवा अटी ३१ मार्च रोजी बदलणार आहेत</translation>
 <translation id="5315738755890845852">अतिरिक्त महिरपी कंस: <ph name="ERROR_LINE" /></translation>
 <translation id="5317780077021120954">सेव्ह करा</translation>
@@ -3798,6 +3815,7 @@
 <translation id="5390677308841849479">गडद लाल आणि नारिंगी</translation>
 <translation id="5390743329570580756">यासाठी पाठवा</translation>
 <translation id="5392192690789334093">सूचना पाठवण्याची अनुमती आहे</translation>
+<translation id="5393761864111565424">{COUNT,plural, =1{लिंक}other{# लिंक}}</translation>
 <translation id="5397794290049113714">तुम्ही</translation>
 <translation id="5398497406011404839">लपवलेले बुकमार्क</translation>
 <translation id="5398572795982417028">निषिद्ध पृष्ठ संदर्भ, मर्यादा <ph name="MAXIMUM_PAGE" /> आहे</translation>
@@ -4324,6 +4342,7 @@
 <translation id="6011074160056912900">इथरनेट नेटवर्क</translation>
 <translation id="6011193465932186973">फिंगरप्रिंट</translation>
 <translation id="6011449291337289699">साइट डेटा साफ करा</translation>
+<translation id="6013027779243312217">तुमच्या ऑडिओ आणि व्हिडिओसाठी कॅप्शन मिळवा</translation>
 <translation id="6015796118275082299">वर्ष</translation>
 <translation id="6016178549409952427"><ph name="TOTAL_ELEMENTS" /> पैकी <ph name="CURRENT_ELEMENT" /> अतिरिक्त आशयावर नेव्हिगेट करा</translation>
 <translation id="6016551720757758985">मागील आवृत्तीवर परत येऊन Powerwash ची कन्फर्म करा</translation>
@@ -4832,6 +4851,7 @@
 <translation id="6605847144724004692">कोणत्याही वापरकर्त्यांनी अजून रेट केलेले नाही.</translation>
 <translation id="6607831829715835317">अधिक साध&amp;ने</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> हा आधीपासून <ph name="DOMAIN" /> यांच्‍याकडून व्यवस्थापित केला जात आहे. वेगळे Google खाते यासह पालक नियंत्रणे वापरायची असल्‍यास, सेटअप केल्‍यानंतर साइन आउट करा, त्‍यानंतर साइन इन स्क्रीनवर "व्‍यक्‍ती जोडा" असे निवडा.</translation>
+<translation id="6609478180749378879">तुम्ही गुप्त मोड यामधून बाहेर पडल्यानंतर साइन इन डेटा या डिव्हाइसवर सेव्ह केला जाईल. तुम्हाला नंतर पुन्हा तुमचे डिव्हाइस वापरून या वेबसाइटवर साइन करता येईल.</translation>
 <translation id="6611972847767394631">येथे तुमचे टॅब शोधा</translation>
 <translation id="6612358246767739896">संरक्षित आशय</translation>
 <translation id="6615455863669487791">मला दर्शवा</translation>
@@ -4849,6 +4869,7 @@
 <translation id="6624687053722465643">गोडवा</translation>
 <translation id="6628328486509726751">अपलोड केलेली <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630752851777525409">तुमच्यावतीने स्वत:स प्रमाणित करण्‍यासाठी प्रमाणपत्रामध्‍ये <ph name="EXTENSION_NAME" /> कायमचा ॲक्सेस इच्छितो.</translation>
+<translation id="6635362468090274700">तुम्ही जोपर्यंत तुमचे डिव्हाइस दृश्यमान करत नाही तोपर्यंत तुमच्याशी कोणीही शेअर करू शकत नाही.<ph name="BR" /><ph name="BR" />तुमचे डिव्हाइस तात्पुरते दृश्यमान केल्याची खात्री करण्यासाठी स्थिती क्षेत्र उघडा, त्यानंतर Nearby दृश्यमानता सुरू करा.</translation>
 <translation id="6635944431854494329">मालकाला हे वैशिष्ट्य सेटिंग्ज &gt; प्रगत &gt; Google ला निदान आणि वापर डेटा आपोआप पाठवा येथून नियंत्रित करता येते.</translation>
 <translation id="6635956300022133031">टेक्‍स्‍ट टू स्‍पीच व्हॉइस निवडा आणि कस्टमाइझ करा</translation>
 <translation id="6636588250634969791">पुढे जाण्यापूर्वी सिम घाला</translation>
@@ -5000,6 +5021,7 @@
 <translation id="6811332638216701903">DHCP होस्ट नाव</translation>
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> मूळ म्हणून चालवणे शक्य नाही.</translation>
 <translation id="6812841287760418429">बदल ठेवा</translation>
+<translation id="681584224457905309">{COUNT,plural, =1{फाइल}other{# फाइल}}</translation>
 <translation id="6817174620439930047">MIDI डिव्हाइसमध्‍ये ॲक्सेस करण्यासाठी जेव्हा एखादी साइट सिस्टम अनन्य मेसेज वापरू इच्छिते तेव्हा विचारा (शिफारस केलेले)</translation>
 <translation id="6818198425579322765">भाषांतर करण्यासाठी पेजची भाषा</translation>
 <translation id="6818802132960437751">बिल्ट-इन व्हायरस संरक्षण</translation>
@@ -5020,6 +5042,7 @@
 <translation id="6835762382653651563">कृपया तुमचे <ph name="DEVICE_TYPE" /> अपडेट करण्‍यासाठी इंटरनेटशी कनेक्ट करा.</translation>
 <translation id="6838034009068684089">साइटला तुमच्या स्क्रीनवर विंडो उघडायच्या आणि ठेवायच्या असतील तेव्हा विचारा (शिफारस केलेले)</translation>
 <translation id="6838694093138907871">कोड चुकीचा आहे, कृपया पुन्हा प्रयत्न करा.</translation>
+<translation id="6838860780238890144">{COUNT,plural, =1{फोन नंबर}other{# फोन नंबर}}</translation>
 <translation id="6839225236531462745">सर्टिफिकेट हटविणे एरर</translation>
 <translation id="6839916869147598086">साइन इन बदलले आहे</translation>
 <translation id="6840155290835956714">पाठविण्यापूर्वी विचारा</translation>
@@ -5124,6 +5147,7 @@
 <translation id="6955446738988643816">पॉपअपची तपासणी करा</translation>
 <translation id="6955535239952325894">व्यवस्थापित केलेल्या ब्राउझरवर हे सेटिंग बंद केलेले आहे</translation>
 <translation id="6957044667612803194">ही सिक्युरिटी की पिन ला सपोर्ट करत नाही</translation>
+<translation id="6957914043905853560">{COUNT,plural, =1{लिंक}other{# लिंक}}</translation>
 <translation id="6960507406838246615">Linux अपडेट करण्याची आवश्यकता आहे</translation>
 <translation id="696103774840402661">या <ph name="DEVICE_TYPE" /> वरील सर्व वापरकर्त्यांसाठी सर्व फाइल आणि स्थानिक डेटा कायमचा हटवला गेला आहे.</translation>
 <translation id="6964390816189577014">नायक</translation>
@@ -6025,6 +6049,7 @@
 <translation id="797394244396603170">तुम्हाला ज्या डिव्हाइससह फाइल शेअर करायच्या आहेत ते डिव्हाइस निवडा</translation>
 <translation id="7973962044839454485">अयोग्य वापरकर्तानावामुळे किंवा पासवर्डमुळे PPP ऑथेंटिकेशन अयशस्वी झाले</translation>
 <translation id="7974566588408714340"><ph name="EXTENSIONNAME" /> वापरून पुन्हा प्रयत्न करून पहा</translation>
+<translation id="7974713334845253259">डीफॉल्ट रंग</translation>
 <translation id="7974936243149753750">ओव्हरस्कॅन</translation>
 <translation id="7975504106303186033">तुम्ही या Chrome Education डिव्हाइसची शिक्षण खात्यामध्ये नोंदणी करणे आवश्यक आहे. नवीन खात्यासाठी साइन अप करण्याकरिता, कृपया g.co/workspace/edusignup ला भेट द्या.</translation>
 <translation id="7978412674231730200">खाजगी की</translation>
@@ -6181,7 +6206,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> टॅब आढळला</translation>
 <translation id="8148760431881541277">साइन इन मर्यादित करा</translation>
 <translation id="8150259863378108853">Lacros हा प्रायोगिक ब्राउझर आहे. कृपया कोणत्याही समस्यांची तक्रार करण्यासाठी मदत &gt; "समस्येची तक्रार करा..." वर जा</translation>
-<translation id="8151579390896831136">तुमची प्रोफाइल तिच्या नावासह कस्टमाइझ करा</translation>
 <translation id="8151638057146502721">कॉंफिगर करा</translation>
 <translation id="8154790740888707867">फाईल नाही</translation>
 <translation id="815491593104042026">अरेरे! ऑथेंटिकेशन अ-सुरक्षित (<ph name="BLOCKED_URL" />) URL वापरण्यासाठी कॉंफिगर केल्यामुळे ते अयशस्वी झाले. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
@@ -6189,6 +6213,7 @@
 <translation id="8157704005178149728">पर्यवेक्षण सेट करत आहे</translation>
 <translation id="8158117992543756526"><ph name="MONTH_AND_YEAR" /> मध्ये या डिव्हाइसला ऑटोमेटिक सॉफ्टवेअर आणि सुरक्षा अपडेट मिळणे थांबेल. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="816055135686411707">सर्टिफिकेट विश्वास सेट करताना एरर</translation>
+<translation id="8160775796528709999">सेटिंग्जमध्ये लाइव्ह कॅप्शन सुरू करून तुमच्या ऑडिओ आणि व्हिडिओसाठी कॅप्शन मिळवा</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />, <ph name="TIME_REMAINING" /></translation>
 <translation id="8161293209665121583">वेब पेजसाठी वाचक मोड</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{टॅब नवीन विंडो वर हलवा}other{टॅब नवीन विंडो वर हलवा}}</translation>
@@ -6311,6 +6336,7 @@
 <translation id="8300011035382349091">या टॅबचे बुकमार्क संपादित करा</translation>
 <translation id="8300374739238450534">भडक निळा</translation>
 <translation id="8300849813060516376">OTASP बिघडले</translation>
+<translation id="8303616404642252802">{COUNT,plural, =1{पत्ता}other{# पत्ते}}</translation>
 <translation id="8304383784961451596">तुम्ही हे डिव्हाइस वापरण्याची परवानगी नाही. कृपया साइन इन करण्याच्या परवानगीसाठी अ‍ॅडमिनिस्ट्रेटरशी संपर्क साधा किंवा Family Link चे पर्यवेक्षण असलेले Google खाते वापरून साइन इन करा.</translation>
 <translation id="8308179586020895837"><ph name="HOST" /> तुमचा कॅमेरा ॲक्सेस करू इच्छित असल्यास विचारा</translation>
 <translation id="830868413617744215">बीटा</translation>
@@ -6368,7 +6394,6 @@
 <translation id="8378714024927312812">तुमच्या संस्थेकडून व्यवस्थापित केलेले</translation>
 <translation id="8379878387931047019">या वेबसाइटने विनंती केलेल्या सिक्युरिटी की च्या प्रकाराला हे डिव्हाइस सपोर्ट करत नाही</translation>
 <translation id="8379991678458444070">या टॅबला बुकमार्क करून येथे लवकर परत या</translation>
-<translation id="8380266723152870797">विंडोचे नाव</translation>
 <translation id="8382913212082956454">&amp;ईमेल पत्ता कॉपी करा</translation>
 <translation id="8386091599636877289">धोरण सापडले नाही.</translation>
 <translation id="8386903983509584791">स्कॅन पूर्ण झाले</translation>
@@ -6608,6 +6633,7 @@
 <translation id="867085395664725367">तात्पुरती सर्व्हर एरर आली.</translation>
 <translation id="8673026256276578048">वेबवर शोधा...</translation>
 <translation id="8673383193459449849">सर्व्हर समस्या</translation>
+<translation id="8676152597179121671">{COUNT,plural, =1{व्हिडिओ}other{# व्हिडिओ}}</translation>
 <translation id="8676374126336081632">इनपुट साफ करा</translation>
 <translation id="8676770494376880701">निम्न-उर्जेचे चार्जर कनेक्ट केले</translation>
 <translation id="8677212948402625567">सर्व कोलॅप्स करा...</translation>
@@ -6791,7 +6817,6 @@
 <translation id="8859402192569844210">सेवा अटी लोड करता आल्या नाहीत</translation>
 <translation id="8859662783913000679">पालक खाते</translation>
 <translation id="8862003515646449717">वेगवान ब्राउझरवर बदला</translation>
-<translation id="8863140399813345099">तुमची स्क्रीन अनलॉक केलेली असताना तुमच्यासोबत कोण शेअर करू शकते हे तुमच्या डिव्हाइसची दृश्यमानता नियंत्रित करते</translation>
 <translation id="8863753581171631212">लिंक नवीन <ph name="APP" /> मध्ये उघडा</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> <ph name="APP_NAME" />वर शेअर करत आहे</translation>
 <translation id="8864458770072227512">या डिव्हाइसवरून <ph name="EMAIL" /> काढून टाकण्यात आला</translation>
@@ -6845,7 +6870,6 @@
 <translation id="8912810933860534797">ऑटो- स्कॅन सुरू करा</translation>
 <translation id="8915370057835397490">सूचना लोड करीत आहे</translation>
 <translation id="8916476537757519021">गुप्त सबफ्रेम: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">विंडोचे नाव सेट करा</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />चे <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">गडद टील</translation>
 <translation id="8925458182817574960">&amp;सेटिंग्ज</translation>
@@ -7032,6 +7056,7 @@
 <translation id="9128870381267983090">नेटवर्कशी कनेक्ट करा</translation>
 <translation id="9130015405878219958">चुकीचे मोड एंटर केले.</translation>
 <translation id="9131487537093447019">ब्लूटूथ डिव्हाइस वर मेसेज पाठवा आणि त्यावरून मिळवा.</translation>
+<translation id="9134119143784876218">इंग्रजी ऑडिओ आणि व्हिडिओसाठी आपोआप कॅप्शन तयार करते (सध्या फक्त Chrome ब्राउझरमध्ये उपलब्ध आहे). ऑडिओ आणि कॅप्शन तुमच्या डिव्हाइसमध्येच राहतात.</translation>
 <translation id="9137013805542155359">मूळ दर्शवा</translation>
 <translation id="9137157311132182254">प्राधान्य असलेले शोध इंजीन</translation>
 <translation id="9137248913990643158">कृपया हा ॲप वापरण्‍यापूर्वी सुरू करा आणि Chrome मध्‍ये साइन इन करा.</translation>
@@ -7079,6 +7104,7 @@
 <translation id="9179524979050048593">साइन इन स्क्रीन वापरकर्ता नाव</translation>
 <translation id="9180281769944411366">या प्रक्रियेला काही मिनिटे लागू शकतात. Linux कंटेनर सुरू करत आहे.</translation>
 <translation id="9180380851667544951">साइट तुमची स्क्रीन शेअर करू शकते</translation>
+<translation id="918352324374649435">{COUNT,plural, =1{ॲप}other{# अ‍ॅप्स}}</translation>
 <translation id="9186963452600581158">लहान मुलाचे Google खाते वापरून साइन इन करा</translation>
 <translation id="9188732951356337132">वापर आणि निदान डेटा पाठवा. हे डिव्हाइस सध्या Google ला आपोआप निदान, डिव्हाइस आणि अ‍ॅप वापर डेटा पाठवत आहे. हे तुमच्या लहान मुलाला ओळखण्यासाठी वापरले जाणार नाही आणि सिस्ट्म आणि अ‍ॅप स्थिरता आणि इतर सुधारणा करण्यात मदत करेल. काही एकत्रित केलेला डेटा Google अ‍ॅप्स आणि Android डेव्हलपर सारख्या भागीदारांना देखील मदत करेल. तुमच्या लहान मुलासाठी अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सुरू केलेली असल्यास, ही माहिती त्याच्या Google खात्यामध्ये स्टोअर केली जाऊ शकते. <ph name="BEGIN_LINK2" />अधिक जाणून घ्या<ph name="END_LINK2" /></translation>
 <translation id="9198090666959937775">सिक्युरिटी की म्हणून तुमचा Android फोन वापरा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 383aa329..eafcac3 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Bahasa kandungan web</translation>
 <translation id="3429275422858276529">Tandai halaman ini agar mudah dicari kemudian</translation>
 <translation id="3432227430032737297">Alih Keluar Semua Yang Ditunjukkan</translation>
-<translation id="3432757130254800023">Hantar audio dan video untuk disiarkan pada rangkaian tempatan</translation>
 <translation id="3432762828853624962">Pekerja Kongsi</translation>
 <translation id="3433621910545056227">Op! Sistem gagal mewujudkan kunci atribut masa pemasangan peranti.</translation>
 <translation id="3434272557872943250">Jika tetapan Aktiviti Web &amp; Apl tambahan dihidupkan untuk anak anda, data ini mungkin disimpan pada Akaun Googlenya. Ketahui lebih lanjut tentang tetapan ini dan cara melaraskan tetapan ini melalui families.google.com.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> Tab Ditemukan</translation>
 <translation id="8148760431881541277">Hadkan log masuk</translation>
 <translation id="8150259863378108853">Lacros merupakan penyemak imbas percubaan. Sila laporkan sebarang isu pada Bantuan &gt; "Laporkan isu..."</translation>
-<translation id="8151579390896831136">Sesuaikan profil anda, termasuk nama profil</translation>
 <translation id="8151638057146502721">Konfigurasi</translation>
 <translation id="8154790740888707867">Tiada fail</translation>
 <translation id="815491593104042026">Op! Pengesahan gagal kerana telah dikonfigurasikan untuk menggunakan URL tidak selamat (<ph name="BLOCKED_URL" />). Sila hubungi pentadbir anda.</translation>
@@ -6438,7 +6436,6 @@
 <translation id="8378714024927312812">Diurus oleh organisasi anda</translation>
 <translation id="8379878387931047019">Peranti ini tidak menyokong jenis kunci keselamatan yang diminta oleh tapak web ini</translation>
 <translation id="8379991678458444070">Tandai tab ini untuk kembali ke sini dengan cepat</translation>
-<translation id="8380266723152870797">Nama tetingkap</translation>
 <translation id="8382913212082956454">Salin &amp;alamat e-mel</translation>
 <translation id="8386091599636877289">Dasar tidak ditemui.</translation>
 <translation id="8386903983509584791">Pengimbasan selesai</translation>
@@ -6863,7 +6860,6 @@
 <translation id="8859402192569844210">Syarat Perkhidmatan tidak dapat dimuatkan</translation>
 <translation id="8859662783913000679">Akaun ibu bapa</translation>
 <translation id="8862003515646449717">Tukar kepada penyemak imbas yang pantas</translation>
-<translation id="8863140399813345099">Keterlihatan peranti anda mengawal orang yang boleh berkongsi dengan anda semasa skrin anda dibuka kunci</translation>
 <translation id="8863753581171631212">Buka pautan dalam <ph name="APP" /> baharu</translation>
 <translation id="8864055848767439877">Berkongsi <ph name="TAB_NAME" /> ke <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> telah dialih keluar daripada peranti ini</translation>
@@ -6917,7 +6913,6 @@
 <translation id="8912810933860534797">Dayakan autoimbas</translation>
 <translation id="8915370057835397490">Memuatkan cadangan</translation>
 <translation id="8916476537757519021">Subbingkai Inkognito: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Tetapkan Nama Tetingkap</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Hijau kebiruan gelap</translation>
 <translation id="8925458182817574960">&amp;Tetapan</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index a84bb47..f2846a1 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">ဝဘ်အကြောင်းအရာ ဘာသာစကားများ</translation>
 <translation id="3429275422858276529">နောင်တွင် အလွယ်တကူပြန်ရှာနိုင်ရန် ဤစာမျက်နှာ၏လိပ်စာကို မှတ်ထားပါ</translation>
 <translation id="3432227430032737297">ပြသထားသည်များအားလုံးကို ဖယ်ရှားရန်</translation>
-<translation id="3432757130254800023">အသံ နှင့် ဗီဒီယိုများကို ဒေသခံ ကွန်ရက်များပေါ်က မျက်နှာပြင်များသို့ ပို့ပါ</translation>
 <translation id="3432762828853624962">မျှဝေထားသော လုပ်သားများ</translation>
 <translation id="3433621910545056227">အို၊ သော့ချရန် လိုအပ်သည့် စက်ပစ္စည်းတပ်ဆင်ချိန်အား စနစ်မှ မစတင်နိုင်ပါ။</translation>
 <translation id="3434272557872943250">သင့်ကလေးအတွက် ထပ်တိုး 'ဝဘ်နှင့် အက်ပ်လုပ်ဆောင်ချက်' ကို ဖွင့်ထားသည့်အခါ ဤဒေတာကို သူ၏ Google အကောင့်သို့ သိမ်းသွားပါမည်။ ဤဆက်တင်များနှင့် ၎င်းတို့အား ချိန်ညှိနည်းကို families.google.com တွင် ပိုမိုလေ့လာပါ။</translation>
@@ -6242,7 +6241,6 @@
 <translation id="8147900440966275470">တဘ် <ph name="NUM" /> ခု တွေ့သည်</translation>
 <translation id="8148760431881541277">လက်မှတ်ထိုးဝင်မှု ကန့်သတ်ရန်</translation>
 <translation id="8150259863378108853">Lacros သည် စမ်းသပ်ဘရောင်ဇာ ဖြစ်သည်။ ပြဿနာများရှိပါက သတင်းပို့ရန် 'အကူအညီ' &gt; "ပြဿနာ တိုင်ကြားရန်..." သို့သွားပါ</translation>
-<translation id="8151579390896831136">အမည်အပါအဝင် သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ရန်</translation>
 <translation id="8151638057146502721">ပြုပြင်</translation>
 <translation id="8154790740888707867">ဖိုင်  မရှိ</translation>
 <translation id="815491593104042026">အူးပ်စ်! အထောက်အထား စိစစ်မှုမှာ မလုံခြုံသော URL (<ph name="BLOCKED_URL" />) ကို အသုံးပြုရန် စီစဉ်ထားခဲ့၍ မအောင်မြင်ခဲ့ပါ။ ကျေးဇူးပြုပြီး သင်၏ စီမံအုပ်ချုပ်သူကို ဆက်သွယ်ပါ။</translation>
@@ -6433,7 +6431,6 @@
 <translation id="8378714024927312812">သင်၏ 'အဖွဲ့အစည်း' က စီမံခန့်ခွဲထားသည်</translation>
 <translation id="8379878387931047019">ဤစက်ပစ္စည်းတွင် ဤဝဘ်ဆိုက်က တောင်းဆိုထားသော လုံခြုံရေးကီး အမျိုးအစားကို သုံး၍မရပါ</translation>
 <translation id="8379991678458444070">ဤတဘ်၏ လိပ်စာကို မှတ်ထားခြင်းဖြင့် အမြန်ပြန်ဖွင့်နိုင်သည်</translation>
-<translation id="8380266723152870797">ဝင်းဒိုးအမည်</translation>
 <translation id="8382913212082956454">အီးမေးလ် လိပ်စာ &amp;ကူးယူရန်</translation>
 <translation id="8386091599636877289">မူဝါဒကို မတွေ့ပါ။</translation>
 <translation id="8386903983509584791">ရှာဖွေပြီးပါပြီ</translation>
@@ -6858,7 +6855,6 @@
 <translation id="8859402192569844210">ဝန်ဆောင်မှု စည်းမျဉ်းများကို ဖွင့်၍မရနိုင်ပါ</translation>
 <translation id="8859662783913000679">မိဘ အကောင့်</translation>
 <translation id="8862003515646449717">ပိုမြန်သော ဘရောင်ဇာသို့ ပြောင်းပါ</translation>
-<translation id="8863140399813345099">ဖန်သားပြင်ဖွင့်ထားစဉ် သင့်အားမျှဝေနိုင်သူကို သင့်စက်၏မြင်နိုင်စွမ်းက ထိန်းချုပ်သည်</translation>
 <translation id="8863753581171631212"><ph name="APP" /> အသစ်တွင် လင့်ခ်ကို ဖွင့်ရန်</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> ကို <ph name="APP_NAME" /> သို့ မျှဝေနေသည်</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> ကို ဤစက်ပစ္စည်းမှနေ၍ ဖယ်ရှားလိုက်ပါပြီ</translation>
@@ -6912,7 +6908,6 @@
 <translation id="8912810933860534797">အလိုအလျောက် စကင်ဖတ်ခြင်းကို ဖွင့်ရန်</translation>
 <translation id="8915370057835397490">အကြံပေးချက်ကို တင်ပေးနေ</translation>
 <translation id="8916476537757519021">ရုပ်ဖျက် ဘောင်ငယ် : <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ဝင်းဒိုးအမည် သတ်မှတ်ပါ</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> ၏ <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">စိမ်းပြာအရင့်</translation>
 <translation id="8925458182817574960">&amp;ဆက်တင်များ</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 97a78077..e8ef0ad 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1041,6 +1041,7 @@
 <translation id="2154710561487035718">URL प्रतिलिपि गर्नुहोस्</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> जस्तो देखिन्छ</translation>
 <translation id="2156294658807918600">सेवातर्फका कर्मचारी: <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">फेरि सुरक्षा जाँच गर्नुहोस्</translation>
 <translation id="2157474325782140681">अतिरिक्त सुविधाहरू प्राप्त गर्न यो Chromebook का लागि उपयुक्त हुने गरी डिजाइन गरिएको Dell डकिङ स्टेसन प्रयोग गर्नुहोस्।</translation>
 <translation id="215753907730220065">पूरा स्क्रिन मोडबाट निस्कनुहोस्</translation>
 <translation id="2157875535253991059">यो पृष्ठ अभ फुल स्क्रिन छ।</translation>
@@ -1986,6 +1987,7 @@
 <translation id="3225319735946384299">कोड साइनिङ</translation>
 <translation id="3227137524299004712">माइक्रोफोन</translation>
 <translation id="3233271424239923319">Linux एप र फाइलहरू ब्याकअप गर्नुहोस्</translation>
+<translation id="3238192140106069382">यन्त्र कनेक्ट हुँदै छ र पुष्टि गरिँदै छ</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> को समय सीमा हटाइयो</translation>
 <translation id="3241680850019875542">प्याक गर्नको लागि एक्स्टेन्सनको मूल डाइरेक्टरी चयन गर्नुहोस्। कुनै एक्स्टेन्सनलाई अपडेट गर्न, पुन: प्रयोग गर्नकोो लागि निजी कुञ्जी फाइललाई पनि चयन गर्नुहोस्।</translation>
 <translation id="3244294424315804309">आवाज म्युट गरिराख्नुहोस्</translation>
@@ -2149,7 +2151,6 @@
 <translation id="3429271624041785769">वेब सामग्रीका भाषाहरू</translation>
 <translation id="3429275422858276529">यो पृष्ठलाई पछि सजिलैसँग फेला पार्नका लागि यसमा पुस्तक चिन्ह लगाउनुहोस्</translation>
 <translation id="3432227430032737297">देखाइएका सबै कुराहरू हटाउनुहोस्</translation>
-<translation id="3432757130254800023">स्थानीय नेटवर्कमा प्रदर्शनहरूमा अडियो र भिडियो पठाउनुहोस्</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">ओहो!  प्रणालीले यन्त्र स्थापना-समय विशेषण लक स्थापना गर्न असफल भयो।</translation>
 <translation id="3434272557872943250">तपाईंका बच्चाका खातामा वेब तथा एपसम्बन्धी अतिरिक्त गतिविधिको सेटिङ सक्रिय गरिएको छ भने यो डेटा उनको Google खातामा सुरक्षित गरिन सक्छ। families.google.com मा गएर यी सेटिङहरू र यिनलाई मिलाउने तरिकाबारे थप जान्नुहोस्।</translation>
@@ -6237,7 +6238,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ट्याब फेला पर्‍यो</translation>
 <translation id="8148760431881541277">साइन इन गर्ने सीमा तोक्नुहोस्</translation>
 <translation id="8150259863378108853">Lacros ब्राउजरको परीक्षण हुँदै छ। कृपया मद्दत &gt; "समस्याबारे रिपोर्ट गर्नुहोस्..." मा गई यस ब्राउजरमा देखिएका कुनै पनि समस्याबारे रिपोर्ट गर्नुहोस्</translation>
-<translation id="8151579390896831136">आफ्नो प्रोफाइल (यसको नामलगायतका कुराहरू) आफ्नो रोजाइ अनुकूल पार्नुहोस्</translation>
 <translation id="8151638057146502721">विन्यास गर्नुहोस्</translation>
 <translation id="8154790740888707867">कुनै फाइल छैन</translation>
 <translation id="815491593104042026">ओहो! प्रमाणीकरण असफल भयो किनभने त्यसले एक असुरक्षित युआरएल (<ph name="BLOCKED_URL" />) प्रयोग गर्न विन्यास गरिएको थियो। कृपया तपाइँको प्रशासकलाई सम्पर्क गर्नुहोस्।</translation>
@@ -6428,7 +6428,6 @@
 <translation id="8378714024927312812">तपाईंको सङ्गठनले व्यवस्थापन गरेको</translation>
 <translation id="8379878387931047019">यस यन्त्रले यो वेबसाइटले अनुरोध गरेको प्रकारको सुरक्षा साँचो प्रयोग गर्दैन</translation>
 <translation id="8379991678458444070">यो ट्याबमा पुस्तक चिन्ह लगाएर छिट्टै यहाँ फर्कनुहोस्</translation>
-<translation id="8380266723152870797">विन्डोको नाम</translation>
 <translation id="8382913212082956454">&amp;इमेल ठेगानाको प्रतिलिपी बनाउनुहोस्</translation>
 <translation id="8386091599636877289">नीति फेला परेन।</translation>
 <translation id="8386903983509584791">स्क्यान कार्य पूरा भयो</translation>
@@ -6853,7 +6852,6 @@
 <translation id="8859402192569844210">सेवाका सर्तहरू लोड गर्न सकिएन</translation>
 <translation id="8859662783913000679">अभिभावकको खाता</translation>
 <translation id="8862003515646449717">कुनै द्रुत ब्राउजरमा स्विच गर्नुहोस्</translation>
-<translation id="8863140399813345099">तपाईंको यन्त्रको भिजिबिलिटीका माध्यमबाट तपाईंको स्क्रिन अनलक हुँदा तपाईंसँग कसले सेयर गर्न सक्छन् भन्ने कुरा तोक्न सकिन्छ</translation>
 <translation id="8863753581171631212">लिंकलाई नयाँ <ph name="APP" /> मा खोल्नुहोस्</translation>
 <translation id="8864055848767439877"><ph name="APP_NAME" /> सँग <ph name="TAB_NAME" /> आदान प्रदान गर्दै</translation>
 <translation id="8864458770072227512">यो यन्त्रबाट <ph name="EMAIL" /> हटाइयो</translation>
@@ -6907,7 +6905,6 @@
 <translation id="8912810933860534797">स्वतः स्क्यान गर्ने सुविधा सक्षम पार्नुहोस्</translation>
 <translation id="8915370057835397490">सुझावहरू लोड गर्दै</translation>
 <translation id="8916476537757519021">इनकगनिटो सबफ्रेम: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">विन्डोको नाम सेट गर्नुहोस्</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> को <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">गाढा निलो-हरियो मिश्रित रङ्ग</translation>
 <translation id="8925458182817574960">&amp;सेटिङहरू</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 647a69d..aa7a1ff 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Talen voor webcontent</translation>
 <translation id="3429275422858276529">Stel een bookmark in voor deze pagina zodat je de pagina later makkelijk kunt terugvinden</translation>
 <translation id="3432227430032737297">Alle weergegeven verwijderen</translation>
-<translation id="3432757130254800023">Audio en video verzenden naar displays in het lokale netwerk</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Het systeem kan de vergrendeling van de instellingen ten tijde van de apparaatinstallatie niet uitvoeren.</translation>
 <translation id="3434272557872943250">Als je de instelling voor aanvullende Web- en app-activiteit hebt ingeschakeld voor je kind, kunnen deze gegevens worden opgeslagen in het Google-account van je kind. Meer informatie over deze instellingen en hoe je deze kunt aanpassen vind je op families.google.com.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> tabblad gevonden</translation>
 <translation id="8148760431881541277">Inloggen beperken</translation>
 <translation id="8150259863378108853">Lacros is een experimentele browser. Meld problemen via Help &gt; Een probleem melden.</translation>
-<translation id="8151579390896831136">Je profiel aanpassen, inclusief de naam</translation>
 <translation id="8151638057146502721">Configureren</translation>
 <translation id="8154790740888707867">Geen bestand</translation>
 <translation id="815491593104042026">De verificatie is mislukt omdat er een onbeveiligde URL (<ph name="BLOCKED_URL" />) wordt gebruikt. Neem contact op met je beheerder.</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">Beheerd door je organisatie</translation>
 <translation id="8379878387931047019">Dit apparaat biedt geen ondersteuning voor het type beveiligingssleutel dat is vereist voor deze website</translation>
 <translation id="8379991678458444070">Je kunt hier snel terugkeren als je een bookmark voor dit tabblad maakt</translation>
-<translation id="8380266723152870797">Vensternaam</translation>
 <translation id="8382913212082956454">&amp;E-mailadres kopiëren</translation>
 <translation id="8386091599636877289">Beleid niet gevonden.</translation>
 <translation id="8386903983509584791">Scan voltooid</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Servicevoorwaarden kunnen niet worden geladen</translation>
 <translation id="8859662783913000679">Ouderaccount</translation>
 <translation id="8862003515646449717">Overschakelen naar een snelle browser</translation>
-<translation id="8863140399813345099">Je apparaatzichtbaarheid bepaalt wie content met je kan delen terwijl je scherm ontgrendeld is</translation>
 <translation id="8863753581171631212">Link openen in nieuw <ph name="APP" />-venster</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> wordt gedeeld met <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> is verwijderd van dit apparaat</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Automatisch scannen inschakelen</translation>
 <translation id="8915370057835397490">Suggestie wordt geladen</translation>
 <translation id="8916476537757519021">Incognito-subframe: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Vensternaam instellen</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> van <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Donkerblauwgroen</translation>
 <translation id="8925458182817574960">&amp;Instellingen</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index faae6a01..cdc4137 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -2151,7 +2151,6 @@
 <translation id="3429271624041785769">Språk for nettinnhold</translation>
 <translation id="3429275422858276529">Sett denne siden som bokmerke for å finne den enkelt senere</translation>
 <translation id="3432227430032737297">Fjern alle som vises</translation>
-<translation id="3432757130254800023">Send lyd og bilde til skjermer på lokalnettverket</translation>
 <translation id="3432762828853624962">Delte arbeidere (SharedWorker)</translation>
 <translation id="3433621910545056227">Beklager. Systemet kunne ikke oppdage enhetens attributtlås for installasjonstid.</translation>
 <translation id="3434272557872943250">Hvis du har slått på innstillingen for annen nett- og appaktivitet for barnet ditt, kan disse dataene bli lagret i barnets Google-konto. Finn ut mer om disse innstillingene og hvordan du justerer dem, på families.google.com.</translation>
@@ -6241,7 +6240,6 @@
 <translation id="8147900440966275470">Fant <ph name="NUM" /> fane</translation>
 <translation id="8148760431881541277">Begrens pålogging</translation>
 <translation id="8150259863378108853">Lacros er en nettleser på forsøksstadiet. Rapportér eventuelle problemer via Hjelp &gt; «Rapportér et problem».</translation>
-<translation id="8151579390896831136">Tilpass profilen din, inkludert navnet</translation>
 <translation id="8151638057146502721">Konfigurer</translation>
 <translation id="8154790740888707867">Ingen fil</translation>
 <translation id="815491593104042026">Beklager. Autentiseringen mislyktes fordi den var konfigurert til å bruke en usikret nettadresse (<ph name="BLOCKED_URL" />). Ta kontakt med administratoren din.</translation>
@@ -6432,7 +6430,6 @@
 <translation id="8378714024927312812">Administreres av organisasjonen din</translation>
 <translation id="8379878387931047019">Denne enheten støtter ikke den typen sikkerhetsnøkkel som kreves av dette nettstedet</translation>
 <translation id="8379991678458444070">Kom raskt tilbake hit ved å bokmerke denne fanen</translation>
-<translation id="8380266723152870797">Vindusnavn</translation>
 <translation id="8382913212082956454">Kopier &amp;e-postadresse</translation>
 <translation id="8386091599636877289">Fant ikke regelen.</translation>
 <translation id="8386903983509584791">Skanningen er fullført</translation>
@@ -6857,7 +6854,6 @@
 <translation id="8859402192569844210">Kunne ikke laste inn vilkårene for bruk</translation>
 <translation id="8859662783913000679">Foreldrekonto</translation>
 <translation id="8862003515646449717">Bytt til en raskere nettleser</translation>
-<translation id="8863140399813345099">Synligheten til enheten din kontrollerer hvem som kan dele med deg mens skjermen er låst opp</translation>
 <translation id="8863753581171631212">Åpne linken i ny <ph name="APP" /></translation>
 <translation id="8864055848767439877">Deler <ph name="TAB_NAME" /> med <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> ble fjernet fra denne enheten</translation>
@@ -6911,7 +6907,6 @@
 <translation id="8912810933860534797">Aktivér automatisk skanning</translation>
 <translation id="8915370057835397490">Laster inn forslag …</translation>
 <translation id="8916476537757519021">Inkognito-underramme: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Angi vindusnavn</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> – <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Mørk blågrønn</translation>
 <translation id="8925458182817574960">&amp;Innstillinger</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index aa5e4d57..874b676 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -1039,6 +1039,7 @@
 <translation id="2154710561487035718">URL କପି କରନ୍ତୁ</translation>
 <translation id="2155772377859296191">ଏପରି ଜଣାଯାଉଛି <ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="2156294658807918600">ସର୍ଭିସ୍ ୱାର୍କର୍: <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">ସୁରକ୍ଷା ଯାଞ୍ଚ ପୁଣି ଚଲାନ୍ତୁ</translation>
 <translation id="2157474325782140681">ଅତିରିକ୍ତ ଫିଚର୍‌ଗୁଡ଼ିକ ପାଇବା ନିମନ୍ତେ ଏହି Chromebook ସହ କାମ କରିବା ପାଇଁ ଡିଜାଇନ୍ କରାଯାଇଥିବା ଏକ Dell ଡକିଂ ଷ୍ଟେସନ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
 <translation id="215753907730220065">ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ରୁ ବାହାରି ଆସନ୍ତୁ</translation>
 <translation id="2157875535253991059">ଏହି ପୃଷ୍ଠା ବର୍ତ୍ତମାନ ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ରେ ଅଛି।</translation>
@@ -1982,6 +1983,7 @@
 <translation id="3225319735946384299">କୋଡ୍‌ ହସ୍ତାକ୍ଷର</translation>
 <translation id="3227137524299004712">ମାଇକ୍ରୋଫୋନ୍</translation>
 <translation id="3233271424239923319">Linux ଆପ୍ସ ଏବଂ ଫାଇଲ୍‌ଗୁଡ଼ିକର ବ୍ୟାକ୍‍ଅପ୍ ନିଅନ୍ତୁ</translation>
+<translation id="3238192140106069382">ସଂଯୋଗ ଓ ଯାଞ୍ଚ କରାଯାଉଛି</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> ପାଇଁ ସମୟ ସୀମା କଢ଼ାଯାଇଛି</translation>
 <translation id="3241680850019875542">ପ୍ୟାକ୍ କରିବା ପାଇଁ ଏକ୍ସଟେନ୍‌ସନ୍‌ର ରୂଟ୍ ଡିରେକ୍ଟରୀ ଚୟନ କରନ୍ତୁ। ଏକ ଏକ୍ସଟେନ୍‌ସନ୍ ଅପ୍‌ଡେଟ୍ କରିବା ପାଇଁ, ପୁଣିଥରେ ବ୍ୟବହାର କରିବାକୁ ବ୍ୟକ୍ତିଗତ କୀ' ଫାଇଲ୍‌କୁ ମଧ୍ୟ ବାଛନ୍ତୁ।</translation>
 <translation id="3244294424315804309">ସାଉଣ୍ଡ ମ୍ୟୁଟ୍‍ କରିବା ଜାରି ରଖନ୍ତୁ</translation>
@@ -2145,7 +2147,6 @@
 <translation id="3429271624041785769">ୱେବ୍ ବିଷୟବସ୍ତୁ ଭାଷାଗୁଡ଼ିକ</translation>
 <translation id="3429275422858276529">ଏହାକୁ ପରେ ସହଜରେ ଖୋଜିବା ପାଇଁ ଏହି ପୃଷ୍ଠାକୁ ବୁକ୍‌ମାର୍କ କରନ୍ତୁ</translation>
 <translation id="3432227430032737297">ସମସ୍ତ ପ୍ରଦର୍ଶନକୁ କାଢ଼ି ଦିଅନ୍ତୁ</translation>
-<translation id="3432757130254800023">ସ୍ଥାନୀୟ ନେଟ୍‍ୱର୍କରେ ପ୍ରଦର୍ଶନ କରିବା ପାଇଁ ଅଡିଓ ଏବଂ ଭିଡିଓ ପଠାନ୍ତୁ</translation>
 <translation id="3432762828853624962">ସେୟାର୍ କରାଯାଇଥିବା କର୍ମୀ</translation>
 <translation id="3433621910545056227">ଓହୋ!  ସିଷ୍ଟମ୍‌, ଡିଭାଇସ୍‌ ଇନ୍‌ଷ୍ଟଲେସନ୍-ସମୟ ବୈଶିଷ୍ଟ୍ୟ ଲକ୍‌ ସ୍ଥାପନା କରିବାରେ ବିଫଳ ହୋଇଛି।</translation>
 <translation id="3434272557872943250">ଯଦି ଆପଣଙ୍କ ପିଲା ପାଇଁ ଅତିରିକ୍ତ ୱେବ୍ ଏବଂ ଆପ୍ କାର୍ଯ୍ୟକଳାପ ସେଟିଂସ୍ ଚାଲୁ ଥାଏ, ତେବେ ଏହି ଡାଟା ତା'ର Google ଆକାଉଣ୍ଟରେ ସେଭ୍ ହୋଇପାରେ। ଏହି ସେଟିଂସ୍ ଏବଂ ସେଗୁଡ଼ିକୁ କିପରି ଆଡଜଷ୍ଟ କରାଯାଏ, ସେ ବିଷୟରେ families.google.comରେ ଅଧିକ ଜାଣନ୍ତୁ।</translation>
@@ -6235,7 +6236,6 @@
 <translation id="8147900440966275470"><ph name="NUM" />ଟି ଟାବ୍ ମିଳିଲା</translation>
 <translation id="8148760431881541277">ସାଇନ୍-ଇନ୍ ସୀମିତ କରନ୍ତୁ</translation>
 <translation id="8150259863378108853">Lacros ଏକ ପରୀକ୍ଷାମୂଳକ ବ୍ରାଉଜର୍ ଅଟେ। ଦୟାକରି ଯେ କୌଣସି ସମସ୍ୟା ବିଷୟରେ ସହାୟତା &gt; "ଏକ ସମସ୍ୟା ବିଷୟରେ ରିପୋର୍ଟ କରନ୍ତୁ..."ରେ ରିପୋର୍ଟ କରନ୍ତୁ</translation>
-<translation id="8151579390896831136">ଆପଣଙ୍କ ପ୍ରୋଫାଇଲକୁ, ଏହାର ନାମ ସହିତ କଷ୍ଟମାଇଜ୍ କରନ୍ତୁ</translation>
 <translation id="8151638057146502721">କନ୍‍ଫିଗର୍ କରନ୍ତୁ</translation>
 <translation id="8154790740888707867">କୌଣସି ଫାଇଲ୍‌ ନାହିଁ</translation>
 <translation id="815491593104042026">ଓହୋ!  ପ୍ରାମାଣିକତା ବିଫଳ ହେଲା କାରଣ ଗୋଟିଏ ଅସୁରକ୍ଷିତ URLକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଏହାକୁ କନଫିଗର୍ କରାଯାଇଥିଲା (<ph name="BLOCKED_URL" />)। ଦୟାକରି ନିଜର ବ୍ୟବସ୍ଥାପକଙ୍କ ସହିତ ସମ୍ପର୍କ କରନ୍ତୁ।</translation>
@@ -6426,7 +6426,6 @@
 <translation id="8378714024927312812">ଆପଣଙ୍କର ସଂସ୍ଥା ଦ୍ୱାରା ପରିଚାଳିତ</translation>
 <translation id="8379878387931047019">ଏହି ଡିଭାଇସ୍ ଏହି ୱେବ୍‍ସାଇଟ୍ ଦ୍ୱାରା ଅନୁରୋଧ କରାଯାଇଥିବା ସୁରକ୍ଷା କୀ'ର ପ୍ରକାରକୁ ସମର୍ଥନ କରେ ନାହିଁ</translation>
 <translation id="8379991678458444070">ଏହି ଟାବ୍‌କୁ ବୁକ୍‌ମାର୍କ କରି ଏଠାକୁ ଦ୍ରୁତଭାବରେ ପୁଣି ଆସନ୍ତୁ</translation>
-<translation id="8380266723152870797">ୱିଣ୍ଡୋର ନାମ</translation>
 <translation id="8382913212082956454">ଇମେଲ୍ ଠିକଣା କପି କରନ୍ତୁ</translation>
 <translation id="8386091599636877289">ନୀତି ମିଳିଲା ନାହିଁ।</translation>
 <translation id="8386903983509584791">ସ୍କାନ୍ ସମ୍ପୂର୍ଣ୍ଣ ହେଲା</translation>
@@ -6851,7 +6850,6 @@
 <translation id="8859402192569844210">ସେବାର ସର୍ତ୍ତାବଳୀ ଲୋଡ୍ କରାଯାଇପାରିଲା ନାହିଁ</translation>
 <translation id="8859662783913000679">ବାପାମାଙ୍କ ଆକାଉଣ୍ଟ</translation>
 <translation id="8862003515646449717">ଏକ ଦ୍ରୁତ ବ୍ରାଉଜର୍‍କୁ ସ୍ୱିଚ୍ କରନ୍ତୁ</translation>
-<translation id="8863140399813345099">ଆପଣଙ୍କ ସ୍କ୍ରିନ୍ ଅନଲକ୍ ଥିବା ସମୟରେ ଆପଣଙ୍କ ସହ କିଏ ସେୟାର୍ କରିପାରିବେ ତାହା ଆପଣଙ୍କ ଡିଭାଇସ୍ ଭିଜିବିଲିଟୀ ନିୟନ୍ତ୍ରଣ କରିଥାଏ</translation>
 <translation id="8863753581171631212">ନୂଆ <ph name="APP" />ରେ ଲିଙ୍କ୍‍ ଖୋଲନ୍ତୁ</translation>
 <translation id="8864055848767439877"><ph name="APP_NAME" /> ସହ <ph name="TAB_NAME" /> ସେୟାର୍ କରାଯାଉଛି</translation>
 <translation id="8864458770072227512">ଏହି ଡିଭାଇସ୍‌ରୁ <ph name="EMAIL" /> କାଢ଼ି ଦିଆଯାଇଥିଲା</translation>
@@ -6905,7 +6903,6 @@
 <translation id="8912810933860534797">ସ୍ୱତଃ-ସ୍କାନ୍ ସକ୍ଷମ କରନ୍ତୁ</translation>
 <translation id="8915370057835397490">ପରାମର୍ଶ ଲୋଡ୍‌ ହେଉଛି</translation>
 <translation id="8916476537757519021">ଇନ୍‌କଗ୍ନିଟୋ ସବଫ୍ରେମ୍: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ୱିଣ୍ଡୋର ନାମ ସେଟ୍ କରନ୍ତୁ</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />ଙ୍କ <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">ଗାଢ଼ ଟିଲ୍</translation>
 <translation id="8925458182817574960">&amp;ସେଟିଂସ୍</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index 5f0bf30..e252773 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -442,7 +442,7 @@
 <translation id="1486096554574027028">ਪਾਸਵਰਡ ਖੋਜੋ</translation>
 <translation id="1487335504823219454">ਚਾਲੂ - ਸੈਟਿੰਗਾਂ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ</translation>
 <translation id="1489664337021920575">ਕੋਈ ਹੋਰ ਵਿਕਲਪ ਚੁਣੋ</translation>
-<translation id="1490491397986065675">ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ "<ph name="CUSTOM_MESSAGE" />" ਕਹਿੰਦਾ ਹੈ।</translation>
+<translation id="1490491397986065675">ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਕਹਿੰਦਾ ਹੈ "<ph name="CUSTOM_MESSAGE" />"।</translation>
 <translation id="1492417797159476138">ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਇਸ ਸਾਈਟ ਲਈ ਇਹ ਵਰਤੋਂਕਾਰ ਨਾਮ ਰੱਖਿਅਤ ਕਰ ਚੁੱਕੇ ਹੋ</translation>
 <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ...</translation>
 <translation id="1495677929897281669">ਟੈਬ 'ਤੇ ਵਾਪਸ ਜਾਓ</translation>
@@ -2151,7 +2151,6 @@
 <translation id="3429271624041785769">ਵੈੱਬ ਸਮੱਗਰੀ ਦੀਆਂ ਭਾਸ਼ਾਵਾਂ</translation>
 <translation id="3429275422858276529">ਇਸ ਪੰਨੇ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਆਸਾਨੀ ਨਾਲ ਲੱਭਣ ਲਈ ਇਸਨੂੰ ਬੁੱਕਮਾਰਕ ਕਰੋ</translation>
 <translation id="3432227430032737297">ਸਾਰੇ ਵਿਖਾਏ ਗਏ ਹਟਾਓ</translation>
-<translation id="3432757130254800023">ਸਥਾਨਕ ਨੈੱਟਵਰਕ 'ਤੇ ਦਿਖਾਉਣ ਲਈ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਭੇਜੋ</translation>
 <translation id="3432762828853624962">ਸਾਂਝੇ ਕੀਤੇ ਗਏ ਵਰਕਰ</translation>
 <translation id="3433621910545056227">ਓਹੋ! ਸਿਸਟਮ ਡੀਵਾਈਸ ਸਥਾਪਨਾ-ਸਮਾਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲਾਕ ਨੂੰ ਸਥਾਪਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ।</translation>
 <translation id="3434272557872943250">ਜੇ ਤੁਹਾਡੇ ਬੱਚੇ ਲਈ ਵਧੀਕ 'ਵੈੱਬ ਅਤੇ ਐਪ ਸਰਗਰਮੀ' ਸੈਟਿੰਗ ਚਾਲੂ ਹੋਵੇ, ਤਾਂ ਇਹ ਡਾਟਾ ਉਹਨਾਂ ਦੇ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। families.google.com 'ਤੇ ਇਹਨਾਂ ਸੈਟਿੰਗਾਂ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਨ ਦੇ ਤਰੀਕੇ ਬਾਰੇ ਹੋਰ ਜਾਣੋ।</translation>
@@ -6239,7 +6238,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ਟੈਬ ਮਿਲੀ</translation>
 <translation id="8148760431881541277">ਸੀਮਤ ਸਾਈਨ-ਇਨ</translation>
 <translation id="8150259863378108853">Lacros ਇੱਕ ਪ੍ਰਯੋਗਮਈ ਬ੍ਰਾਊਜ਼ਰ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਮਦਦ &gt; "ਕਿਸੇ ਸਮੱਸਿਆ ਦੀ ਰਿਪੋਰਟ ਕਰੋ..." ਵਿੱਚ ਜਾ ਕੇ ਕਿਸੇ ਵੀ ਸਮੱਸਿਆ ਦੀ ਰਿਪੋਰਟ ਕਰੋ</translation>
-<translation id="8151579390896831136">ਨਾਮ ਸਮੇਤ ਆਪਣੇ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ</translation>
 <translation id="8151638057146502721">ਸੰਰੂਪਿਤ ਕਰੋ</translation>
 <translation id="8154790740888707867">ਕੋਈ ਫਾਈਲ ਨਹੀਂ</translation>
 <translation id="815491593104042026">ਓਹੋ! ਪ੍ਰਮਾਣੀਕਰਨ ਅਸਫਲ ਹੋ ਗਿਆ ਕਿਉਂਕਿ ਇਹ ਕਿਸੇ ਗੈਰ-ਸੁਰੱਖਿਅਤ URL (<ph name="BLOCKED_URL" />) ਨਾਲ ਸੰਰੂਪਿਤ ਕੀਤਾ ਗਿਆ ਸੀ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</translation>
@@ -6430,7 +6428,6 @@
 <translation id="8378714024927312812">ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਪ੍ਰਬੰਧਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation>
 <translation id="8379878387931047019">ਇਹ ਡੀਵਾਈਸ ਇਸ ਵੈੱਬਸਾਈਟ ਵੱਲੋਂ ਬੇਨਤੀ ਕੀਤੀ ਗਈ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਦੀ ਕਿਸਮ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ ਹੈ</translation>
 <translation id="8379991678458444070">ਇਸ ਟੈਬ ਨੂੰ ਬੁੱਕਮਾਰਕ ਕਰੋ ਤਾਂ ਕਿ ਤੁਸੀਂ ਇੱਥੇ ਤੇਜ਼ੀ ਨਾਲ ਵਾਪਸ ਆ ਸਕੋ</translation>
-<translation id="8380266723152870797">ਵਿੰਡੋ ਦਾ ਨਾਮ</translation>
 <translation id="8382913212082956454">&amp;ਈਮੇਲ ਪਤਾ ਕਾਪੀ ਕਰੋ</translation>
 <translation id="8386091599636877289">ਨੀਤੀ ਨਹੀਂ ਮਿਲੀ।</translation>
 <translation id="8386903983509584791">ਸਕੈਨ ਪੂਰਾ ਹੋਈ</translation>
@@ -6856,7 +6853,6 @@
 <translation id="8859402192569844210">ਸੇਵਾ ਦੇ ਨਿਯਮਾਂ ਨੂੰ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ</translation>
 <translation id="8859662783913000679">ਮਾਂ-ਪਿਓ ਦਾ ਖਾਤਾ</translation>
 <translation id="8862003515646449717">ਤੇਜ਼ ਬ੍ਰਾਊਜ਼ਰ 'ਤੇ ਸਵਿੱਚ ਕਰੋ</translation>
-<translation id="8863140399813345099">ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਦਿਖਣਯੋਗਤਾ ਇਹ ਕੰਟਰੋਲ ਕਰਦੀ ਹੈ ਕਿ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਅਣਲਾਕ ਹੋਣ 'ਤੇ ਤੁਹਾਡੇ ਨਾਲ ਕੌਣ ਫ਼ਾਈਲਾਂ ਸਾਂਝੀਆਂ ਕਰ ਸਕਦਾ ਹੈ</translation>
 <translation id="8863753581171631212">ਨਵੀਂ <ph name="APP" /> ਵਿੱਚ ਲਿੰਕ ਖੋਲ੍ਹੋ</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> ਨੂੰ <ph name="APP_NAME" /> ਨਾਲ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਹਟਾਇਆ ਗਿਆ</translation>
@@ -6910,7 +6906,6 @@
 <translation id="8912810933860534797">ਸਵੈਚਲਿਤ ਸਕੈਨ ਚਾਲੂ ਕਰੋ</translation>
 <translation id="8915370057835397490">ਸੁਝਾਅ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ</translation>
 <translation id="8916476537757519021">ਗੁਮਨਾਮ ਸਬਫ੍ਰੇਮ: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ਵਿੰਡੋ ਦਾ ਨਾਮ ਸੈੱਟ ਕਰੋ</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> ਦਾ <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">ਗੂੜ੍ਹਾ ਹਰਾ-ਨੀਲਾ</translation>
 <translation id="8925458182817574960">&amp;ਸੈਟਿੰਗਾਂ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 82fe4da7..d26428f7 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -2152,7 +2152,6 @@
 <translation id="3429271624041785769">Języki treści internetowych</translation>
 <translation id="3429275422858276529">Dodaj tę stronę do zakładek, by później łatwo ją znaleźć</translation>
 <translation id="3432227430032737297">Usuń wszystkie wyświetlone</translation>
-<translation id="3432757130254800023">Wysyłanie obrazu i dźwięku na ekrany w sieci lokalnej</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Ups! System nie mógł ustanowić blokady atrybutów urządzenia na czas instalacji.</translation>
 <translation id="3434272557872943250">Jeśli na koncie Google dziecka włączysz ustawienie Dodatkowa aktywność w internecie i aplikacjach, te dane mogą być zapisywane na jego koncie. Więcej informacji o tych ustawieniach i sposobie ich zmiany znajdziesz na families.google.com.</translation>
@@ -4877,7 +4876,7 @@
 <translation id="6605847144724004692">Nikt jeszcze tego nie ocenił</translation>
 <translation id="6607831829715835317">Więcej narzę&amp;dzi</translation>
 <translation id="6607890859198268021">Konto <ph name="USER_EMAIL" /> jest już zarządzane przez domenę <ph name="DOMAIN" />. Aby korzystać z kontroli rodzicielskiej na innym koncie Google, wyloguj się po konfiguracji, a potem wybierz „Dodaj osobę” na ekranie logowania.</translation>
-<translation id="6609478180749378879">Dane logowania pozostaną zapisane na tym urządzeniu po wyjściu z trybu incognito. Będziesz mieć możliwość logowania się w tej witrynie za pomocą tego urządzenia.</translation>
+<translation id="6609478180749378879">Dane logowania pozostaną zapisane na tym urządzeniu po wyjściu z trybu incognito. Da Ci to później możliwość zalogowania się w witrynie za pomocą tego urządzenia.</translation>
 <translation id="6611972847767394631">Tu znajdziesz karty</translation>
 <translation id="6612358246767739896">Treść chroniona</translation>
 <translation id="6615455863669487791">Pokaż mi</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470">Znaleziono <ph name="NUM" /> kartę</translation>
 <translation id="8148760431881541277">Ograniczanie logowania</translation>
 <translation id="8150259863378108853">Lacros to przeglądarka eksperymentalna. Jeśli pojawią się jakieś problemy, zgłoś je, klikając Pomoc &gt; „Zgłoś problem…”.</translation>
-<translation id="8151579390896831136">Dostosuj swój profil, w tym jego nazwę</translation>
 <translation id="8151638057146502721">Konfiguruj</translation>
 <translation id="8154790740888707867">Brak pliku</translation>
 <translation id="815491593104042026">Ups, uwierzytelnianie nie powiodło się, bo zostało skonfigurowane do używania niezabezpieczonego URL-a (<ph name="BLOCKED_URL" />). Skontaktuj się z administratorem.</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">Zarządzane przez Twoją organizację</translation>
 <translation id="8379878387931047019">To urządzenie nie obsługuje typu klucza bezpieczeństwa, o który prosi ta witryna</translation>
 <translation id="8379991678458444070">Dodaj tę stronę do zakładek, by szybko na nią wrócić</translation>
-<translation id="8380266723152870797">Nazwa okna</translation>
 <translation id="8382913212082956454">Kopiuj adres &amp;e-mail</translation>
 <translation id="8386091599636877289">Nie znaleziono zasady.</translation>
 <translation id="8386903983509584791">Skanowanie ukończone</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Nie udało się załadować Warunków korzystania z usługi</translation>
 <translation id="8859662783913000679">Konto rodzica</translation>
 <translation id="8862003515646449717">Przejdź na szybką przeglądarkę</translation>
-<translation id="8863140399813345099">Od widoczności urządzenia zależy, kto może udostępniać Ci dane, gdy masz odblokowany ekran.</translation>
 <translation id="8863753581171631212">Otwórz link w nowym oknie aplikacji <ph name="APP" /></translation>
 <translation id="8864055848767439877">Udostępniam kartę <ph name="TAB_NAME" /> aplikacji <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Konto <ph name="EMAIL" /> zostało usunięte z tego urządzenia</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Włącz automatyczne skanowanie</translation>
 <translation id="8915370057835397490">Ładuję sugestie</translation>
 <translation id="8916476537757519021">Ramka podrzędna incognito: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Ustaw nazwę okna</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />: <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Ciemny morski</translation>
 <translation id="8925458182817574960">&amp;Ustawienia</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 531bf03..96f3c28a 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Idiomas de conteúdo da Web</translation>
 <translation id="3429275422858276529">Adicionar esta página aos favoritos para encontrá-la mais facilmente depois</translation>
 <translation id="3432227430032737297">Remover todos os cookies mostrados</translation>
-<translation id="3432757130254800023">Enviar áudio e vídeo para telas na rede local</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Ops! O sistema falhou ao estabelecer o bloqueio de atributos da hora de instalação do dispositivo.</translation>
 <translation id="3434272557872943250">Se a configuração "Atividade na Web e de apps adicional" estiver ativada para a criança, esses dados poderão ser salvos na Conta do Google dela. Saiba mais sobre essas configurações e como ajustá-las em families.google.com.</translation>
@@ -6247,7 +6246,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> guia encontrada</translation>
 <translation id="8148760431881541277">Limitar login</translation>
 <translation id="8150259863378108853">O Lacros é um navegador experimental. Informe qualquer problema em "Ajuda &gt; Informar um problema…"</translation>
-<translation id="8151579390896831136">Personalize seu perfil, incluindo o nome dele</translation>
 <translation id="8151638057146502721">Configurar</translation>
 <translation id="8154790740888707867">Nenhum arquivo</translation>
 <translation id="815491593104042026">Falha na autenticação, porque ela foi configurada para usar um URL não seguro (<ph name="BLOCKED_URL" />). Entre em contato com o administrador.</translation>
@@ -6438,7 +6436,6 @@
 <translation id="8378714024927312812">Gerenciado pela sua organização</translation>
 <translation id="8379878387931047019">Este dispositivo não é compatível com o tipo de chave de segurança solicitado por este site</translation>
 <translation id="8379991678458444070">Para voltar a esta guia rapidamente, adicione-a aos favoritos</translation>
-<translation id="8380266723152870797">Nome da janela</translation>
 <translation id="8382913212082956454">Copiar &amp;endereço de e-mail</translation>
 <translation id="8386091599636877289">Política não encontrada.</translation>
 <translation id="8386903983509584791">Verificação concluída</translation>
@@ -6864,7 +6861,6 @@
 <translation id="8859402192569844210">Não foi possível carregar os Termos de Serviço</translation>
 <translation id="8859662783913000679">Conta de pai/mãe</translation>
 <translation id="8862003515646449717">Mudar para um navegador rápido</translation>
-<translation id="8863140399813345099">A visibilidade do dispositivo controla quem pode compartilhar itens com você enquanto sua tela está desbloqueada</translation>
 <translation id="8863753581171631212">Abrir link em nova janela do <ph name="APP" /></translation>
 <translation id="8864055848767439877">Compartilhando <ph name="TAB_NAME" /> com <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">A conta <ph name="EMAIL" /> foi removida deste dispositivo</translation>
@@ -6918,7 +6914,6 @@
 <translation id="8912810933860534797">Ativar verificação automática</translation>
 <translation id="8915370057835397490">Carregando sugestão</translation>
 <translation id="8916476537757519021">Subquadro anônimo: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Defina um nome para a janela</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> de <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Azul-petróleo-escuro</translation>
 <translation id="8925458182817574960">&amp;Configurações</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 2611f907..d342159 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Idiomas de conteúdo Web</translation>
 <translation id="3429275422858276529">Adicione esta página aos marcadores para encontrá-la facilmente mais tarde</translation>
 <translation id="3432227430032737297">Remover tudo o que é mostrado</translation>
-<translation id="3432757130254800023">Enviar áudio e vídeo para ecrãs na rede local</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Ups! Falha do sistema ao estabelecer o bloqueio dos atributos de hora-instalação do dispositivo.</translation>
 <translation id="3434272557872943250">Se a definição Atividade da Web e de apps adicional estiver ativada para a criança, estes dados podem ser guardados na respetiva Conta Google. Saiba mais acerca destas definições e como as pode ajustar em families.google.com.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> separador encontrado</translation>
 <translation id="8148760431881541277">Limitar início de sessão</translation>
 <translation id="8150259863378108853">O Lacros é um navegador experimental. Comunique quaisquer problemas em Ajuda &gt; "Comunicar um problema…"</translation>
-<translation id="8151579390896831136">Personalize o seu perfil, incluindo o respetivo nome</translation>
 <translation id="8151638057146502721">Configurar</translation>
 <translation id="8154790740888707867">Sem ficheiro</translation>
 <translation id="815491593104042026">Ups! A autenticação falhou, porque foi configurada para utilizar um URL não seguro (<ph name="BLOCKED_URL" />). Contacte o gestor.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Gerido pela sua entidade</translation>
 <translation id="8379878387931047019">Este dispositivo não suporta o tipo de chave de segurança necessário para este Website.</translation>
 <translation id="8379991678458444070">Volte aqui rapidamente ao adicionar este separador aos marcadores</translation>
-<translation id="8380266723152870797">Nome da janela</translation>
 <translation id="8382913212082956454">Copiar &amp;endereço de email</translation>
 <translation id="8386091599636877289">A política não foi encontrada.</translation>
 <translation id="8386903983509584791">Análise concluída</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Não foi possível carregar os Termos de Utilização</translation>
 <translation id="8859662783913000679">Conta parental</translation>
 <translation id="8862003515646449717">Mude para um navegador rápido</translation>
-<translation id="8863140399813345099">A visibilidade do dispositivo controla quem pode efetuar partilhas consigo enquanto o ecrã está desbloqueado</translation>
 <translation id="8863753581171631212">Abrir link numa nova janela da aplicação <ph name="APP" /></translation>
 <translation id="8864055848767439877">A partilhar <ph name="TAB_NAME" /> com o <ph name="APP_NAME" />…</translation>
 <translation id="8864458770072227512">O email <ph name="EMAIL" /> foi removido deste dispositivo.</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Ativar análise automática</translation>
 <translation id="8915370057835397490">A carregar sugestão</translation>
 <translation id="8916476537757519021">Subestrutura da navegação anónima: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Defina o nome da janela</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> de <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Azul esverdeado escuro</translation>
 <translation id="8925458182817574960">&amp;Definições</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 8c5e089..a608c69d 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Limbile conținutului web</translation>
 <translation id="3429275422858276529">Marchează această pagină pentru a o găsi ușor mai târziu</translation>
 <translation id="3432227430032737297">Elimină-le pe cele afișate</translation>
-<translation id="3432757130254800023">Trimite conținut audio și video pe afișajele din rețeaua locală</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Hopa! Sistemul nu a reușit să blocheze atributele la instalarea pe gadget.</translation>
 <translation id="3434272557872943250">Dacă ai activat setarea Activitatea suplimentară de pe web și din aplicații pentru copilul tău, aceste date pot fi salvate în Contul său Google. Află mai multe despre aceste setări și cum să le modifici la families.google.com.</translation>
@@ -6247,7 +6246,6 @@
 <translation id="8147900440966275470">S-a găsit <ph name="NUM" /> filă</translation>
 <translation id="8148760431881541277">Limitează conectarea</translation>
 <translation id="8150259863378108853">Lacros este un browser experimental. Raportează eventualele probleme accesând Ajutor &gt; Raportează o problemă…</translation>
-<translation id="8151579390896831136">Personalizează profilul, inclusiv numele acestuia</translation>
 <translation id="8151638057146502721">Configurați</translation>
 <translation id="8154790740888707867">Niciun fișier</translation>
 <translation id="815491593104042026">Hopa! Autentificarea nu a reușit, deoarece era configurată să folosească o adresă URL nesecurizată (<ph name="BLOCKED_URL" />). Contactați administratorul.</translation>
@@ -6438,7 +6436,6 @@
 <translation id="8378714024927312812">Gestionat de organizația ta</translation>
 <translation id="8379878387931047019">Dispozitivul nu acceptă tipul de cheie de securitate solicitată de acest site</translation>
 <translation id="8379991678458444070">Marchează această filă pentru a o putea accesa din nou rapid</translation>
-<translation id="8380266723152870797">Numele ferestrei</translation>
 <translation id="8382913212082956454">Copiază adresa de &amp;e-mail</translation>
 <translation id="8386091599636877289">Politica nu a fost găsită.</translation>
 <translation id="8386903983509584791">Scanarea s-a finalizat</translation>
@@ -6864,7 +6861,6 @@
 <translation id="8859402192569844210">Nu s-au putut încărca termenii și condițiile</translation>
 <translation id="8859662783913000679">Cont de părinte</translation>
 <translation id="8862003515646449717">Comută la un browser rapid</translation>
-<translation id="8863140399813345099">Vizibilitatea dispozitivului controlează cine îți poate trimite conținut atunci când ecranul este deblocat</translation>
 <translation id="8863753581171631212">Deschide linkul într-o fereastră nouă în <ph name="APP" /></translation>
 <translation id="8864055848767439877">Se trimite <ph name="TAB_NAME" /> la <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> a fost eliminat de pe acest dispozitiv</translation>
@@ -6918,7 +6914,6 @@
 <translation id="8912810933860534797">Activează scanarea automată</translation>
 <translation id="8915370057835397490">Se încarcă sugestiile</translation>
 <translation id="8916476537757519021">Subcadru incognito: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Setează numele ferestrei</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> utilizatorului <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Turcoaz închis</translation>
 <translation id="8925458182817574960">&amp;Setări</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 6fd76b04..5eecd33 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Языки веб-контента</translation>
 <translation id="3429275422858276529">Чтобы в будущем эту страницу было проще найти, добавьте ее в закладки</translation>
 <translation id="3432227430032737297">Удалить все показанные файлы cookie</translation>
-<translation id="3432757130254800023">Отправлять аудио и видео на устройства в локальной сети</translation>
 <translation id="3432762828853624962">Разделяемые объекты worker</translation>
 <translation id="3433621910545056227">Системе не удалось заблокировать атрибуты устройства на время установки.</translation>
 <translation id="3434272557872943250">Если у ребенка включена запись дополнительной истории приложений и веб-поиска, эта информация может сохраняться в его аккаунте. Узнать больше об этой функции и о том, как изменить ее настройки, можно на странице families.google.com.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470">Найдена <ph name="NUM" /> вкладка</translation>
 <translation id="8148760431881541277">Ограничение на вход</translation>
 <translation id="8150259863378108853">Lacros – экспериментальный браузер. Чтобы сообщить о проблемах, связанных с ним, нажмите "Справка &gt; Сообщить о проблеме".</translation>
-<translation id="8151579390896831136">Здесь можно указать название профиля и задать другие настройки</translation>
 <translation id="8151638057146502721">Настроить</translation>
 <translation id="8154790740888707867">Файлы отсутствуют</translation>
 <translation id="815491593104042026">Не удалось выполнить авторизацию, так как обнаружен небезопасный URL (<ph name="BLOCKED_URL" />). Обратитесь к администратору.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Управляется вашей организацией</translation>
 <translation id="8379878387931047019">Устройство не поддерживает тип электронного ключа, запрашиваемый этим сайтом.</translation>
 <translation id="8379991678458444070">Чтобы вам было проще вернуться на эту вкладку, добавьте ее в закладки.</translation>
-<translation id="8380266723152870797">Название окна</translation>
 <translation id="8382913212082956454">Копировать &amp;адрес электронной почты</translation>
 <translation id="8386091599636877289">Политика не найдена.</translation>
 <translation id="8386903983509584791">Поиск завершен</translation>
@@ -6865,7 +6862,6 @@
 <translation id="8859402192569844210">Не удалось загрузить Условия использования</translation>
 <translation id="8859662783913000679">Аккаунт родителя</translation>
 <translation id="8862003515646449717">Перейдите на быстрый браузер</translation>
-<translation id="8863140399813345099">В настройках доступа можно указать, кому вы разрешаете отправлять вам файлы и ссылки, когда ваше устройство разблокировано.</translation>
 <translation id="8863753581171631212">Открыть ссылку в новом окне приложения "<ph name="APP" />"</translation>
 <translation id="8864055848767439877">Отправка вкладки "<ph name="TAB_NAME" />" в приложение "<ph name="APP_NAME" />"…</translation>
 <translation id="8864458770072227512">Аккаунт <ph name="EMAIL" /> удален с устройства.</translation>
@@ -6919,7 +6915,6 @@
 <translation id="8912810933860534797">Включить автосканирование</translation>
 <translation id="8915370057835397490">Загрузка подсказки</translation>
 <translation id="8916476537757519021">Субфрейм в режиме инкогнито: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Укажите название окна</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> пользователя <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Темно-бирюзовый</translation>
 <translation id="8925458182817574960">&amp;Настройки</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index baa8063..7194b2e3 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -2152,7 +2152,6 @@
 <translation id="3429271624041785769">වෙබ් අන්තර්ගත භාෂා</translation>
 <translation id="3429275422858276529">පහසුවෙන් පසුව සොයා ගැනීමට මෙම පිටුව පිටුසන් කරන්න</translation>
 <translation id="3432227430032737297">පෙන්වන සියල්ල ඉවත් කරන්න</translation>
-<translation id="3432757130254800023">පෙදෙසි ජාලයේ ඇති දර්ශක වෙත ශ්‍රව්‍ය සහ වීඩියෝ යවන්න</translation>
 <translation id="3432762828853624962">හවුල් වැඩකරුවන්</translation>
 <translation id="3433621910545056227">අපොයි!  පද්ධතිය උපාංගයේ ස්ථාපන-කාල උපලක්ෂණ අගුල පිහිටුවීමට අසමත් විය.</translation>
 <translation id="3434272557872943250">ඔබේ දරුවා සඳහා අමතර වෙබ් සහ යෙදුම් ක්‍රියාකාරකම් සැකසීම සක්‍රීය කර තිබේ නම්, මෙම දත්ත ඔවුන්ගේ Google ගිණුමට සුරැකිය හැක. මෙම සැකසීම් සහ ඒවා සීරුමාරු කරන ආකාරය ගැන families.google.com හි තවත් දැන ගන්න.</translation>
@@ -6241,7 +6240,6 @@
 <translation id="8147900440966275470">ටැබ <ph name="NUM" />ක් සොයා ගන්නා ලදි</translation>
 <translation id="8148760431881541277">පුරනය සීමා කරන්න</translation>
 <translation id="8150259863378108853">Lacros යනු පරීක්ෂණාත්මක බ්‍රව්සරයකි. කිනම් හෝ ගැටලු උදවු &gt; "ගැටලුවක් වාර්තා කරන්න..." සමගින් වාර්තා කරන්න</translation>
-<translation id="8151579390896831136">එහි නම ඇතුළුව, ඔබගේ පැතිකඩ අභිරුචිකරණය කරන්න</translation>
 <translation id="8151638057146502721">වින්‍යාස කරන්න</translation>
 <translation id="8154790740888707867">ගොනු නොමැත</translation>
 <translation id="815491593104042026">ඕහ්!  අනාරක්ශිත ලිපිනයක් (<ph name="BLOCKED_URL" />) භාවිත කිරීමට සකසා ඇති බැවින් අවසරදීම අසාර්ථකයි. කරුණාකර පරිපාලක සබඳ කරගන්න.</translation>
@@ -6432,7 +6430,6 @@
 <translation id="8378714024927312812">ඔබේ ආයතනය විසින් කළමනා කෙරේ</translation>
 <translation id="8379878387931047019">මෙම උපාංගය මෙම වෙබ් අඩවියෙන් ඉල්ලා සිටින ආරක්ෂක යතුරක් සඳහා සහාය නොදක්වයි</translation>
 <translation id="8379991678458444070">මෙම පටිත්ත පිටුසන් කිරීමෙන් ඉක්මනින් මෙහි ආපසු පිවිසෙන්න</translation>
-<translation id="8380266723152870797">කවුළු නම</translation>
 <translation id="8382913212082956454">ඊමේල් ලිපිනය පිටපත් කරන්න (&amp;E)</translation>
 <translation id="8386091599636877289">ප්‍රතිපත්තිය හමු නොවිය.</translation>
 <translation id="8386903983509584791">ස්කෑන් කිරීම සම්පූර්ණයි</translation>
@@ -6858,7 +6855,6 @@
 <translation id="8859402192569844210">සේවා නියම පූරණය කළ නොහැකි විය</translation>
 <translation id="8859662783913000679">මාපිය ගිණුම</translation>
 <translation id="8862003515646449717">වේගවත් බ්‍රව්සරයකට මාරු වන්න</translation>
-<translation id="8863140399813345099">ඔබගේ තිරය අගුලු හැර ඇති අතරතුර ඔබට බෙදා ගත හැක්කේ කාටද යන්න ඔබේ උපාංග දෘශ්‍යතාව පාලනය කරයි</translation>
 <translation id="8863753581171631212">සබැඳිය නව <ph name="APP" /> තුළ විවෘත කරන්න</translation>
 <translation id="8864055848767439877"><ph name="APP_NAME" /> වෙත <ph name="TAB_NAME" /> බෙදා ගැනේ</translation>
 <translation id="8864458770072227512">මෙම උපාංගයෙන් <ph name="EMAIL" /> ඉවත් කරන ලදි</translation>
@@ -6912,7 +6908,6 @@
 <translation id="8912810933860534797">ස්වයංක්‍රීය ස්කෑන් සබල කරන්න</translation>
 <translation id="8915370057835397490">යෝජනාව පූර්ණය වෙමින්</translation>
 <translation id="8916476537757519021">අප්‍රකට උපරාමුව: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">කවුළු නම සකසන්න</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />ගේ <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">තද සේරා</translation>
 <translation id="8925458182817574960">පසුතල</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index c9d10dc..8cbb6c6 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -2155,7 +2155,6 @@
 <translation id="3429271624041785769">Jazyky internetového obsahu</translation>
 <translation id="3429275422858276529">Uložte si túto stránku ako záložku, aby ste ju neskôr ľahko našli</translation>
 <translation id="3432227430032737297">Odstrániť všetky zobrazené</translation>
-<translation id="3432757130254800023">Poslať zvuk a video na obrazovky v miestnej sieti</translation>
 <translation id="3432762828853624962">Zdieľaní pracovníci</translation>
 <translation id="3433621910545056227">Ojoj! Systému sa nepodarilo nastaviť zámku pre inštaláciu atribútov v zariadení.</translation>
 <translation id="3434272557872943250">Ak pre dieťa zapnete nastavenie ďalšej aktivity na internete a v aplikáciách, tieto údaje sa môžu uložiť do jeho účtu Google. Viac o týchto nastaveniach a o tom, ako ich upraviť, sa dozviete na families.google.com.</translation>
@@ -4531,7 +4530,7 @@
 <translation id="6198252989419008588">Zmeniť PIN</translation>
 <translation id="6202304368170870640">Pomocou kódu PIN sa môžete prihlásiť do zariadenia alebo ho odomknúť.</translation>
 <translation id="6206311232642889873">&amp;Kopírovať obrázok</translation>
-<translation id="6207200176136643843">Obnoviť predvolenú úroveň priblíženia</translation>
+<translation id="6207200176136643843">Resetovať na predvolenú úroveň lupy</translation>
 <translation id="6207937957461833379">Krajina alebo oblasť</translation>
 <translation id="6208521041562685716">Mobilné dáta sa aktivujú</translation>
 <translation id="6209838773933913227">Aktualizuje sa komponent</translation>
@@ -4899,7 +4898,7 @@
 <translation id="6628328486509726751">Nahrané <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630043285902923878">Hľadajú sa zariadenia USB…</translation>
 <translation id="6630752851777525409">Rozšírenie <ph name="EXTENSION_NAME" /> požaduje trvalý prístup k certifikátu na vlastné overenie vo vašom mene.</translation>
-<translation id="6635362468090274700">Nikto s vami nebude zdieľať, ak sa nezviditeľníte.<ph name="BR" /><ph name="BR" />Ak sa chcete dočasne zviditeľniť, otvorte stavovú oblasť a zapnite Viditeľnosť nablízku.</translation>
+<translation id="6635362468090274700">Nikto s vami nemôže zdieľať, ak sa nezviditeľníte.<ph name="BR" /><ph name="BR" />Ak sa chcete dočasne zviditeľniť, otvorte stavovú oblasť a zapnite Viditeľnosť nablízku.</translation>
 <translation id="6635944431854494329">Vlastník môže túto funkciu ovládať v časti Nastavenia &gt; Rozšírené &gt; Automaticky odosielať Googlu diagnostiky a údaje o používaní.</translation>
 <translation id="6635956300022133031">Vybrať a prispôsobiť hlasy prevodu textu na reč</translation>
 <translation id="6636588250634969791">Pokračovať po vložení SIM karty</translation>
@@ -6035,7 +6034,7 @@
 <translation id="7920482456679570420">Pridajte slová, ktoré má kontrola pravopisu preskočiť</translation>
 <translation id="7924358170328001543">Chyba presmerovania portu</translation>
 <translation id="7925108652071887026">Údaje automatického dopĺňania</translation>
-<translation id="792514962475806987">Úroveň priblíženia ukotvenej lupy:</translation>
+<translation id="792514962475806987">Úroveň ukotvenej lupy:</translation>
 <translation id="7925247922861151263">Kontrola AAA zlyhala</translation>
 <translation id="7925285046818567682">Čakanie na <ph name="HOST_NAME" />...</translation>
 <translation id="7926423016278357561">To som nebol(a) ja.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470">Bola nájdená <ph name="NUM" /> karta</translation>
 <translation id="8148760431881541277">Obmedziť prihlásenie</translation>
 <translation id="8150259863378108853">Lacros je experimentálny prehliadač. Prípadné problémy nahlásite v sekcii Pomocník &gt; Nahlásiť problém…</translation>
-<translation id="8151579390896831136">Prispôsobte si profil vrátane názvu</translation>
 <translation id="8151638057146502721">Konfigurovať</translation>
 <translation id="8154790740888707867">Žiadny súbor</translation>
 <translation id="815491593104042026">Ojoj! Overenie zlyhalo, pretože bolo nakonfigurované tak, aby použilo nezabezpečenú webovú adresu (<ph name="BLOCKED_URL" />). Kontaktuje svojho správcu.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Spravované vašou organizáciou</translation>
 <translation id="8379878387931047019">Toto zariadenie nepodporuje typ bezpečnostného kľúča požadovaného týmto webom</translation>
 <translation id="8379991678458444070">Vráťte sa sem rýchlejšie tak, že kartu uložíte ako záložku</translation>
-<translation id="8380266723152870797">Názov okna</translation>
 <translation id="8382913212082956454">Kopírovať &amp;e-mailovú adresu</translation>
 <translation id="8386091599636877289">Pravidlo sa nenašlo.</translation>
 <translation id="8386903983509584791">Vyhľadávanie bolo dokončené</translation>
@@ -6741,7 +6738,7 @@
 <translation id="8740247629089392745">Tento Chromebook môžete odovzdať používateľovi <ph name="SUPERVISED_USER_NAME" />. Nastavenie je takmer hotové. Nastal čas na preskúmavanie.</translation>
 <translation id="8742998548129056176">Toto sú všeobecné informácie o zariadení a jeho používaní (napríklad stav batérie, aktivita v systéme a aplikáciách a chyby). Údaje sa použijú na zlepšenie Androidu a niektoré súhrnné informácie pomôžu tiež aplikáciám Google a partnerom (napríklad vývojárom pre Android) zlepšiť svoje aplikácie a produkty.</translation>
 <translation id="8743164338060742337"><ph name="NETWORK_INDEX" />. sieť z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" />, intenzita signálu <ph name="SIGNAL_STRENGTH" /> %, ovládaná správcom, pripojenie</translation>
-<translation id="8743390665131937741">Úroveň priblíženia lupy celej obrazovky:</translation>
+<translation id="8743390665131937741">Úroveň celoobrazovkovej lupy:</translation>
 <translation id="8743864605301774756">Aktualizované pred 1 hodinou</translation>
 <translation id="8746654918629346731">O rozšírenie <ph name="EXTENSION_NAME" /> ste už požiadali</translation>
 <translation id="874689135111202667">{0,plural, =1{Nahrať na tento web jeden súbor?}few{Nahrať na tento web # súbory?}many{Nahrať na tento web # súboru?}other{Nahrať na tento web # súborov?}}</translation>
@@ -6864,7 +6861,6 @@
 <translation id="8859402192569844210">Zmluvné podmienky sa nepodarilo načítať</translation>
 <translation id="8859662783913000679">Účet rodiča</translation>
 <translation id="8862003515646449717">Prepnite na rýchly prehliadač</translation>
-<translation id="8863140399813345099">Pomocou viditeľnosti zariadenia ovládate, kto s vami môže zdieľať obsah, keď máte odomknutú obrazovku.</translation>
 <translation id="8863753581171631212">Otvoriť odkaz v novom okne aplikácie <ph name="APP" /></translation>
 <translation id="8864055848767439877">Karta <ph name="TAB_NAME" /> sa zdieľa s aplikáciou <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Adresa <ph name="EMAIL" /> bola odstránená z tohto zariadenia</translation>
@@ -6918,7 +6914,6 @@
 <translation id="8912810933860534797">Aktivovať automatické prehľadávanie</translation>
 <translation id="8915370057835397490">Načítavajú sa návrhy</translation>
 <translation id="8916476537757519021">Podrámec inkognito: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Nastavte názov okna</translation>
 <translation id="8918637186205009138">Zariadenie <ph name="DEVICE_TYPE" /> používateľa <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Tmavá modrozelená</translation>
 <translation id="8925458182817574960">&amp;Nastavenia</translation>
@@ -6960,7 +6955,7 @@
 <translation id="8968766641738584599">Uložiť kartu</translation>
 <translation id="89720367119469899">Escape</translation>
 <translation id="8972513834460200407">Kontaktujte správcu siete a uistite sa, že brána firewall neblokuje sťahovanie súborov zo serverov Google.</translation>
-<translation id="8973557916016709913">Odstrániť úroveň priblíženia</translation>
+<translation id="8973557916016709913">Odstrániť úroveň lupy</translation>
 <translation id="8973596347849323817">Zariadenie môžete prispôsobiť, aby zodpovedalo vašim potrebám. Tieto funkcie dostupnosti môžete neskôr zmeniť v Nastaveniach.</translation>
 <translation id="897414447285476047">Cieľový súbor bol neúplný, pretože sa vyskytol problém s pripojením.</translation>
 <translation id="897525204902889653">Služba karantény</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 2661c27..97fae95 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -2157,7 +2157,6 @@
 <translation id="3429271624041785769">Jeziki za spletno vsebino</translation>
 <translation id="3429275422858276529">Dodajte to stran med zaznamke, da jo boste pozneje hitreje našli</translation>
 <translation id="3432227430032737297">Odstrani vse prikazane</translation>
-<translation id="3432757130254800023">Pošiljanje zvoka in videa zaslonom v lokalnem omrežju</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Ojej!  Sistemu ni uspelo zakleniti atributov časa namestitve naprave.</translation>
 <translation id="3434272557872943250">Če ste za otroka vklopili dodatno beleženje dejavnosti v spletu in aplikacijah, bodo ti podatki morda shranjeni v njegovem računu Google. Preberite več o teh nastavitvah in njihovem prilagajanju na families.google.com.</translation>
@@ -6251,7 +6250,6 @@
 <translation id="8147900440966275470">Najdeni zavihki (<ph name="NUM" />)</translation>
 <translation id="8148760431881541277">Omejitev prijav</translation>
 <translation id="8150259863378108853">Lacros je preizkusni brskalnik. Morebitne težave prijavite v Pomoč &gt; »Prijava težave …«</translation>
-<translation id="8151579390896831136">Prilagajanje profila, vključno z njegovim imenom</translation>
 <translation id="8151638057146502721">Konfiguriraj</translation>
 <translation id="8154790740888707867">Ni datoteke</translation>
 <translation id="815491593104042026">Ups. Preverjanje ni uspelo, ker je konfigurirana za uporabo URL-ja, ki ni varen (<ph name="BLOCKED_URL" />). Obrnite se na skrbnika.</translation>
@@ -6442,7 +6440,6 @@
 <translation id="8378714024927312812">Upravlja vaša organizacija</translation>
 <translation id="8379878387931047019">Ta naprava ne podpira vrste varnostnega ključa, ki ga zahteva to spletno mesto</translation>
 <translation id="8379991678458444070">Hitro se vrnite na ta zavihek tako, da ga dodate med zaznamke</translation>
-<translation id="8380266723152870797">Ime okna</translation>
 <translation id="8382913212082956454">Kopiraj &amp;e-poštni naslov</translation>
 <translation id="8386091599636877289">Pravilnika ni mogoče najti.</translation>
 <translation id="8386903983509584791">Iskanje je končano</translation>
@@ -6870,7 +6867,6 @@
 <translation id="8859402192569844210">Pogojev storitve ni bilo mogoče naložiti</translation>
 <translation id="8859662783913000679">Starševski račun</translation>
 <translation id="8862003515646449717">Preklop na hitrejši brskalnik</translation>
-<translation id="8863140399813345099">Z nastavitvijo vidnosti naprave določite, kdo lahko deli vsebino z vami, medtem ko je zaslon odklenjen</translation>
 <translation id="8863753581171631212">Odpiranje povezave v novem oknu aplikacije <ph name="APP" /></translation>
 <translation id="8864055848767439877">Deljenje zavihka <ph name="TAB_NAME" /> z aplikacijo <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Račun <ph name="EMAIL" /> je bil odstranjen iz te naprave</translation>
@@ -6924,7 +6920,6 @@
 <translation id="8912810933860534797">Omogočanje samodejnega iskanja</translation>
 <translation id="8915370057835397490">Nalaganje predloga</translation>
 <translation id="8916476537757519021">Podokvir za način brez beleženja zgodovine: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Nastavite ime okna</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> – <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">Temno zelenomodra</translation>
 <translation id="8925458182817574960">&amp;Nastavitve</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index f822a08d9..b3aaca3 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -2151,7 +2151,6 @@
 <translation id="3429271624041785769">Gjuhët e përmbajtjes së uebit</translation>
 <translation id="3429275422858276529">Shënoje këtë faqe për ta gjetur me lehtësi më vonë</translation>
 <translation id="3432227430032737297">Hiqi të gjitha të shfaqurat</translation>
-<translation id="3432757130254800023">Dërgo audion dhe videon tek ekranet në rrjetin lokal</translation>
 <translation id="3432762828853624962">Punëtorët e përbashkët</translation>
 <translation id="3433621910545056227">Gabim! Sistemi dështoi në vendosjen e kyçjes së cilësive të instalimit në kohë të pajisjes.</translation>
 <translation id="3434272557872943250">Nëse cilësimi i "Aktivitetit shtesë të uebit dhe të aplikacioneve" është i aktivizuar për fëmijën tënd, këto të dhëna mund të ruhen në "Llogarinë e Google" të fëmijës. Mëso më shumë për këto cilësime dhe se si t'i rregullosh ato te families.google.com.</translation>
@@ -6240,7 +6239,6 @@
 <translation id="8147900440966275470">U gjet <ph name="NUM" /> skedë</translation>
 <translation id="8148760431881541277">Kufizo identifikimin</translation>
 <translation id="8150259863378108853">Lacros është një shfletues eksperimental. Raporto çdo problem me Ndihma &gt; "Raporto një problem..."</translation>
-<translation id="8151579390896831136">Personalizo profilin tënd, duke përfshirë emrin e tij</translation>
 <translation id="8151638057146502721">Konfiguro</translation>
 <translation id="8154790740888707867">Asnjë skedar</translation>
 <translation id="815491593104042026">Gabim! Vërtetimi dështoi, sepse ishte i konfiguruar të përdorte një URL jo të sigurt (<ph name="BLOCKED_URL" />). Kontakto me administratorin tënd.</translation>
@@ -6431,7 +6429,6 @@
 <translation id="8378714024927312812">Menaxhohet nga organizata jote</translation>
 <translation id="8379878387931047019">Kjo pajisje nuk e mbështet llojin e çelësit të sigurisë që kërkohet nga ky sajt uebi</translation>
 <translation id="8379991678458444070">Kthehu këtu shpejt duke e shtuar këtë skedë te faqeshënuesit</translation>
-<translation id="8380266723152870797">Emri i dritares</translation>
 <translation id="8382913212082956454">Kopjo &amp;adresën e mail-it</translation>
 <translation id="8386091599636877289">Politika nuk u gjet.</translation>
 <translation id="8386903983509584791">Skanimi përfundoi</translation>
@@ -6856,7 +6853,6 @@
 <translation id="8859402192569844210">Kushtet e shërbimit nuk mund të ngarkoheshin</translation>
 <translation id="8859662783913000679">Llogaria e prindit</translation>
 <translation id="8862003515646449717">Kalo te një shfletues i shpejtë</translation>
-<translation id="8863140399813345099">Dukshmëria e pajisjes sate kontrollon se kush mund të ndajë me ty kur ekrani yt është i shkyçur.</translation>
 <translation id="8863753581171631212">Hape lidhjen në dritaren e re të <ph name="APP" /></translation>
 <translation id="8864055848767439877">Po ndahet <ph name="TAB_NAME" /> te <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> u hoq nga kjo pajisje</translation>
@@ -6910,7 +6906,6 @@
 <translation id="8912810933860534797">Aktivizo skanimin automatik</translation>
 <translation id="8915370057835397490">Po ngarkon sugjerimin</translation>
 <translation id="8916476537757519021">Nënkorniza "e fshehtë": <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Cakto emrin e dritares</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> që ka <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Gurkali e errët</translation>
 <translation id="8925458182817574960">Cilësimet</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index 7a8c7f5..7c454a4 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">Jezici veb-sadržaja</translation>
 <translation id="3429275422858276529">Obeležite ovu stranicu da biste je kasnije lakše pronašli</translation>
 <translation id="3432227430032737297">Ukloni sve prikazano</translation>
-<translation id="3432757130254800023">Šalji audio i video sadržaj ekranima na lokalnoj mreži</translation>
 <translation id="3432762828853624962">Deljeni resursi</translation>
 <translation id="3433621910545056227">Ups! Sistem nije uspeo da odredi zaključavanje atributa za vreme instalacije uređaja.</translation>
 <translation id="3434272557872943250">Ako za dete uključite podešavanje dodatne aktivnosti na vebu i u aplikacijama, ti podaci će se možda čuvati na Google nalogu deteta. Saznajte više o ovim podešavanjima i o tome kako da ih prilagodite na families.google.com</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470">Pronađenih kartica: <ph name="NUM" /></translation>
 <translation id="8148760431881541277">Ograničite prijavljivanje</translation>
 <translation id="8150259863378108853">Lacros je eksperimentalni pregledač. Prijavite bilo kakve probleme preko opcije Pomoć &gt; „Prijavite problem…“</translation>
-<translation id="8151579390896831136">Prilagodite profil, uključujući ime na njemu</translation>
 <translation id="8151638057146502721">Konfiguriši</translation>
 <translation id="8154790740888707867">Nema datoteke</translation>
 <translation id="815491593104042026">Ups! Potvrda autentičnosti nije uspela jer je konfigurisana za korišćenje nebezbednog URL-a (<ph name="BLOCKED_URL" />). Kontaktirajte administratora.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Ovim upravlja organizacija</translation>
 <translation id="8379878387931047019">Ovaj uređaj ne podržava tip bezbednosnog ključa koji zahteva ovaj veb-sajt</translation>
 <translation id="8379991678458444070">Možete brzo da se vratite ovde ako obeležite ovu karticu</translation>
-<translation id="8380266723152870797">Naziv prozora</translation>
 <translation id="8382913212082956454">Kopiraj &amp;e-adresu</translation>
 <translation id="8386091599636877289">Smernice nisu pronađene.</translation>
 <translation id="8386903983509584791">Skeniranje je završeno</translation>
@@ -6864,7 +6861,6 @@
 <translation id="8859402192569844210">Učitavanje uslova korišćenja usluge nije uspelo</translation>
 <translation id="8859662783913000679">Nalog roditelja</translation>
 <translation id="8862003515646449717">Pređite na brz pregledač</translation>
-<translation id="8863140399813345099">Podešavanje vidljivosti kontroliše ko može da deli sadržaj sa vama dok je ekran otključan</translation>
 <translation id="8863753581171631212">Otvori link u novom <ph name="APP" /> prozoru</translation>
 <translation id="8864055848767439877">Kartica <ph name="TAB_NAME" /> se deli sa aplikacijom <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Nalog <ph name="EMAIL" /> je uklonjen sa ovog uređaja</translation>
@@ -6918,7 +6914,6 @@
 <translation id="8912810933860534797">Omogući automatsko skeniranje</translation>
 <translation id="8915370057835397490">Učitavanje predloga</translation>
 <translation id="8916476537757519021">Podokvir Bez arhiviranja: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Podesite naziv prozora</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> korisnika <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Tamnotirkizna</translation>
 <translation id="8925458182817574960">&amp;Podešavanja</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index e80c370..bc1b990 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">Језици веб-садржаја</translation>
 <translation id="3429275422858276529">Обележите ову страницу да бисте је касније лакше пронашли</translation>
 <translation id="3432227430032737297">Уклони све приказано</translation>
-<translation id="3432757130254800023">Шаљи аудио и видео садржај екранима на локалној мрежи</translation>
 <translation id="3432762828853624962">Дељени ресурси</translation>
 <translation id="3433621910545056227">Упс! Систем није успео да одреди закључавање атрибута за време инсталације уређаја.</translation>
 <translation id="3434272557872943250">Ако за дете укључите подешавање додатне активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу детета. Сазнајте више о овим подешавањима и о томе како да их прилагодите на families.google.com</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470">Пронађених картица: <ph name="NUM" /></translation>
 <translation id="8148760431881541277">Ограничите пријављивање</translation>
 <translation id="8150259863378108853">Lacros је експериментални прегледач. Пријавите било какве проблеме преко опције Помоћ &gt; „Пријавите проблем…“</translation>
-<translation id="8151579390896831136">Прилагодите профил, укључујући име на њему</translation>
 <translation id="8151638057146502721">Конфигуриши</translation>
 <translation id="8154790740888707867">Нема датотеке</translation>
 <translation id="815491593104042026">Упс! Потврда аутентичности није успела јер је конфигурисана за коришћење небезбедног URL-а (<ph name="BLOCKED_URL" />). Контактирајте администратора.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Овим управља организација</translation>
 <translation id="8379878387931047019">Овај уређај не подржава тип безбедносног кључа који захтева овај веб-сајт</translation>
 <translation id="8379991678458444070">Можете брзо да се вратите овде ако обележите ову картицу</translation>
-<translation id="8380266723152870797">Назив прозора</translation>
 <translation id="8382913212082956454">Копирај &amp;е-адресу</translation>
 <translation id="8386091599636877289">Смернице нису пронађене.</translation>
 <translation id="8386903983509584791">Скенирање је завршено</translation>
@@ -6864,7 +6861,6 @@
 <translation id="8859402192569844210">Учитавање услова коришћења услуге није успело</translation>
 <translation id="8859662783913000679">Налог родитеља</translation>
 <translation id="8862003515646449717">Пређите на брз прегледач</translation>
-<translation id="8863140399813345099">Подешавање видљивости контролише ко може да дели садржај са вама док је екран откључан</translation>
 <translation id="8863753581171631212">Отвори линк у новом <ph name="APP" /> прозору</translation>
 <translation id="8864055848767439877">Картица <ph name="TAB_NAME" /> се дели са апликацијом <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Налог <ph name="EMAIL" /> је уклоњен са овог уређаја</translation>
@@ -6918,7 +6914,6 @@
 <translation id="8912810933860534797">Омогући аутоматско скенирање</translation>
 <translation id="8915370057835397490">Учитавање предлога</translation>
 <translation id="8916476537757519021">Подоквир Без архивирања: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Подесите назив прозора</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> корисника <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Тамнотиркизна</translation>
 <translation id="8925458182817574960">&amp;Подешавања</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index f1cf2a0..3ccbbc0 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Språk för webbinnehåll</translation>
 <translation id="3429275422858276529">Lägg till ett bokmärke för den här sidan så att du enkelt kan hitta tillbaka till den</translation>
 <translation id="3432227430032737297">Ta bort alla som visas</translation>
-<translation id="3432757130254800023">Skicka ljud och bild till skärmar i det lokala nätverket</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Hoppsan! Det gick inte att fastställa enhetens attributlås för installationstid.</translation>
 <translation id="3434272557872943250">Om ytterligare webb- och appaktivitet har aktiverats för ditt barn kan denna data sparas i Google-kontot. Läs mer om inställningarna och hur du ändrar dem på families.google.com.</translation>
@@ -6143,7 +6142,7 @@
 <translation id="8037357227543935929">Fråga (standard)</translation>
 <translation id="803771048473350947">Arkiv</translation>
 <translation id="8041089156583427627">Skicka feedback</translation>
-<translation id="8042142357103597104">Textgenomskinlighet</translation>
+<translation id="8042142357103597104">Textopacitet</translation>
 <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> svarar inte.</translation>
 <translation id="8044899503464538266">Långsam</translation>
 <translation id="8045253504249021590">Synkronisering har stoppats via Google Översikt.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> flikar hittades</translation>
 <translation id="8148760431881541277">Begränsa inloggning</translation>
 <translation id="8150259863378108853">Lacros är en experimentell webbläsare. Rapportera eventuella problem via Hjälp &gt; Rapportera ett problem …</translation>
-<translation id="8151579390896831136">Anpassa profilen, inklusive namnet på den</translation>
 <translation id="8151638057146502721">Konfigurera</translation>
 <translation id="8154790740888707867">Ingen fil</translation>
 <translation id="815491593104042026">Hoppsan! Autentiseringen misslyckades eftersom den har konfigurerats att använda en webbadress som inte är säker (<ph name="BLOCKED_URL" />). Kontakta administratören.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Hanteras av organisationen</translation>
 <translation id="8379878387931047019">Enheten stöder inte den typ av säkerhetsnyckel som begärs av webbplatsen</translation>
 <translation id="8379991678458444070">Bokmärk fliken om du snabbt vill hitta tillbaka</translation>
-<translation id="8380266723152870797">Namn för fönstret</translation>
 <translation id="8382913212082956454">Kopiera &amp;e-postadress</translation>
 <translation id="8386091599636877289">Policyn hittades inte.</translation>
 <translation id="8386903983509584791">Sökningen har slutförts</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Det gick inte att läsa in användarvillkoren</translation>
 <translation id="8859662783913000679">Föräldrakonto</translation>
 <translation id="8862003515646449717">Byt till en snabb webbläsare</translation>
-<translation id="8863140399813345099">Synlighetsinställningarna på enheten styr vem som kan dela filer med dig när skärmen är upplåst.</translation>
 <translation id="8863753581171631212">Öppna länken i en ny <ph name="APP" /></translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> delas med <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> har tagits bort från den här enheten</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Aktivera automatisk genomsökning</translation>
 <translation id="8915370057835397490">Läser in förslag</translation>
 <translation id="8916476537757519021">Underram i inkognitoläge: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Ange ett namn för fönstret</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> som tillhör <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Mörkt blågrön</translation>
 <translation id="8925458182817574960">&amp;Inställningar</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index dc9aadd..e4ed79e 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -2151,7 +2151,6 @@
 <translation id="3429271624041785769">Lugha za maudhui ya wavuti</translation>
 <translation id="3429275422858276529">Alamisha ukurasa huu ili uupate kwa urahisi baadaye</translation>
 <translation id="3432227430032737297">Futa Vidakuzi Vyote Vilivyoonyeshwa</translation>
-<translation id="3432757130254800023">Tuma sauti na video za kuonyesha kwenye mtandao wa ndani</translation>
 <translation id="3432762828853624962">Wafanyakazi wa Pamoja</translation>
 <translation id="3433621910545056227">Lo! Mfumo umeshindwa kuanzisha kufungwa kwa sifa za muda wa usakinishaji wa kifaa.</translation>
 <translation id="3434272557872943250">Ikiwa umewasha mipangilio ya historia ya Shughuli za ziada kwenye Wavuti na Programu ya mtoto wako, data hii inaweza kuhifadhiwa kwenye Akaunti yake ya Google. Pata maelezo zaidi kuhusu mipangilio hii na jinsi ya kuirekebisha katika families.google.com.</translation>
@@ -6243,7 +6242,6 @@
 <translation id="8147900440966275470">Imepata kichupo <ph name="NUM" /></translation>
 <translation id="8148760431881541277">Dhibiti hatua ya kuingia katika akaunti</translation>
 <translation id="8150259863378108853">Lacros ni kivinjari kinachofanyiwa majaribio. Tafadhali ripoti matatizo yoyote kupitia Usaidizi &gt; "Ripoti tatizo..."</translation>
-<translation id="8151579390896831136">Wekea wasifu wako mapendeleo, ikiwa ni pamoja na jina lake</translation>
 <translation id="8151638057146502721">Sanidi</translation>
 <translation id="8154790740888707867">Hakuna Faili</translation>
 <translation id="815491593104042026">Lo! Uthibitishaji haukufaulu kwa sababu ulisanidiwa ili kutumia URL isiyo salama (<ph name="BLOCKED_URL" />).  Tafadhali wasiliana na msimamizi wako.</translation>
@@ -6434,7 +6432,6 @@
 <translation id="8378714024927312812">Inasimamiwa na shirika lako</translation>
 <translation id="8379878387931047019">Kifaa hiki hakitumii aina hii ya ufunguo wa usalama ulioombwa na tovuti hii</translation>
 <translation id="8379991678458444070">Ili urudi katika sehemu hii kwa haraka, alamisha kichupo hiki</translation>
-<translation id="8380266723152870797">Jina la dirisha</translation>
 <translation id="8382913212082956454">Nakili barua p&amp;epe</translation>
 <translation id="8386091599636877289">Imeshindwa kupata sera.</translation>
 <translation id="8386903983509584791">Imemaliza kutafuta</translation>
@@ -6859,7 +6856,6 @@
 <translation id="8859402192569844210">Imeshindwa kupakia Sheria na Masharti</translation>
 <translation id="8859662783913000679">Akaunti ya mzazi</translation>
 <translation id="8862003515646449717">Badilisha ili utumie kivinjari chenye kasi zaidi</translation>
-<translation id="8863140399813345099">Mipangilio ya uonekanaji ya kifaa chako hudhibiti ni nani anayeweza kushiriki faili nawe wakati skrini yako imefunguliwa</translation>
 <translation id="8863753581171631212">Fungua kiungo katika <ph name="APP" /> mpya</translation>
 <translation id="8864055848767439877">Inashiriki <ph name="TAB_NAME" /> kwenye <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Imeondoa <ph name="EMAIL" /> kwenye kifaa hiki</translation>
@@ -6913,7 +6909,6 @@
 <translation id="8912810933860534797">Washa ukaguzi wa kiotomatiki</translation>
 <translation id="8915370057835397490">Inapakia pendekezo</translation>
 <translation id="8916476537757519021">Fremu ndogo ya Hali Fiche: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Weka Jina la Dirisha</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> ya <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Samawati ya kijani iliyokolea</translation>
 <translation id="8925458182817574960">&amp;Mipangilio</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 003e71e..b853c90 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1045,6 +1045,7 @@
 <translation id="2154710561487035718">URL ஐ நகலெடு</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> போல் தெரிகிறது</translation>
 <translation id="2156294658807918600">Service Worker: <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">பாதுகாப்புச் சரிபார்ப்பை மீண்டும் இயக்கும்</translation>
 <translation id="2157474325782140681">கூடுதல் அம்சங்களைப் பெற இந்த Chromebookகுடன் இணங்குமாறு வடிவமைக்கப்பட்ட Dell டாக்கிங் ஸ்டேஷனைப் பயன்படுத்தவும்.</translation>
 <translation id="215753907730220065">முழுத்திரையிலிருந்து வெளியேறு</translation>
 <translation id="2157875535253991059">இந்தப் பக்கம் இப்போது முழுத் திரையில்.</translation>
@@ -1703,7 +1704,7 @@
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
 <translation id="2889064240420137087">இதைக் கொண்டு இணைப்பைத் திற...</translation>
 <translation id="2889925978073739256">சாண்ட்பாக்ஸ் செய்யப்படாத செருகுநிரல்களைத் தொடர்ந்து தடு</translation>
-<translation id="2891922230654533301"><ph name="APP_NAME" /> இல் உள்நுழைய உங்கள் சாதனத்தைப் பயன்படுத்த விரும்புகிறீர்களா?</translation>
+<translation id="2891922230654533301"><ph name="APP_NAME" /> தளத்தில் உள்நுழைய உங்கள் சாதனத்தைப் பயன்படுத்த விரும்புகிறீர்களா?</translation>
 <translation id="2893168226686371498">இயல்புநிலை உலாவி</translation>
 <translation id="2894757982205307093">குழுவில் புதிய தாவல்</translation>
 <translation id="289644616180464099">சிம் கார்டு பூட்டப்பட்டுள்ளது</translation>
@@ -1989,6 +1990,7 @@
 <translation id="3225319735946384299">குறியீடு கையொப்பமிடல்</translation>
 <translation id="3227137524299004712">மைக்ரோஃபோன்</translation>
 <translation id="3233271424239923319">Linux ஆப்ஸ் காப்புப்பிரதிகளும் கோப்புகளும்</translation>
+<translation id="3238192140106069382">இணைக்கிறது &amp; சரிபார்க்கிறது</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />க்கான நேர வரம்பு அகற்றப்பட்டது</translation>
 <translation id="3241680850019875542">தொகுக்க வேண்டிய நீட்டிப்பின் மூல இருப்பிடத்தைத் தேர்ந்தெடு. ஒரு நீட்டிப்பைப் புதுப்பிக்க, மீண்டும் பயன்படுத்துவதற்கு தனிப்பட்ட விசைக் கோப்பையும் தேர்ந்தெடு.</translation>
 <translation id="3244294424315804309">தொடர்ந்து ஒலியடக்கு</translation>
@@ -2152,7 +2154,6 @@
 <translation id="3429271624041785769">இணைய உள்ளடக்கத்திற்கான மொழிகள்</translation>
 <translation id="3429275422858276529">இந்தப் பக்கத்தைப் பிறகு எளிதாகக் கண்டறிய, புத்தகக்குறியிடவும்</translation>
 <translation id="3432227430032737297">காட்டப்படும் அனைத்தையும் அகற்று</translation>
-<translation id="3432757130254800023">அக நெட்வொர்க்கில் உள்ள காட்சிகளுக்கு ஆடியோவையும் வீடியோவையும் அனுப்பு</translation>
 <translation id="3432762828853624962">ஷேர்டு வொர்க்கர்ஸ்</translation>
 <translation id="3433621910545056227">அச்சச்சோ!  சாதன நிறுவல்-நேர பண்புக்கூறுகளைப் பூட்டுவதில் முறைமை தோல்வியடைந்தது.</translation>
 <translation id="3434272557872943250">உங்கள் பிள்ளையின் கணக்கில் கூடுதல் ’இணையம் &amp; ஆப்ஸ் செயல்பாடு’ அமைப்பு இயக்கப்பட்டிருந்தால், இந்தத் தரவு அவரது Google கணக்கில் சேமிக்கப்படக்கூடும். இந்த அமைப்புகள் குறித்தும் அவற்றை எவ்வாறு மாற்றி அமைக்கலாம் என்பது குறித்தும் families.google.comமில் மேலும் தெரிந்துகொள்ளவும்.</translation>
@@ -6245,7 +6246,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> தாவல் உள்ளது</translation>
 <translation id="8148760431881541277">உள்நுழைவைக் கட்டுப்படுத்துதல்</translation>
 <translation id="8150259863378108853">Lacros என்பது சோதனை உலாவியாகும். ஏதேனும் சிக்கல்கள் இருந்தால் உதவி &gt; "சிக்கலைப் புகாரளி..." என்பதற்குச் சென்று புகாரளிக்கவும்</translation>
-<translation id="8151579390896831136">உங்கள் சுயவிவரத்துடன் அதன் பெயரையும் பிரத்தியேகமாக்கலாம்</translation>
 <translation id="8151638057146502721">உள்ளமை</translation>
 <translation id="8154790740888707867">கோப்பு இல்லை</translation>
 <translation id="815491593104042026">அச்சச்சோ!  இது பாதுகாப்பற்ற URLலை (<ph name="BLOCKED_URL" />) பயன்படுத்துவதற்கு உள்ளமைக்கப்பட்டுள்ளதால் அங்கீகாரம் தோல்வியடைந்தது.  உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
@@ -6436,7 +6436,6 @@
 <translation id="8378714024927312812">உங்கள் நிறுவனத்தால் நிர்வகிக்கப்படுகிறது</translation>
 <translation id="8379878387931047019">இந்த இணையதளம் கோரும் பாதுகாப்பு விசையின் வகையை இந்தச் சாதனம் ஆதரிக்கவில்லை</translation>
 <translation id="8379991678458444070">இந்தத் தாவலை புக்மார்க் செய்வதன் மூலம் இதை விரைவாக அணுகலாம்</translation>
-<translation id="8380266723152870797">சாளரத்தின் பெயர்</translation>
 <translation id="8382913212082956454">&amp;மின்னஞ்சல் முகவரியை நகலெடு</translation>
 <translation id="8386091599636877289">கொள்கை இல்லை.</translation>
 <translation id="8386903983509584791">ஸ்கேன் செய்வது முடிந்தது</translation>
@@ -6861,7 +6860,6 @@
 <translation id="8859402192569844210">சேவை விதிமுறைகளை ஏற்ற முடியவில்லை</translation>
 <translation id="8859662783913000679">பெற்றோர் கணக்கு</translation>
 <translation id="8862003515646449717">விரைவான உலாவிக்கு மாறவும்</translation>
-<translation id="8863140399813345099">உங்கள் சாதனத்தின் திரை அன்லாக் செய்யப்பட்டிருக்கும்போது யாரெல்லாம் உங்களுடன் பகிர முடியும் என்பது உங்கள் சாதனத்தின் தெரிவுநிலையைப் பொறுத்ததாகும்</translation>
 <translation id="8863753581171631212">புதிய <ph name="APP" /> இல் இணைப்பைத் திற</translation>
 <translation id="8864055848767439877"><ph name="APP_NAME" /> ஆப்ஸுடன் <ph name="TAB_NAME" /> தாவலைப் பகிர்கிறது</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> என்ற மின்னஞ்சல் முகவரி இந்தச் சாதனத்திலிருந்து அகற்றப்பட்டது</translation>
@@ -6915,7 +6913,6 @@
 <translation id="8912810933860534797">தானியங்கு ஸ்கேனை இயக்கு</translation>
 <translation id="8915370057835397490">பரிந்துரைகளை ஏற்றுகிறது</translation>
 <translation id="8916476537757519021">மறைநிலை துணைச்சட்டகம்: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">சாளரத்திற்குப் பெயரிடுங்கள்</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> இன் <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">அடர் பசும் நீலம்</translation>
 <translation id="8925458182817574960">&amp;அமைப்புகள்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 3ea7e0e..cfff971 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1045,6 +1045,7 @@
 <translation id="2154710561487035718">URLను కాపీ చేయి</translation>
 <translation id="2155772377859296191"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ఉన్నట్టుంది</translation>
 <translation id="2156294658807918600">సర్వీస్ వర్కర్: <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">భద్రతా తనిఖీని మళ్లీ రన్ చేయండి</translation>
 <translation id="2157474325782140681">ఈ Chromebookకు అనుగుణంగా పని చేయడానికి రూపొందించబడిన డెల్ డాకింగ్ స్టేషన్‌ను ఉపయోగించి, అదనపు ఫీచర్‌లను పొందండి.</translation>
 <translation id="215753907730220065">పూర్తి స్క్రీన్‌ను నిష్క్రమించు</translation>
 <translation id="2157875535253991059">ఈ పేజీ ఇప్పుడు పూర్తి స్క్రీన్‌లో ఉంది.</translation>
@@ -1989,6 +1990,7 @@
 <translation id="3225319735946384299">కోడ్ సైనింగ్</translation>
 <translation id="3227137524299004712">మైక్రోఫోన్</translation>
 <translation id="3233271424239923319">Linux యాప్‌లు, ఫైల్‌లను బ్యాకప్ చేయండి</translation>
+<translation id="3238192140106069382">కనెక్ట్ చేయడానికి మరియు వెరిఫై చేయడానికి ట్రై చేస్తోంది</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" />కు సెట్ చేసిన సమయ పరిమితి తీసివేయబడింది</translation>
 <translation id="3241680850019875542">ప్యాక్ చేయ‌డానికి ఎక్స్‌టెన్ష‌న్‌ యొక్క రూట్ డైరెక్టరీని ఎంచుకోండి. ఒక ఎక్స్‌టెన్ష‌న్‌ను అప్‌డేట్ చేయ‌డానికి, మ‌ళ్లీ ఉపయోగించడానికి వ్యక్తిగత కీ ఫైల్‌ను కూడా ఎంచుకోండి.</translation>
 <translation id="3244294424315804309">సౌండ్‌ని మ్యూట్ చేయడాన్ని కొనసాగించు</translation>
@@ -2152,7 +2154,6 @@
 <translation id="3429271624041785769">వెబ్ కంటెంట్ భాషలు</translation>
 <translation id="3429275422858276529">ఈ పేజీని తర్వాత సులభంగా కనుగొనడానికి దీనిని బుక్‌మార్క్ చేయండి</translation>
 <translation id="3432227430032737297">చూపుతున్నవన్నీ తీసివేయి</translation>
-<translation id="3432757130254800023">స్థానిక నెట్‌వర్క్‌లో డిస్‌ప్లేలకు ఆడియోను, వీడియోను పంపడం</translation>
 <translation id="3432762828853624962">షేర్డ్ వర్కర్స్</translation>
 <translation id="3433621910545056227">అయ్యో!  పరికరం ఇన్‌స్టాలేషన్-సమయ లక్షణాల లాక్‌ను ఏర్పాటు చేయడంలో సిస్టమ్ విఫలమైంది.</translation>
 <translation id="3434272557872943250">మీ చిన్నారి కోసం అదనపు వెబ్ &amp; యాప్ కార్యకలాపం సెట్టింగ్‌ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. ఈ సెట్టింగ్‌ల గురించి, వాటిని ఎలా సర్దుబాటు చేయాలనే దాని గురించి families.google.comలో మరింత తెలుసుకోండి.</translation>
@@ -6240,7 +6241,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ట్యాబ్ కనుగొనబడింది</translation>
 <translation id="8148760431881541277">సైన్ ఇన్‌ను పరిమితం చేయండి</translation>
 <translation id="8150259863378108853">Lacros ప్రయోగాత్మక బ్రౌజర్. సహాయం &gt; "సమస్యను రిపోర్ట్ చేయి..."తో దయచేసి ఏవైనా సమస్యలను రిపోర్ట్ చేయండి</translation>
-<translation id="8151579390896831136">మీ ప్రొఫైల్‍ను, దాని పేరుతో సహా తగినట్టు మార్చుకోండి</translation>
 <translation id="8151638057146502721">కాన్ఫిగర్ చేయి</translation>
 <translation id="8154790740888707867">ఫైల్ లేదు</translation>
 <translation id="815491593104042026">అయ్యో!  ఇది సురక్షితం కాని URL (<ph name="BLOCKED_URL" />)ను ఉపయోగించే విధంగా కాన్ఫిగర్ చేయబడినందున ప్రామాణీకరణ విఫలమైంది. దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.</translation>
@@ -6248,7 +6248,7 @@
 <translation id="8157704005178149728">పర్యవేక్షణను సెటప్ చేస్తోంది</translation>
 <translation id="8158117992543756526">ఈ పరికరానికి <ph name="MONTH_AND_YEAR" />లో ఆటోమేటిక్ సాఫ్ట్‌వేర్ మరియు భద్రతాపరమైన అప్‌డేట్ రావడం ఆగిపోయింది. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="816055135686411707">లోపం సెట్టింగ్ ప్రమాణపత్ర నమ్మకం</translation>
-<translation id="8160775796528709999">సెట్టింగ్‌లలో లైవ్ క్యాప్షన్‌ను ఎనేబుల్ చేయడం ద్వారా మీ ఆడియో, వీడియోకు క్యాప్షన్‌లను పొందండి</translation>
+<translation id="8160775796528709999">సెట్టింగ్‌లలో లైవ్ క్యాప్షన్‌ను ఎనేబుల్ చేయడం ద్వారా మీ ఆడియోకు, వీడియోకు క్యాప్షన్‌లను పొందండి</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />, <ph name="TIME_REMAINING" /></translation>
 <translation id="8161293209665121583">వెబ్ పేజీల కోసం రీడర్ మోడ్</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{ట్యాబ్‌ను కొత్త విండోకు తరలించు}other{ట్యాబ్‌లను కొత్త విండోకు తరలించు}}</translation>
@@ -6431,7 +6431,6 @@
 <translation id="8378714024927312812">మీ సంస్థ ద్వారా నిర్వహించబడుతున్నవి</translation>
 <translation id="8379878387931047019">ఈ వెబ్‌సైట్ అభ్యర్థించిన భద్రతా కీ రకానికి ఈ పరికరం మద్దతు ఇవ్వదు</translation>
 <translation id="8379991678458444070">ఈ పేజీని బుక్‌మార్క్ చేయడం ద్వారా ఇక్కడికి క్షణాల్లో తిరిగి రండి</translation>
-<translation id="8380266723152870797">విండో పేరు</translation>
 <translation id="8382913212082956454">&amp;ఇమెయిల్ చిరునామాను కాపీ చేయండి</translation>
 <translation id="8386091599636877289">విధానం కనుగొనబడలేదు.</translation>
 <translation id="8386903983509584791">స్కాన్ పూర్తయింది</translation>
@@ -6856,7 +6855,6 @@
 <translation id="8859402192569844210">సర్వీస్ నియమాలను లోడ్ చేయడం సాధ్యపడలేదు</translation>
 <translation id="8859662783913000679">తల్లి/తండ్రి ఖాతా</translation>
 <translation id="8862003515646449717">వేగవంతమైన బ్రౌజర్‌కు మారండి</translation>
-<translation id="8863140399813345099">మీ స్క్రీన్ అన్‌లాక్ చేసి ఉన్నప్పుడు, మీతో ఎవరు షేర్ చేయవచ్చనే విషయాన్ని, పరికరం విజిబిలిటీ నియంత్రిస్తుంది</translation>
 <translation id="8863753581171631212">కొత్త <ph name="APP" />లో లింక్‌ను తెరువు</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" />ను <ph name="APP_NAME" />కు షేర్ చేస్తోంది</translation>
 <translation id="8864458770072227512">ఈ పరికరం నుండి <ph name="EMAIL" /> తీసివేయబడింది</translation>
@@ -6910,7 +6908,6 @@
 <translation id="8912810933860534797">ఆటోమేటిక్ స్కాన్‌ను ప్రారంభించు</translation>
 <translation id="8915370057835397490">సూచన లోడ్ అవుతోంది</translation>
 <translation id="8916476537757519021">అజ్ఞాత సబ్‌ఫ్రేమ్: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">విండో పేరును సెట్ చేయండి</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />కు చెందిన <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">ముదురు నీలి ఆకుపచ్చ రంగు</translation>
 <translation id="8925458182817574960">&amp;సెట్టింగ్‌లు</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 25c5f8b..b7df38d 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -218,6 +218,7 @@
 <translation id="1234808891666923653">Service Workers</translation>
 <translation id="1235458158152011030">เครือข่ายที่รู้จัก</translation>
 <translation id="123578888592755962">ดิสก์เต็ม</translation>
+<translation id="1235924639474699896">{COUNT,plural, =1{ข้อความ}other{# ข้อความ}}</translation>
 <translation id="1239594683407221485">สำรวจเนื้อหาของอุปกรณ์ในแอป Files</translation>
 <translation id="124116460088058876">ภาษาเพิ่มเติม</translation>
 <translation id="1241753985463165747">อ่านและเปลี่ยนแปลงข้อมูลทั้งหมดในเว็บไซต์ปัจจุบันเมื่อเรียกใช้</translation>
@@ -440,6 +441,7 @@
 <translation id="1486096554574027028">ค้นหารหัสผ่าน</translation>
 <translation id="1487335504823219454">เปิด - การตั้งค่าที่กำหนดเอง</translation>
 <translation id="1489664337021920575">เลือกตัวเลือกอื่น</translation>
+<translation id="1490491397986065675">ผู้ดูแลระบบบอกว่า "<ph name="CUSTOM_MESSAGE" />"</translation>
 <translation id="1492417797159476138">คุณบันทึกชื่อผู้ใช้นี้สำหรับเว็บไซต์นี้แล้ว</translation>
 <translation id="1493892686965953381">กำลังรอ <ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495677929897281669">กลับไปที่แท็บ</translation>
@@ -811,6 +813,7 @@
 <translation id="1879000426787380528">ลงชื่อเข้าใช้ด้วย</translation>
 <translation id="1880905663253319515">ลบใบรับรอง "<ph name="CERTIFICATE_NAME" />" หรือไม่</translation>
 <translation id="1881445033931614352">รูปแบบแป้นพิมพ์</translation>
+<translation id="1881577802939775675">{COUNT,plural, =1{รายการ}other{# รายการ}}</translation>
 <translation id="1884013283844450420">เครือข่ายที่ <ph name="NETWORK_INDEX" /> จาก <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, เชื่อมต่อ</translation>
 <translation id="1884340228047885921">การตั้งค่าระดับการเข้าถึงปัจจุบันคือรายชื่อติดต่อบางราย</translation>
 <translation id="1884705339276589024">ปรับขนาดดิสก์ Linux</translation>
@@ -989,6 +992,7 @@
 <translation id="2099686503067610784">ลบใบรับรองของเซิร์ฟเวอร์ "<ph name="CERTIFICATE_NAME" />" หรือไม่</translation>
 <translation id="2100273922101894616">ลงชื่อเข้าใช้อัตโนมัติ</translation>
 <translation id="2101225219012730419">รุ่น:</translation>
+<translation id="2108349519800154983">{COUNT,plural, =1{หมายเลขโทรศัพท์}other{# หมายเลขโทรศัพท์}}</translation>
 <translation id="211144231511833662">ล้างประเภท</translation>
 <translation id="2111670510994270194">แท็บใหม่อยู่ด้านขวา</translation>
 <translation id="21133533946938348">ตรึงแท็บ</translation>
@@ -1286,6 +1290,7 @@
 <translation id="2435457462613246316">แสดงรหัสผ่าน</translation>
 <translation id="2435579801172349831">เปิดทั้งหมด (<ph name="URL_COUNT" />) ในหน้าต่างที่ไม่ระบุตัวตน</translation>
 <translation id="2436186046335138073">อนุญาตให้ <ph name="HANDLER_HOSTNAME" /> เปิดลิงก์ <ph name="PROTOCOL" /> ทั้งหมดไหม</translation>
+<translation id="2440366609912234507">{COUNT,plural, =1{แอป}other{# แอป}}</translation>
 <translation id="2440604414813129000">ดูโ&amp;ค้ดต้นฉบับ</translation>
 <translation id="244231003699905658">ที่อยู่ไม่ถูกต้อง โปรดตรวจสอบที่อยู่แล้วลองอีกครั้ง</translation>
 <translation id="2442916515643169563">เงาของข้อความ</translation>
@@ -1434,6 +1439,7 @@
 <translation id="2604255671529671813">ข้อผิดพลาดในการเชื่อมต่อเครือข่าย</translation>
 <translation id="2606246518223360146">ลิงก์ข้อมูล</translation>
 <translation id="2606454609872547359">ไม่ ดำเนินการต่อโดยไม่ใช้ ChromeVox</translation>
+<translation id="2606568927909309675">สร้างคำบรรยายสำหรับเสียงและวิดีโอภาษาอังกฤษโดยอัตโนมัติ ระบบจะไม่ส่งเสียงและคำบรรยายออกไปจากอุปกรณ์</translation>
 <translation id="2607101320794533334">ข้อมูลหัวเรื่องคีย์สาธารณะ</translation>
 <translation id="2609896558069604090">สร้างทางลัด...</translation>
 <translation id="2609980095400624569">เริ่มการเชื่อมต่อไม่ได้</translation>
@@ -1698,6 +1704,7 @@
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
 <translation id="2889064240420137087">เปิดลิงก์ด้วย...</translation>
 <translation id="2889925978073739256">บล็อกปลั๊กอินที่ไม่ได้อยู่ในแซนด์บ็อกซ์ต่อไป</translation>
+<translation id="2891922230654533301">ใช้อุปกรณ์เพื่อลงชื่อเข้าใช้ <ph name="APP_NAME" /> ไหม</translation>
 <translation id="2893168226686371498">เบราว์เซอร์เริ่มต้น</translation>
 <translation id="2894757982205307093">แท็บใหม่ในกลุ่ม</translation>
 <translation id="289644616180464099">ซิมการ์ดถูกล็อก</translation>
@@ -2010,6 +2017,7 @@
 <translation id="3269069891205016797">ระบบจะนำข้อมูลของคุณออกจากอุปกรณ์เมื่อคุณออกจากระบบ</translation>
 <translation id="3269093882174072735">โหลดภาพ</translation>
 <translation id="3269612321104318480">สีน้ำเงินอมเขียวอ่อนและสีขาว</translation>
+<translation id="3269689705184377744">{COUNT,plural, =1{ไฟล์}other{# ไฟล์}}</translation>
 <translation id="326999365752735949">กำลังดาวน์โหลดความต่าง</translation>
 <translation id="3270965368676314374">อ่าน เปลี่ยนแปลง และลบรูปภาพ เพลง และสื่ออื่นๆ จากคอมพิวเตอร์ของคุณ</translation>
 <translation id="327147043223061465">ดูคุกกี้และข้อมูลเว็บไซต์ทั้งหมด</translation>
@@ -2146,7 +2154,6 @@
 <translation id="3429271624041785769">ภาษาของเนื้อหาเว็บ</translation>
 <translation id="3429275422858276529">บุ๊กมาร์กหน้านี้เพื่อให้หาเจอง่ายในภายหลัง</translation>
 <translation id="3432227430032737297">นำรายการที่แสดงทั้งหมดออก</translation>
-<translation id="3432757130254800023">ส่งภาพและเสียงไปยังจอแสดงผลบนเครือข่ายเฉพาะที่</translation>
 <translation id="3432762828853624962">คนทำงานที่แชร์</translation>
 <translation id="3433621910545056227">อ๊ะ! ระบบไม่สามารถสร้างการล็อกแอตทริบิวต์เวลาการติดตั้งของอุปกรณ์ได้</translation>
 <translation id="3434272557872943250">หากเปิดการตั้งค่ากิจกรรมเพิ่มเติมบนเว็บและแอปสำหรับบุตรหลาน ระบบอาจบันทึกข้อมูลนี้ไว้ในบัญชี Google ของบุตรหลาน ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าเหล่านี้และวิธีปรับเปลี่ยนที่ families.google.com</translation>
@@ -2305,6 +2312,7 @@
 <translation id="3600792891314830896">ปิดเสียงเว็บไซต์ที่เล่นเสียง</translation>
 <translation id="360180734785106144">นำเสนอฟีเจอร์ใหม่ๆ เมื่อพร้อมให้บริการ</translation>
 <translation id="3602290021589620013">ดูตัวอย่าง</translation>
+<translation id="3602870520245633055">พิมพ์และสแกน</translation>
 <translation id="3603622770190368340">รับใบรับรองเครือข่าย</translation>
 <translation id="3604193429970465812">บัญชีรอง</translation>
 <translation id="3604713164406837697">เปลี่ยนวอลเปเปอร์</translation>
@@ -2320,6 +2328,7 @@
 <translation id="3615579745882581859">กำลังสแกน <ph name="FILE_NAME" /></translation>
 <translation id="3616741288025931835">&amp;ล้างข้อมูลการท่องเว็บ...</translation>
 <translation id="3617891479562106823">พื้นหลังไม่พร้อมใช้งาน โปรดลองอีกครั้งภายหลัง</translation>
+<translation id="3618800144880386250">{COUNT,plural, =1{วิดีโอ}other{# วิดีโอ}}</translation>
 <translation id="3619115746895587757">คาปูชิโน</translation>
 <translation id="362333465072914957">กำลังรอให้ CA ออกใบรับรอง</translation>
 <translation id="3624567683873126087">ปลดล็อกอุปกรณ์และลงชื่อเข้าใช้บัญชี Google</translation>
@@ -2729,6 +2738,7 @@
 <translation id="4047726037116394521">ไปที่หน้าแรก</translation>
 <translation id="4049783682480068824">{COUNT,plural, =1{รายชื่อติดต่อ # รายการไม่พร้อมใช้งาน หากต้องการใช้การแชร์ใกล้เคียงกับรายชื่อดังกล่าว ให้เพิ่มอีเมลที่เชื่อมโยงกับบัญชี Google ของรายชื่อนั้นลงในรายชื่อติดต่อของคุณ}other{รายชื่อติดต่อ # รายการไม่พร้อมใช้งาน หากต้องการใช้การแชร์ใกล้เคียงกับรายชื่อดังกล่าว ให้เพิ่มอีเมลที่เชื่อมโยงกับบัญชี Google ของรายชื่อเหล่านั้นลงในรายชื่อติดต่อของคุณ}}</translation>
 <translation id="4050225813016893843">วิธีการตรวจสอบสิทธิ์</translation>
+<translation id="4050534976465737778">ตรวจสอบว่าอุปกรณ์ทั้ง 2 เครื่องปลดล็อกแล้ว อยู่ใกล้กัน และเปิดบลูทูธอยู่ หากจะแชร์กับ Chromebook ที่ไม่ได้อยู่ในรายชื่อติดต่อของคุณ ให้ตรวจสอบว่าอุปกรณ์ดังกล่าวเปิดการมองเห็นใกล้เคียงแล้ว (เปิดพื้นที่แสดงสถานะ แล้วเปิด "การมองเห็นใกล้เคียง") <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
 <translation id="4052120076834320548">ขนาดจิ๋ว</translation>
 <translation id="4054070260844648638">ปรากฏแก่ทุกคน</translation>
 <translation id="4056908315660577142">คุณใช้งานแอป <ph name="APP_NAME" /> สำหรับ Chrome ถึงขีดจำกัดเวลาที่ผู้ปกครองตั้งไว้แล้ว พรุ่งนี้คุณจะใช้แอปได้ <ph name="TIME_LIMIT" /></translation>
@@ -2963,6 +2973,7 @@
 <translation id="4364327530094270451">เมลอน</translation>
 <translation id="4364567974334641491"><ph name="APP_NAME" /> กำลังแชร์หน้าต่าง</translation>
 <translation id="4364830672918311045">แสดงการแจ้งเตือน</translation>
+<translation id="4366138410738374926">เริ่มการพิมพ์แล้ว</translation>
 <translation id="437004882363131692">รับเคล็ดลับการใช้งาน ข้อเสนอ และข้อมูลอัปเดต รวมถึงแชร์ความคิดเห็นสำหรับ <ph name="DEVICE_TYPE" /> ยกเลิกการรับข่าวสารได้ทุกเมื่อ</translation>
 <translation id="4370425812909262207">ซ่อนรถเข็นแล้ว รถเข็นจะปรากฏอีกครั้งเมื่อคุณทำการเปลี่ยนแปลง</translation>
 <translation id="4370975561335139969">อีเมลและรหัสผ่านที่คุณป้อนไม่ตรงกัน</translation>
@@ -3150,6 +3161,7 @@
 <translation id="4568025708905928793">กำลังขอคีย์ความปลอดภัย</translation>
 <translation id="4568213207643490790">ขออภัย เราไม่อนุญาตให้ใช้บัญชี Google ในอุปกรณ์เครื่องนี้</translation>
 <translation id="4569747168316751899">เมื่อไม่ได้ใช้งาน</translation>
+<translation id="4569830245132310845">{COUNT,plural, =1{ที่อยู่}other{# ที่อยู่}}</translation>
 <translation id="4570387585180509432">ที่อยู่ หมายเลขโทรศัพท์ และอื่นๆ</translation>
 <translation id="4572659312570518089">การตรวจสอบสิทธิ์ถูกยกเลิกขณะที่เชื่อมต่อกับ "<ph name="DEVICE_NAME" />"</translation>
 <translation id="4572779512957829735">ป้อน PIN ของคีย์ความปลอดภัย</translation>
@@ -3209,6 +3221,7 @@
 <translation id="4635444580397524003">กู้คืนการสำรองข้อมูล Linux สำเร็จแล้ว</translation>
 <translation id="4636930964841734540">ข้อมูล</translation>
 <translation id="4637083375689622795">การทำงานเพิ่มเติม <ph name="EMAIL" /></translation>
+<translation id="4637252186848840278">{COUNT,plural, =1{ข้อความ}other{# ข้อความ}}</translation>
 <translation id="4638930039313743000">เปิดใช้การแก้ไขข้อบกพร่อง ADB</translation>
 <translation id="4641539339823703554">Chrome ไม่สามารถตั้งเวลาระบบได้ โปรดตรวจสอบเวลาด้านล่างและแก้ไขให้ถูกต้องหากจำเป็น</translation>
 <translation id="4642769377300286600">กำลังติดตั้งโปรไฟล์อุปกรณ์เคลื่อนที่, เครือข่าย <ph name="NETWORK_INDEX" /> จาก <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="NETWORK_PROVIDER_NAME" /></translation>
@@ -3224,10 +3237,12 @@
 <translation id="4651484272688821107">โหลดองค์ประกอบออนไลน์ที่มีทรัพยากรโหมดสาธิตไม่ได้</translation>
 <translation id="4652935475563630866">ต้องเปิด Parallels Desktop อีกครั้งเพื่อให้การเปลี่ยนแปลงการตั้งค่ากล้องมีผล เปิด Parallels Desktop อีกครั้งเพื่อดำเนินการต่อ</translation>
 <translation id="4653405415038586100">เกิดข้อผิดพลาดขณะกำหนดค่า Linux</translation>
+<translation id="4654236001025007561">แชร์ไฟล์กับ Chromebook และอุปกรณ์ Android รอบตัวคุณ</translation>
 <translation id="4657914796247705218">ความเร็วของ TrackPoint</translation>
 <translation id="465878909996028221">การเปลี่ยนเส้นทางเบราว์เซอร์รองรับเฉพาะ http, https และโปรโตคอลไฟล์เท่านั้น</translation>
 <translation id="4659077111144409915">บัญชีหลัก</translation>
 <translation id="4659126640776004816">ฟีเจอร์นี้จะเปิดเมื่อคุณลงชื่อเข้าใช้บัญชี Google</translation>
+<translation id="4660465405448977105">{COUNT,plural, =1{ภาพ}other{# ภาพ}}</translation>
 <translation id="4660476621274971848">เวอร์ชันที่คาดการณ์ "<ph name="EXPECTED_VERSION" />" แต่เวอร์ชันที่แจ้งคือ "<ph name="NEW_ID" />"</translation>
 <translation id="4660540330091848931">กำลังปรับขนาด</translation>
 <translation id="4661407454952063730">ข้อมูลแอปอาจเป็นข้อมูลใดก็ตามที่แอปบันทึกไว้ (ขึ้นอยู่กับการตั้งค่าของนักพัฒนาซอฟต์แวร์) ซึ่งรวมถึงข้อมูลอย่างเช่นรายชื่อติดต่อ ข้อความ และรูปภาพ</translation>
@@ -3328,6 +3343,7 @@
 <translation id="4794810983896241342"><ph name="BEGIN_LINK" />ผู้ดูแลระบบของคุณ<ph name="END_LINK" />เป็นผู้จัดการการอัปเดตต่างๆ</translation>
 <translation id="479536056609751218">หน้าเว็บ HTML เท่านั้น</translation>
 <translation id="4798236378408895261">แนบ<ph name="BEGIN_LINK" />บันทึกบลูทูธ<ph name="END_LINK" /> (ใช้ภายใน Google)</translation>
+<translation id="4798543057539040565">{COUNT,plural, =1{รายการ}other{# รายการ}}</translation>
 <translation id="4801448226354548035">ซ่อนบัญชี</translation>
 <translation id="4801512016965057443">อนุญาตการโรมมิ่งข้อมูลมือถือ</translation>
 <translation id="4804818685124855865">ตัดการเชื่อมต่อ</translation>
@@ -3758,6 +3774,7 @@
 <translation id="531118851858162334">คุณเห็นรายการนี้เนื่องจากระบบอิงตามกิจกรรมที่คุณทำก่อนหน้านี้ขณะใช้บริการของ Google คุณดูหรือลบข้อมูลดังกล่าวและเปลี่ยนการตั้งค่าได้ที่ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
 <translation id="5311304534597152726">กำลังลงชื่อเข้าใช้ในชื่อ</translation>
 <translation id="5311565231560644461">ไม่อนุญาตให้เว็บไซต์ใช้อุปกรณ์และข้อมูล Virtual Reality ของคุณ</translation>
+<translation id="5312876166662946389">{COUNT,plural, =1{ภาพ}other{# ภาพ}}</translation>
 <translation id="5314381603623123224">ข้อกำหนดในการให้บริการของ Chrome จะมีการเปลี่ยนแปลงในวันที่ 31 มีนาคม</translation>
 <translation id="5315738755890845852">เครื่องหมายวงเล็บปีกกาที่เกินมา: <ph name="ERROR_LINE" /></translation>
 <translation id="5317780077021120954">บันทึก</translation>
@@ -3823,6 +3840,7 @@
 <translation id="5390677308841849479">สีแดงเข้มและสีส้ม</translation>
 <translation id="5390743329570580756">ส่งสำหรับ</translation>
 <translation id="5392192690789334093">อนุญาตให้ส่งการแจ้งเตือนได้</translation>
+<translation id="5393761864111565424">{COUNT,plural, =1{ลิงก์}other{# ลิงก์}}</translation>
 <translation id="5397794290049113714">คุณ</translation>
 <translation id="5398497406011404839">บุ๊กมาร์กที่ซ่อนอยู่</translation>
 <translation id="5398572795982417028">การอ้างอิงหน้าอยู่นอกขอบเขต จำกัดไว้ที่ <ph name="MAXIMUM_PAGE" /> หน้า</translation>
@@ -4350,6 +4368,7 @@
 <translation id="6011074160056912900">เครือข่ายอีเธอร์เน็ต</translation>
 <translation id="6011193465932186973">ลายนิ้วมือ</translation>
 <translation id="6011449291337289699">ล้างข้อมูลเว็บไซต์</translation>
+<translation id="6013027779243312217">รับคำบรรยายสำหรับเสียงและวิดีโอของคุณ</translation>
 <translation id="6015796118275082299">ปี</translation>
 <translation id="6016178549409952427">ไปที่เนื้อหาเพิ่มเติม <ph name="CURRENT_ELEMENT" /> จาก <ph name="TOTAL_ELEMENTS" /> รายการ</translation>
 <translation id="6016551720757758985">ยืนยัน Powerwash และเปลี่ยนกลับเป็นเวอร์ชันก่อนหน้า</translation>
@@ -4859,6 +4878,7 @@
 <translation id="6605847144724004692">ยังไม่มีผู้ใช้ให้คะแนน</translation>
 <translation id="6607831829715835317">เ&amp;ครื่องมือเพิ่มเติม</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> ได้รับการจัดการโดย <ph name="DOMAIN" /> อยู่แล้ว หากต้องการใช้การควบคุมโดยผู้ปกครองกับบัญชี Google บัญชีอื่น ให้ออกจากระบบหลังจากที่ตั้งค่าแล้ว จากนั้นเลือก "เพิ่มบุคคล" ในหน้าจอลงชื่อเข้าใช้</translation>
+<translation id="6609478180749378879">ข้อมูลการลงชื่อเข้าใช้จะจัดเก็บอยู่ในอุปกรณ์นี้หลังจากออกจากโหมดไม่ระบุตัวตน โดยจะลงชื่อเข้าใช้เว็บไซต์นี้ด้วยอุปกรณ์ของคุณอีกครั้งในภายหลังได้</translation>
 <translation id="6611972847767394631">ค้นหาแท็บของคุณที่นี่</translation>
 <translation id="6612358246767739896">เนื้อหาที่ได้รับความคุ้มครอง</translation>
 <translation id="6615455863669487791">แสดงให้ฉันเห็น</translation>
@@ -4877,6 +4897,7 @@
 <translation id="6628328486509726751">อัปโหลด <ph name="WEBRTC_LOG_UPLOAD_TIME" /> แล้ว</translation>
 <translation id="6630043285902923878">กำลังค้นหาอุปกรณ์ USB...</translation>
 <translation id="6630752851777525409"><ph name="EXTENSION_NAME" /> ต้องการสิทธิ์ถาวรในการเข้าถึงใบรับรองเพื่อตรวจสอบสิทธิ์ตัวเองในนามของคุณ</translation>
+<translation id="6635362468090274700">ไม่มีคนที่แชร์ได้จนกว่าคุณจะทำให้คนอื่นมองเห็นได้<ph name="BR" /><ph name="BR" />หากต้องการดำเนินการดังกล่าวชั่วคราว ให้เปิดพื้นที่แสดงสถานะ แล้วเปิด "การมองเห็นใกล้เคียง"</translation>
 <translation id="6635944431854494329">เจ้าของควบคุมฟีเจอร์นี้ได้จากการตั้งค่า &gt; ขั้นสูง &gt; ส่งข้อมูลการวินิจฉัยและการใช้งานให้ Google โดยอัตโนมัติ</translation>
 <translation id="6635956300022133031">เลือกและปรับแต่งเสียงของการอ่านออกเสียงข้อความ</translation>
 <translation id="6636588250634969791">ใส่ซิมก่อนดำเนินการต่อ</translation>
@@ -5028,6 +5049,7 @@
 <translation id="6811332638216701903">ชื่อโฮสต์ DHCP</translation>
 <translation id="6812349420832218321">ไม่สามารถเรียกใช้ <ph name="PRODUCT_NAME" /> ในฐานะผู้ใช้ระดับราก</translation>
 <translation id="6812841287760418429">เก็บการเปลี่ยนแปลงไว้</translation>
+<translation id="681584224457905309">{COUNT,plural, =1{ไฟล์}other{# ไฟล์}}</translation>
 <translation id="6817174620439930047">ถามเมื่อเว็บไซต์ต้องการใช้ข้อความเฉพาะของระบบในการเข้าถึงอุปกรณ์ MIDI (แนะนำ)</translation>
 <translation id="6818198425579322765">ภาษาปลายทางของหน้า</translation>
 <translation id="6818802132960437751">ระบบป้องกันไวรัสในตัว</translation>
@@ -5048,6 +5070,7 @@
 <translation id="6835762382653651563">โปรดเชื่อมต่ออินเทอร์เน็ตเพื่ออัปเดต <ph name="DEVICE_TYPE" /></translation>
 <translation id="6838034009068684089">ถามเมื่อเว็บไซต์ต้องการเปิดและวางหน้าต่างบนหน้าจอ (แนะนำ)</translation>
 <translation id="6838694093138907871">รหัสไม่ถูกต้อง โปรดลองอีกครั้ง</translation>
+<translation id="6838860780238890144">{COUNT,plural, =1{หมายเลขโทรศัพท์}other{# หมายเลขโทรศัพท์}}</translation>
 <translation id="6839225236531462745">ข้อผิดพลาดในการนำออกใบรับรอง</translation>
 <translation id="6839916869147598086">มีการเปลี่ยนแปลงการลงชื่อเข้าใช้</translation>
 <translation id="6840155290835956714">ถามก่อนที่จะส่ง</translation>
@@ -5153,6 +5176,7 @@
 <translation id="6955446738988643816">ตรวจสอบป๊อปอัป</translation>
 <translation id="6955535239952325894">การตั้งค่านี้ปิดใช้อยู่ในเบราว์เซอร์ที่มีการจัดการ</translation>
 <translation id="6957044667612803194">คีย์ความปลอดภัยนี้ไม่รองรับ PIN</translation>
+<translation id="6957914043905853560">{COUNT,plural, =1{ลิงก์}other{# ลิงก์}}</translation>
 <translation id="6960507406838246615">ต้องอัปเดต Linux</translation>
 <translation id="696103774840402661">ระบบได้ลบไฟล์ทั้งหมดและข้อมูลในเครื่องสำหรับผู้ใช้ทุกคนใน <ph name="DEVICE_TYPE" /> ออกแล้วอย่างถาวร</translation>
 <translation id="6964390816189577014">ฮีโร่</translation>
@@ -6062,6 +6086,7 @@
 <translation id="797394244396603170">เลือกอุปกรณ์ที่คุณต้องการแชร์ไฟล์ด้วย</translation>
 <translation id="7973962044839454485">การตรวจสอบสิทธิ์ PPP ล้มเหลวเนื่องจากชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง</translation>
 <translation id="7974566588408714340">ลองอีกครั้งโดยใช้ <ph name="EXTENSIONNAME" /></translation>
+<translation id="7974713334845253259">สีเริ่มต้น</translation>
 <translation id="7974936243149753750">โอเวอร์สแกน</translation>
 <translation id="7975504106303186033">คุณต้องลงทะเบียนอุปกรณ์ Chrome Education เครื่องนี้ในบัญชีสถานศึกษา หากต้องการลงชื่อสมัครใช้บัญชีใหม่ โปรดไปที่ g.co/workspace/edusignup</translation>
 <translation id="7978412674231730200">กุญแจส่วนตัว</translation>
@@ -6220,7 +6245,6 @@
 <translation id="8147900440966275470">พบ <ph name="NUM" /> แท็บ</translation>
 <translation id="8148760431881541277">จำกัดการลงชื่อเข้าใช้</translation>
 <translation id="8150259863378108853">Lacros คือเบราว์เซอร์ทดลอง โปรดรายงานปัญหาด้วยความช่วยเหลือ &gt; "รายงานปัญหา..."</translation>
-<translation id="8151579390896831136">ปรับแต่งโปรไฟล์ของคุณ รวมถึงชื่อโปรไฟล์</translation>
 <translation id="8151638057146502721">กำหนดค่า</translation>
 <translation id="8154790740888707867">ไม่มีไฟล์</translation>
 <translation id="815491593104042026">อ๊ะ!  การตรวจสอบสิทธิ์ล้มเหลวเนื่องจากมีการกำหนดค่าให้ใช้ URL ที่ไม่ปลอดภัย (<ph name="BLOCKED_URL" />)  โปรดติดต่อผู้ดูแลระบบของคุณ</translation>
@@ -6228,6 +6252,7 @@
 <translation id="8157704005178149728">กำลังตั้งค่าการควบคุมดูแล</translation>
 <translation id="8158117992543756526">อุปกรณ์นี้จะไม่ได้รับการอัปเดตซอฟต์แวร์และความปลอดภัยอัตโนมัตินับตั้งแต่เดือน<ph name="MONTH_AND_YEAR" /> เป็นต้นไป <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
 <translation id="816055135686411707">ข้อผิดพลาดในการตั้งค่าความเชื่อถือใบรับรอง</translation>
+<translation id="8160775796528709999">รับคำบรรยายสำหรับเสียงและวิดีโอของคุณโดยเปิดใช้คำบรรยายสดในการตั้งค่า</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />, <ph name="TIME_REMAINING" /></translation>
 <translation id="8161293209665121583">โหมดผู้อ่านสำหรับหน้าเว็บ</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{ย้ายแท็บไปที่หน้าต่างใหม่}other{ย้ายแท็บไปที่หน้าต่างใหม่}}</translation>
@@ -6352,6 +6377,7 @@
 <translation id="8300011035382349091">แก้ไขบุ๊กมาร์กของแท็บนี้</translation>
 <translation id="8300374739238450534">สีน้ำเงินแก่</translation>
 <translation id="8300849813060516376">OTASP ล้มเหลว</translation>
+<translation id="8303616404642252802">{COUNT,plural, =1{ที่อยู่}other{# ที่อยู่}}</translation>
 <translation id="8304383784961451596">คุณไม่ได้รับอนุญาตให้ใช้อุปกรณ์นี้ โปรดติดต่อผู้ดูแลระบบเพื่อขอสิทธิ์ลงชื่อเข้าใช้ หรือลงชื่อเข้าใช้ด้วยบัญชี Google ที่อยู่ภายใต้การควบคุมดูแลของ Family Link</translation>
 <translation id="8308179586020895837">ถามว่า <ph name="HOST" /> ต้องการเข้าถึงกล้องของคุณไหม</translation>
 <translation id="830868413617744215">เบต้า</translation>
@@ -6409,7 +6435,6 @@
 <translation id="8378714024927312812">จัดการโดยองค์กร</translation>
 <translation id="8379878387931047019">อุปกรณ์นี้ไม่รองรับประเภทคีย์ความปลอดภัยที่เว็บไซต์นี้กำหนดไว้</translation>
 <translation id="8379991678458444070">บุ๊กมาร์กแท็บนี้ไว้เพื่อให้กลับมาได้อย่างรวดเร็ว</translation>
-<translation id="8380266723152870797">ชื่อหน้าต่าง</translation>
 <translation id="8382913212082956454">คัดลอก&amp;ที่อยู่อีเมล</translation>
 <translation id="8386091599636877289">ไม่พบนโยบาย</translation>
 <translation id="8386903983509584791">สแกนเสร็จแล้ว</translation>
@@ -6650,6 +6675,7 @@
 <translation id="867085395664725367">เกิดข้อผิดพลาดของเซิร์ฟเวอร์ชั่วคราว</translation>
 <translation id="8673026256276578048">ค้นหาเว็บ...</translation>
 <translation id="8673383193459449849">ปัญหาของเซิร์ฟเวอร์</translation>
+<translation id="8676152597179121671">{COUNT,plural, =1{วิดีโอ}other{# วิดีโอ}}</translation>
 <translation id="8676374126336081632">ล้างข้อมูลที่ป้อน</translation>
 <translation id="8676770494376880701">เชื่อมต่อกับที่ชาร์จพลังงานต่ำ</translation>
 <translation id="8677212948402625567">ยุบทั้งหมด...</translation>
@@ -6833,7 +6859,6 @@
 <translation id="8859402192569844210">โหลดข้อกำหนดในการให้บริการไม่สำเร็จ</translation>
 <translation id="8859662783913000679">บัญชีผู้ปกครอง</translation>
 <translation id="8862003515646449717">เปลี่ยนเป็นเบราว์เซอร์ที่เร็ว</translation>
-<translation id="8863140399813345099">ระดับการเข้าถึงอุปกรณ์จะควบคุมผู้ที่แชร์ไฟล์กับคุณได้ขณะที่หน้าจอของคุณไม่ได้ล็อกอยู่</translation>
 <translation id="8863753581171631212">เปิดลิงก์ใน <ph name="APP" /> ใหม่</translation>
 <translation id="8864055848767439877">กำลังแชร์ <ph name="TAB_NAME" /> กับ <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">นำ <ph name="EMAIL" /> ออกจากอุปกรณ์นี้แล้ว</translation>
@@ -6887,7 +6912,6 @@
 <translation id="8912810933860534797">เปิดใช้การสแกนอัตโนมัติ</translation>
 <translation id="8915370057835397490">กำลังโหลดคำแนะนำ</translation>
 <translation id="8916476537757519021">เฟรมย่อยแบบไม่ระบุตัวตน: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ตั้งชื่อหน้าต่าง</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> ของ <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">สีน้ำเงินอมเขียวเข้ม</translation>
 <translation id="8925458182817574960">&amp;การตั้งค่า</translation>
@@ -7075,6 +7099,7 @@
 <translation id="9128870381267983090">เชื่อมต่อกับเครือข่าย</translation>
 <translation id="9130015405878219958">โหมดที่ป้อนไม่ถูกต้อง</translation>
 <translation id="9131487537093447019">ส่งข้อความถึงและรับข้อความจากอุปกรณ์บลูทูธ</translation>
+<translation id="9134119143784876218">สร้างคำบรรยายสำหรับเสียงและวิดีโอภาษาอังกฤษโดยอัตโนมัติ (ปัจจุบันพร้อมให้บริการในเบราว์เซอร์ Chrome เท่านั้น) ระบบจะไม่ส่งเสียงและคำบรรยายออกไปจากอุปกรณ์</translation>
 <translation id="9137013805542155359">แสดงหน้าเว็บเดิม</translation>
 <translation id="9137157311132182254">เครื่องมือค้นหาที่ต้องการ</translation>
 <translation id="9137248913990643158">โปรดเปิดและลงชื่อเข้าใช้ Chrome ก่อนใช้แอปนี้</translation>
@@ -7122,6 +7147,7 @@
 <translation id="9179524979050048593">ชื่อผู้ใช้บนหน้าจอลงชื่อเข้าใช้</translation>
 <translation id="9180281769944411366">ขั้นตอนนี้อาจใช้เวลาสักครู่ กำลังเริ่มคอนเทนเนอร์ Linux</translation>
 <translation id="9180380851667544951">เว็บไซต์แชร์หน้าจอของคุณได้</translation>
+<translation id="918352324374649435">{COUNT,plural, =1{แอป}other{# แอป}}</translation>
 <translation id="9186963452600581158">ลงชื่อเข้าใช้ด้วยบัญชี Google ของบุตรหลาน</translation>
 <translation id="9188732951356337132">ส่งข้อมูลการใช้งานและการวินิจฉัย ปัจจุบันอุปกรณ์นี้ส่งข้อมูลการวินิจฉัย อุปกรณ์ และการใช้งานแอปไปยัง Google โดยอัตโนมัติ โดยจะไม่มีการใช้ข้อมูลนี้ในการระบุชื่อบุตรหลานของคุณ และจะช่วยให้แอปและระบบมีความเสถียร พร้อมทั้งปรับปรุงด้านอื่นๆ ข้อมูลที่รวบรวมมาบางส่วนจะมีประโยชน์ต่อแอปและพาร์ทเนอร์ของ Google ด้วย เช่น นักพัฒนาซอฟต์แวร์ Android หากเปิดการตั้งค่ากิจกรรมเพิ่มเติมบนเว็บและแอปสำหรับบุตรหลาน ระบบอาจบันทึกข้อมูลนี้ไว้ในบัญชี Google ของบุตรหลาน <ph name="BEGIN_LINK2" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK2" /></translation>
 <translation id="9198090666959937775">ใช้โทรศัพท์ Android เป็นคีย์ความปลอดภัย</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 39517f6..124956e0 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Web içerik dilleri</translation>
 <translation id="3429275422858276529">Bu sayfayı daha sonra kolayca bulmak için sayfaya yer işareti koyun</translation>
 <translation id="3432227430032737297">Tüm Gösterilenleri Kaldır</translation>
-<translation id="3432757130254800023">Yerel ağdaki ekranlara ses ve video gönderme</translation>
 <translation id="3432762828853624962">Ortak Çalışanlar</translation>
 <translation id="3433621910545056227">Hata! Sistem, cihaz yükleme zamanı özellikleri kilidini oluşturamadı.</translation>
 <translation id="3434272557872943250">Çocuğunuz için ek Web ve Uygulama Etkinliği açıksa bu veriler çocuğunuzun Google Hesabına kaydedilebilir. Bu ayarlar hakkında daha fazla bilgiyi ve nasıl düzenleneceklerini families.google.com sayfasında bulabilirsiniz.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> Sekme Bulundu</translation>
 <translation id="8148760431881541277">Oturum açmayı sınırla</translation>
 <translation id="8150259863378108853">Lacros deneysel bir tarayıcıdır. Lütfen tüm sorunları Yardım &gt; "Sorun bildir..." bölümünden bildirin</translation>
-<translation id="8151579390896831136">Adı da dahil olmak üzere profilinizi özelleştirin</translation>
 <translation id="8151638057146502721">Yapılandır</translation>
 <translation id="8154790740888707867">Dosya yok</translation>
 <translation id="815491593104042026">Hata! Güvenli olmayan bir URL (<ph name="BLOCKED_URL" />) kullanmak üzere yapılandırıldığından kimlik doğrulama başarısız oldu. Lütfen yöneticinizle bağlantı kurun.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Kuruluşunuz tarafından yönetiliyor</translation>
 <translation id="8379878387931047019">Bu cihaz, bu web sitesi tarafından istenen türde güvenlik anahtarını desteklemiyor</translation>
 <translation id="8379991678458444070">Bu sekmeye yer işareti koyarak buraya hızlıca geri dönün</translation>
-<translation id="8380266723152870797">Pencere adı</translation>
 <translation id="8382913212082956454">E-posta &amp;adresini kopyala</translation>
 <translation id="8386091599636877289">Politika bulunamadı.</translation>
 <translation id="8386903983509584791">Tarama tamamlandı</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Hizmet Şartları yüklenemedi</translation>
 <translation id="8859662783913000679">Ebeveyn hesabı</translation>
 <translation id="8862003515646449717">Hızlı bir tarayıcıya geç</translation>
-<translation id="8863140399813345099">Görünürlük ayarınız, ekranınızın kilidi açıkken kimlerin sizinle içerik paylaşabileceğini denetlemenizi sağlar</translation>
 <translation id="8863753581171631212">Bağlantıyı yeni <ph name="APP" /> uygulamasında aç</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" />, <ph name="APP_NAME" /> ile paylaşılıyor</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> bu cihazdan kaldırıldı</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Otomatik taramayı etkinleştir</translation>
 <translation id="8915370057835397490">Öneriler yükleniyor</translation>
 <translation id="8916476537757519021">Gizli Alt Çerçeve: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Pencere Adını Ayarlayın</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> adlı kişinin <ph name="DEVICE_TYPE" /> cihazı</translation>
 <translation id="8923880975836399332">Koyu turkuaz</translation>
 <translation id="8925458182817574960">&amp;Ayarlar</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index eecea0a..d564f51 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -2157,7 +2157,6 @@
 <translation id="3429271624041785769">Мови веб-контенту</translation>
 <translation id="3429275422858276529">Створіть закладку цієї сторінки, щоб легко знайти її пізніше</translation>
 <translation id="3432227430032737297">Вилучити всі показані</translation>
-<translation id="3432757130254800023">Надсилати аудіо та відео на дисплеї в локальній мережі</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">На жаль, системі не вдалося заблокувати атрибути часу встановлення на пристрої.</translation>
 <translation id="3434272557872943250">Якщо ввімкнено також запис Історії додатків і веб-пошуку, ці дані зберігаються в обліковому записі Google дитини. Докладніше про це налаштування читайте на сторінці families.google.com.</translation>
@@ -4820,7 +4819,7 @@
 <translation id="652948702951888897">Історія Chrome</translation>
 <translation id="6530186581263215931">Ці налаштування застосовує адміністратор</translation>
 <translation id="6531282281159901044">Завантажити небезпечний файл</translation>
-<translation id="6532101170117367231">Зберегти на Диску Google</translation>
+<translation id="6532101170117367231">Зберегти на Google Диску</translation>
 <translation id="6532106788206463496">Зберегти зміни</translation>
 <translation id="6532206849875187177">Безпека та вхід</translation>
 <translation id="6532527800157340614">Не вдалось отримати маркер доступу та ввійти. Перевірте з'єднання з мережею та повторіть спробу.</translation>
@@ -6249,7 +6248,6 @@
 <translation id="8147900440966275470">Знайдено стільки вкладок: <ph name="NUM" /></translation>
 <translation id="8148760431881541277">Обмежити вхід</translation>
 <translation id="8150259863378108853">Lacros – це експериментальний веб-переглядач. Щоб повідомити про проблему, натисніть "Довідка" &gt; "Повідомити про проблему…"</translation>
-<translation id="8151579390896831136">Налаштуйте свій профіль, зокрема вкажіть назву</translation>
 <translation id="8151638057146502721">Налаштувати</translation>
 <translation id="8154790740888707867">Немає файлу</translation>
 <translation id="815491593104042026">Помилка. Не вдалося отримати дозвіл, оскільки вас було переспрямовано на незахищену URL-адресу (<ph name="BLOCKED_URL" />). Зверніться до свого адміністратора.</translation>
@@ -6440,7 +6438,6 @@
 <translation id="8378714024927312812">Профілем керує ваша організація</translation>
 <translation id="8379878387931047019">Пристрій не підтримує тип ключа безпеки, потрібний для цього веб-сайту</translation>
 <translation id="8379991678458444070">Зробіть закладку для цієї вкладки, щоб швидко повертатися на неї</translation>
-<translation id="8380266723152870797">Назва вікна</translation>
 <translation id="8382913212082956454">Копіювати &amp;адресу електронної пошти</translation>
 <translation id="8386091599636877289">Правило не знайдено.</translation>
 <translation id="8386903983509584791">Сканування завершено</translation>
@@ -6868,7 +6865,6 @@
 <translation id="8859402192569844210">Не вдалося завантажити Умови використання</translation>
 <translation id="8859662783913000679">Батьківський обліковий запис</translation>
 <translation id="8862003515646449717">Виберіть швидкий веб-переглядач</translation>
-<translation id="8863140399813345099">Видимість пристрою визначає, хто може надсилати вам дані, коли ваш екран розблоковано</translation>
 <translation id="8863753581171631212">Відкрити посилання в новому вікні додатка <ph name="APP" /></translation>
 <translation id="8864055848767439877">Додаток <ph name="APP_NAME" /> має доступ до вкладки <ph name="TAB_NAME" /></translation>
 <translation id="8864458770072227512">Обліковий запис <ph name="EMAIL" /> видалено з цього пристрою</translation>
@@ -6922,7 +6918,6 @@
 <translation id="8912810933860534797">Увімкнути автоматичне сканування</translation>
 <translation id="8915370057835397490">Завантаження пропозиції</translation>
 <translation id="8916476537757519021">Додатковий анонімний фрейм: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Укажіть назву вікна</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> (<ph name="GIVEN_NAME" />)</translation>
 <translation id="8923880975836399332">Темно-бірюзовий</translation>
 <translation id="8925458182817574960">&amp;Налаштування</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index e2c1c06..72dcfcf 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1046,6 +1046,7 @@
 <translation id="2154710561487035718">‏URL کاپی کریں</translation>
 <translation id="2155772377859296191">‏<ph name="WIDTH" /> x <ph name="HEIGHT" /> جیسا نظر آتا ہے</translation>
 <translation id="2156294658807918600">سروس ورکر: <ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">سیفٹی چیک دوبارہ چلائیں</translation>
 <translation id="2157474325782140681">‏اضافی خصوصیات حاصل کرنے کیلئے، اس Chromebook کے ساتھ کام کرنے کیلئے ڈیزائن کردہ ایک Dell ڈاکنگ اسٹیشن استعمال کریں۔</translation>
 <translation id="215753907730220065">پوری اسکرین سے خارج ہوں</translation>
 <translation id="2157875535253991059">یہ صفحہ اب پوری اسکرین ہے۔</translation>
@@ -1990,6 +1991,7 @@
 <translation id="3225319735946384299">کوڈ سائن کرنا</translation>
 <translation id="3227137524299004712">مائیکروفون</translation>
 <translation id="3233271424239923319">‏Linux کی ایپس اور فائلز کا بیک اپ لیں</translation>
+<translation id="3238192140106069382">منسلک ہونے اور تصدیق کرنے کی کوشش کر رہا ہے</translation>
 <translation id="3239373508713281971"><ph name="APP_NAME" /> کے لیے وقت کی حد ہٹا دی گئی</translation>
 <translation id="3241680850019875542">پیک کرنے کیلئے ایکسٹینشن کی روٹ ڈائریکٹری منتخب کریں۔ ایک ایکسٹینشن کو اپ ڈیٹ کرنے کیلئے، دوبارہ استعمال کرنے کیلئے نجی کلیدی فائل بھی منتخب کریں۔</translation>
 <translation id="3244294424315804309">آواز بند کرنا جاری رکھیں</translation>
@@ -2153,7 +2155,6 @@
 <translation id="3429271624041785769">ویب مواد کی زبانیں</translation>
 <translation id="3429275422858276529">بعد میں اسے تلاش کرنے کے لیے اس صفحے کو بُک مارک کریں</translation>
 <translation id="3432227430032737297">سبھی دکھائے گئے کو ہٹائیں</translation>
-<translation id="3432757130254800023">مقامی نیٹ ورک پر ڈسپلیز میں آڈیو اور ویڈیو بھیجیں</translation>
 <translation id="3432762828853624962">اشتراک کردہ ورکرز</translation>
 <translation id="3433621910545056227">افوہ!  سسٹم آلے کے انسٹالیشن کے وقت کے انتسابات کا لاک تشکیل دینے میں ناکام ہوگیا۔</translation>
 <translation id="3434272557872943250">‏اگر آپ کے بچے کیلئے ویب اور ایپ کی اضافی سرگرمی کی ترتیب آن ہے تو اس ڈیٹا کو اس کے Google اکاؤنٹ میں محفوظ کیا جا سکتا ہے۔ families.google.com پر ان ترتیبات اور ان کو ایڈجسٹ کرنے کے طریقے کے بارے میں مزید جانيں۔</translation>
@@ -6244,7 +6245,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ٹیب ملا</translation>
 <translation id="8148760431881541277">سائن ان محدود کریں</translation>
 <translation id="8150259863378108853">‏Lacros ایک تجرباتی براؤزر ہے۔ براہ کرم مدد &gt; "مسئلے کی اطلاع دیں..." کے ساتھ کسی بھی مسئلے کی اطلاع دیں</translation>
-<translation id="8151579390896831136">اپنی پروفائل کو اس کے نام سمیت حسب ضرورت بنائیں</translation>
 <translation id="8151638057146502721">کنفیگر کریں</translation>
 <translation id="8154790740888707867">کوئی فائل نہیں ہے</translation>
 <translation id="815491593104042026">‏افوہ، توثیق ناکام ہو گئی کیونکہ اسے ایک غیر محفوظ ‎URL (<ph name="BLOCKED_URL" />)‎ استعمال کرنے کیلئے کنفیگر کیا گیا تھا۔ براہ کرم اپنے منتظم سے رابطہ کریں۔</translation>
@@ -6435,7 +6435,6 @@
 <translation id="8378714024927312812">آپ کی تنظیم کے زیر نظم</translation>
 <translation id="8379878387931047019">یہ آلہ اس ویب سائٹ کی درخواست کردہ سیکیورٹی کلید کی قسم کو سپورٹ نہیں کرتا ہے</translation>
 <translation id="8379991678458444070">اس ٹیب کو بُک مارک کر کے یہاں تیزی سے واپس آئیں</translation>
-<translation id="8380266723152870797">ونڈو کا نام</translation>
 <translation id="8382913212082956454">&amp;ای میل پتہ کاپی کریں</translation>
 <translation id="8386091599636877289">پالیسی نہیں ملی۔</translation>
 <translation id="8386903983509584791">اسکین مکمل ہو گیا</translation>
@@ -6860,7 +6859,6 @@
 <translation id="8859402192569844210">سروس کی شرائط لوڈ نہیں ہو سکیں</translation>
 <translation id="8859662783913000679">والدین کا اکاؤنٹ</translation>
 <translation id="8862003515646449717">تیز براؤزر پر سوئچ کریں</translation>
-<translation id="8863140399813345099">آپ کے آلہ کی مرئیت اس چیز کو کنٹرول کرتی ہے کہ آپ کی اسکرین کے غیر مقفل ہونے کی صورت میں کون آپ کے ساتھ اشتراک کر سکتا ہے</translation>
 <translation id="8863753581171631212">لنک کو نئی <ph name="APP" /> میں کھولیں</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> کا اشتراک <ph name="APP_NAME" /> کے ساتھ کیا جا رہا ہے</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> کو اس اکاؤنٹ سے ہٹا دیا گیا</translation>
@@ -6914,7 +6912,6 @@
 <translation id="8912810933860534797">خودکار اسکین فعال کریں</translation>
 <translation id="8915370057835397490">تجویز لوڈ ہو رہی ہے</translation>
 <translation id="8916476537757519021">پوشیدگی کا ذیلی فریم: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">ونڈو کا نام سیٹ کریں</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> کا <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">گہرا نیلگوں سبز</translation>
 <translation id="8925458182817574960">&amp;ترتیبات</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 32e25b52..bcdbe75 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -330,6 +330,7 @@
 <translation id="1367951781824006909">Fayl tanlang</translation>
 <translation id="1369149969991017342">Switch access (kompyuterni belgilangan tugmalar birikmasi orqali boshqarish) taʼminotini yoqish</translation>
 <translation id="1372841398847029212">Hisobingizga sinxronlash</translation>
+<translation id="1373176046406139583">Qurilmangiz ochiqligi sozlamalarida ekraningiz ochiq ekanligida sizga kimlar fayl yuborishi mumkinligi boshqariladi. <ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation>
 <translation id="1374844444528092021"><ph name="NETWORK_NAME" /> tarmog‘i talab qilayotgan sertifikat o‘rnatilmagan yoki eskirgan. Yangisini olish uchun qaytadan ulanib ko‘ring.</translation>
 <translation id="1375321115329958930">Saqlab olingan parollar</translation>
 <translation id="137651782282853227">Saqlangan manzillar shu yerda turadi</translation>
@@ -2152,7 +2153,6 @@
 <translation id="3429271624041785769">Veb kontent tilllari</translation>
 <translation id="3429275422858276529">Bu sahifani xatcho‘plarga qo‘shib keyinchalik oson topishingiz mumkin</translation>
 <translation id="3432227430032737297">Barcha ko‘rsatilganlarni o‘chirish</translation>
-<translation id="3432757130254800023">Mahalliy tarmoqdagi ekranlarga audio va video uzatish</translation>
 <translation id="3432762828853624962">Worker’ning ajratiladigan obyektlari</translation>
 <translation id="3433621910545056227">Ana xolos! Tizim qurilma atributlarini o‘rnatish vaqtida qulflay olmadi.</translation>
 <translation id="3434272557872943250">Agar farzandingiz uchun Veb va ilovalardagi kengaytirilgan faoliyat tarixi yoqilgan boʻlsa, bu maʼlumotlar uning Google hisobiga saqlanadi. Bu parametr va uni sozlash haqidagi batafsil axborotni families.google.com sahifasidan olish mumkin.</translation>
@@ -3443,6 +3443,7 @@
 <translation id="490051679772058907"><ph name="REFRESH_RATE" /> Hz – maydalangan</translation>
 <translation id="4902546322522096650">Tarmoq: <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, Nomi: <ph name="NETWORK_NAME" />, Himoya: <ph name="SECURITY_STATUS" />, Signal darajasi: <ph name="SIGNAL_STRENGTH" />%, Ulanish</translation>
 <translation id="49027928311173603">Serverdan yaroqsiz siyosat yuklab olindi: <ph name="VALIDATION_ERROR" /></translation>
+<translation id="4904061654709986277">Profil kiritish</translation>
 <translation id="4906490889887219338">Tarmoqdagi fayl ulashuvlarini sozlash yoki boshqarish. <ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation>
 <translation id="4906580650526544301">Tarmoq: <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, Telefon nomi: <ph name="PHONE_NAME" />, <ph name="PROVIDER_NAME" />, Ulanish: <ph name="CONNECTION_STATUS" />, Signal darajasi: <ph name="SIGNAL_STRENGTH" />%, Telefon quvvati: <ph name="BATTERY_STATUS" />%, Batafsil</translation>
 <translation id="4907161631261076876">Bu faylni yuklab olish tavsiya etilmaydi, chunki u zararli bo‘lishi mumkin.</translation>
@@ -3565,6 +3566,7 @@
 <translation id="5068918910148307423">Yaqinda yopilgan saytlarga ma’lumot yuborish va qabul qilish taqiqlansin</translation>
 <translation id="5068919226082848014">Pitsa</translation>
 <translation id="5070773577685395116">Xabar kelmadimi?</translation>
+<translation id="5071892329440114717">Standart himoya tafsilotlarini chiqarish</translation>
 <translation id="5072052264945641674">Kursor hajmini moslash</translation>
 <translation id="5072836811783999860">Boshqariladigan xatcho‘plarni ko‘rsatish</translation>
 <translation id="5073956501367595100">{0,plural,offset:2 =1{<ph name="FILE1" />}=2{<ph name="FILE1" />, <ph name="FILE2" />}other{<ph name="FILE1" />, <ph name="FILE2" />, va yana # ta}}</translation>
@@ -4716,6 +4718,7 @@
 <translation id="6412673304250309937">URL manzillar Chrome bilgan zararli saytlar roʻyxati orqali tekshiriladi. Agar sayt parolingizni oʻgirlashga urinsa yoki zararli fayl yuklab olsangiz, Chrome ham URL manzillar kabi sahifa elementlarini Saytlarni xavfsiz kezish tizimiga yuborishi mumkin.</translation>
 <translation id="6412931879992742813">Yangi inkognito oynasi</translation>
 <translation id="641469293210305670">Yangilanish va ilovalarni oʻrnatish</translation>
+<translation id="6414878884710400018">Tizim sozlamalarini ochish</translation>
 <translation id="6414888972213066896">Bu saytni ochish uchun ruxsat so‘rovi ota-onangizga jo‘natildi</translation>
 <translation id="6415900369006735853">Internetga telefon orqali ulaning</translation>
 <translation id="6416743254476733475">Kompyuteringizda ruxsat bering yoki taqiqlang.</translation>
@@ -4782,6 +4785,7 @@
 <translation id="648927581764831596">Mavjud emas</translation>
 <translation id="6490471652906364588">USB-C qurilma (o‘ng port)</translation>
 <translation id="6491376743066338510">Tekshiruvda xatolik yuz berdi</translation>
+<translation id="6494327278868541139">Kengaytirilgan himoya tafsilotlarini chiqarish</translation>
 <translation id="6494445798847293442">Sertifikatlashtirish markazi emas</translation>
 <translation id="6494974875566443634">Moslashtirish</translation>
 <translation id="6495925982925244349">Tarmoq: <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, Nomi: <ph name="NETWORK_NAME" />, Himoyasi: <ph name="SECURITY_STATUS" />, Ulanish: <ph name="CONNECTION_STATUS" />, Signal darajasi: <ph name="SIGNAL_STRENGTH" />%, Administrator boshqaruvida, Batafsil</translation>
@@ -4876,7 +4880,7 @@
 <translation id="6605847144724004692">Haligacha hech kim baho bermagan.</translation>
 <translation id="6607831829715835317">Qo‘shimcha &amp;asboblar</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> <ph name="DOMAIN" /> tomonidan boshqariladi. Ota-ona nazoratini boshqa Google hisobidan boshqarishni istasangiz, sozlangandan keyin hisobdan chiqing va kirish oynasida “Foydalanuvchini kiritish” bandini tanlang.</translation>
-<translation id="6609478180749378879">Inkognito rejimini tark etganingizdan keyin sayt maʼlumotlari shu qurilmada saqlanadi. Bu saytga keyinchalik shu qurilma orqali yana kira olasiz.</translation>
+<translation id="6609478180749378879">Inkognito rejimini tark etganingizdan keyin kirish maʼlumotlari shu qurilmada saqlanadi. Bu saytga keyinchalik shu qurilma orqali yana kira olasiz.</translation>
 <translation id="6611972847767394631">Varaqlarni bu yerdan toping</translation>
 <translation id="6612358246767739896">Himoyalangan kontent</translation>
 <translation id="6615455863669487791">Ko‘rsatish</translation>
@@ -5318,6 +5322,7 @@
 <translation id="7108933416628942903">Hozir qulflash</translation>
 <translation id="7109543803214225826">Yorliq olib tashlandi</translation>
 <translation id="7110644433780444336">{NUM_TABS,plural, =1{Varaqni guruhga kiritish}other{Varaqlarni guruhga kiritish}}</translation>
+<translation id="7111822978084196600">Bu oynaga nom bering</translation>
 <translation id="7113502843173351041">Email manzilingizni bilish</translation>
 <translation id="7114054701490058191">Parollar bir-biriga mos kelmadi</translation>
 <translation id="7114648273807173152">Google hisobingizda Smart Lock himoyasini yoqish uchun Sozlamalar &gt; Ulangan qurilmalar &gt; Telefoningiz &gt; Smart Lock sahifasini oching.</translation>
@@ -5579,6 +5584,7 @@
 <translation id="7421925624202799674">&amp;Sahifa kodini ko‘rish</translation>
 <translation id="7422192691352527311">Sozlamalar...</translation>
 <translation id="7423098979219808738">Avval so‘ralsin</translation>
+<translation id="7423425410216218516">Koʻrinuvchanlik <ph name="MINUTES" /> daqiqaga yoqildi</translation>
 <translation id="7423513079490750513">Olib tashlash: <ph name="INPUT_METHOD_NAME" /></translation>
 <translation id="7423807071740419372"><ph name="APP_NAME" /> ishga tushishi uchun ruxsat berish kerak</translation>
 <translation id="7427348830195639090">Orqa fon sahifasi: <ph name="BACKGROUND_PAGE_URL" /></translation>
@@ -6241,7 +6247,6 @@
 <translation id="8147900440966275470"><ph name="NUM" /> ta varaqda topildi</translation>
 <translation id="8148760431881541277">Kirishni cheklash</translation>
 <translation id="8150259863378108853">Lacros – tajribaviy brauzer. Muammolar yuz bersa, Yordam &gt; “Muammo haqida xabar berish” orqali murojaat qiling.</translation>
-<translation id="8151579390896831136">Profilingiz va uning nomini oʻzingizga moslang</translation>
 <translation id="8151638057146502721">Sozlash</translation>
 <translation id="8154790740888707867">Fayl mavjud emas</translation>
 <translation id="815491593104042026">Havfsizligi himoyalanmagan URL mazil (<ph name="BLOCKED_URL" />) topilganligi sababli, tasdiqlash tekshiruvini bajarib bo‘lmadi. Administrator bilan bog‘laning.</translation>
@@ -6432,7 +6437,6 @@
 <translation id="8378714024927312812">Tashkilotingiz tomonidan boshqariladi</translation>
 <translation id="8379878387931047019">Bu qurilmada sayt so‘ragan kalit turi mavjud emas</translation>
 <translation id="8379991678458444070">Bu varaq bukmarkka olinsa, keyinchalik oson topiladi</translation>
-<translation id="8380266723152870797">Oyna nomi</translation>
 <translation id="8382913212082956454">&amp;E-pochta manzilini nusxalash</translation>
 <translation id="8386091599636877289">Bu parametr topilmadi.</translation>
 <translation id="8386903983509584791">Tarmoq tekshirildi</translation>
@@ -6857,7 +6861,6 @@
 <translation id="8859402192569844210">Xizmat shartlari yuklanmadi</translation>
 <translation id="8859662783913000679">Ota-ona hisobi</translation>
 <translation id="8862003515646449717">Tezkor brauzerdan foydalaning</translation>
-<translation id="8863140399813345099">Qurilmangiz ochiqligi sozlamalarida ekraningiz ochiq ekanligida sizga kimlar fayl yuborishi mumkinligi boshqariladi</translation>
 <translation id="8863753581171631212">Havolani yangi <ph name="APP" /> dasturida ochish</translation>
 <translation id="8864055848767439877"><ph name="TAB_NAME" /> sahifasi <ph name="APP_NAME" /> ilovasiga ulashilmoqda</translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> hisobi bu qurilmadan olib tashlandi</translation>
@@ -6911,7 +6914,6 @@
 <translation id="8912810933860534797">Avtomatik skanerlashni yoqish</translation>
 <translation id="8915370057835397490">Taklif yuklanmoqda</translation>
 <translation id="8916476537757519021">Inkognito rejimidagi quyi freym: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Oynani nomlang</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> (<ph name="GIVEN_NAME" />)</translation>
 <translation id="8923880975836399332">Toʻq zangori</translation>
 <translation id="8925458182817574960">&amp;Sozlamalar</translation>
@@ -6966,6 +6968,7 @@
 <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – ishdan chiqdi</translation>
 <translation id="8981825781894055334">Qogʻoz kam qolgan</translation>
 <translation id="8983632908660087688"><ph name="ORIGIN" /> sayti <ph name="FILENAME" /> faylini tahrirlay oladi</translation>
+<translation id="8984694057134206124"><ph name="MINUTES" /> daqiqa hammaga koʻrinadi. <ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation>
 <translation id="8985264973231822211"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> kun oldin onlayn edi</translation>
 <translation id="8986362086234534611">Olib tashlash</translation>
 <translation id="8986494364107987395">Foydalanish statistikasi va ishdan chiqishlar hisobotini avtomatik ravishda Google‘ga jo‘natish</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 9b8a6e7d..e4fff62 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -2154,7 +2154,6 @@
 <translation id="3429271624041785769">Ngôn ngữ dùng cho nội dung web</translation>
 <translation id="3429275422858276529">Đánh dấu trang này để dễ dàng tìm kiếm về sau</translation>
 <translation id="3432227430032737297">Xóa tất cả cookie hiển thị</translation>
-<translation id="3432757130254800023">Gửi âm thanh và video tới màn hình trên mạng cục bộ</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">Rất tiếc!  Hệ thống không thể thiết lập khóa thuộc tính thời gian cài đặt thiết bị.</translation>
 <translation id="3434272557872943250">Nếu bạn bật tùy chọn cài đặt Hoạt động bổ sung trên web và ứng dụng cho con mình, thì dữ liệu này có thể được lưu vào Tài khoản Google của con. Hãy tìm hiểu thêm về các tùy chọn cài đặt này và cách điều chỉnh tại families.google.com.</translation>
@@ -6246,7 +6245,6 @@
 <translation id="8147900440966275470">Đã tìm thấy <ph name="NUM" /> thẻ</translation>
 <translation id="8148760431881541277">Giới hạn khả năng đăng nhập</translation>
 <translation id="8150259863378108853">Lacros là một trình duyệt thử nghiệm. Vui lòng báo cáo mọi sự cố bằng cách chuyển đến mục Trợ giúp &gt; "Báo cáo sự cố..."</translation>
-<translation id="8151579390896831136">Tùy chỉnh hồ sơ của bạn, bao gồm cả tên hồ sơ</translation>
 <translation id="8151638057146502721">Định cấu hình</translation>
 <translation id="8154790740888707867">Không có tệp nào</translation>
 <translation id="815491593104042026">Rất tiếc! Xác thực không thành công do được định cấu hình sử dụng URL không an toàn (<ph name="BLOCKED_URL" />). Hãy liên hệ với quản trị viên của bạn.</translation>
@@ -6437,7 +6435,6 @@
 <translation id="8378714024927312812">Do tổ chức của bạn quản lý</translation>
 <translation id="8379878387931047019">Thiết bị này không hỗ trợ loại khóa bảo mật mà trang web này yêu cầu</translation>
 <translation id="8379991678458444070">Đánh dấu thẻ này để quay lại đây nhanh chóng</translation>
-<translation id="8380266723152870797">Tên cửa sổ</translation>
 <translation id="8382913212082956454">Sao chép địa chỉ &amp;email</translation>
 <translation id="8386091599636877289">Không tìm thấy chính sách.</translation>
 <translation id="8386903983509584791">Đã quét xong</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Không thể tải Điều khoản dịch vụ</translation>
 <translation id="8859662783913000679">Tài khoản của cha mẹ</translation>
 <translation id="8862003515646449717">Chuyển sang một trình duyệt nhanh</translation>
-<translation id="8863140399813345099">Phạm vi hiển thị của thiết bị sẽ quyết định người có thể chia sẻ với bạn khi màn hình của bạn đang mở khóa</translation>
 <translation id="8863753581171631212">Mở liên kết trong <ph name="APP" /> mới</translation>
 <translation id="8864055848767439877">Đang chia sẻ <ph name="TAB_NAME" /> với <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">Đã xóa <ph name="EMAIL" /> khỏi thiết bị này</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Bật tính năng tự động quét</translation>
 <translation id="8915370057835397490">Đang tải đề xuất</translation>
 <translation id="8916476537757519021">Khung ẩn danh phụ: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Hãy đặt tên cho cửa sổ</translation>
 <translation id="8918637186205009138"><ph name="DEVICE_TYPE" /> của <ph name="GIVEN_NAME" /></translation>
 <translation id="8923880975836399332">Xanh két đậm</translation>
 <translation id="8925458182817574960">&amp;Cài đặt</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index b18f897e..35344f2 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -218,6 +218,7 @@
 <translation id="1234808891666923653">Service Workers</translation>
 <translation id="1235458158152011030">已知网络</translation>
 <translation id="123578888592755962">磁盘已满</translation>
+<translation id="1235924639474699896">{COUNT,plural, =1{文字}other{# 段文字}}</translation>
 <translation id="1239594683407221485">在“文件”应用中浏览此设备上的内容。</translation>
 <translation id="124116460088058876">更多语言</translation>
 <translation id="1241753985463165747">调用时可读取和更改您在当前网站上的所有数据</translation>
@@ -440,6 +441,7 @@
 <translation id="1486096554574027028">搜索密码</translation>
 <translation id="1487335504823219454">开启 - 自定义设置</translation>
 <translation id="1489664337021920575">选择其他选项</translation>
+<translation id="1490491397986065675">您的管理员说“<ph name="CUSTOM_MESSAGE" />”。</translation>
 <translation id="1492417797159476138">您已为此网站保存该用户名</translation>
 <translation id="1493892686965953381">正在等待<ph name="LOAD_STATE_PARAMETER" />...</translation>
 <translation id="1495677929897281669">返回到标签页</translation>
@@ -808,6 +810,7 @@
 <translation id="1879000426787380528">登录身份</translation>
 <translation id="1880905663253319515">要删除证书“<ph name="CERTIFICATE_NAME" />”吗?</translation>
 <translation id="1881445033931614352">键盘布局</translation>
+<translation id="1881577802939775675">{COUNT,plural, =1{内容}other{# 项内容}}</translation>
 <translation id="1884013283844450420">第 <ph name="NETWORK_INDEX" /> 个网络(共 <ph name="NETWORK_COUNT" /> 个),<ph name="NETWORK_NAME" />,连接</translation>
 <translation id="1884340228047885921">当前的公开范围设置是“部分联系人”</translation>
 <translation id="1884705339276589024">调整 Linux 磁盘大小</translation>
@@ -986,6 +989,7 @@
 <translation id="2099686503067610784">要删除服务器证书“<ph name="CERTIFICATE_NAME" />”吗?</translation>
 <translation id="2100273922101894616">自动登录</translation>
 <translation id="2101225219012730419">版本:</translation>
+<translation id="2108349519800154983">{COUNT,plural, =1{电话号码}other{# 个电话号码}}</translation>
 <translation id="211144231511833662">清除类型</translation>
 <translation id="2111670510994270194">在右侧新增标签页</translation>
 <translation id="21133533946938348">固定标签页</translation>
@@ -1038,6 +1042,7 @@
 <translation id="2154710561487035718">复制网址</translation>
 <translation id="2155772377859296191">有效分辨率:<ph name="WIDTH" /> x <ph name="HEIGHT" /></translation>
 <translation id="2156294658807918600">Service Worker:<ph name="SCRIPT_URL" /></translation>
+<translation id="2156877321344104010">再次运行安全检查</translation>
 <translation id="2157474325782140681">要获得更多功能,请使用由戴尔专为这款 Chromebook 设计的基座。</translation>
 <translation id="215753907730220065">退出全屏模式</translation>
 <translation id="2157875535253991059">此网页现处于全屏模式。</translation>
@@ -1281,6 +1286,7 @@
 <translation id="2435457462613246316">显示密码</translation>
 <translation id="2435579801172349831">在无痕式窗口中打开全部(<ph name="URL_COUNT" /> 个)网址</translation>
 <translation id="2436186046335138073">允许<ph name="HANDLER_HOSTNAME" />打开所有<ph name="PROTOCOL" />链接?</translation>
+<translation id="2440366609912234507">{COUNT,plural, =1{应用}other{# 个应用}}</translation>
 <translation id="2440604414813129000">查看源代码(&amp;O)</translation>
 <translation id="244231003699905658">地址无效。请检查该地址,然后重试。</translation>
 <translation id="2442916515643169563">文字阴影</translation>
@@ -1429,6 +1435,7 @@
 <translation id="2604255671529671813">网络连接错误</translation>
 <translation id="2606246518223360146">关联数据</translation>
 <translation id="2606454609872547359">否,不启用 ChromeVox 并继续操作</translation>
+<translation id="2606568927909309675">自动为英文版音频和视频创建字幕。音频和字幕绝不会从设备中泄露出去。</translation>
 <translation id="2607101320794533334">证书持有者的公共密钥信息</translation>
 <translation id="2609896558069604090">创建快捷方式...</translation>
 <translation id="2609980095400624569">无法建立连接</translation>
@@ -1693,6 +1700,7 @@
 <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation>
 <translation id="2889064240420137087">链接打开方式...</translation>
 <translation id="2889925978073739256">继续拦截未经过沙盒屏蔽的插件</translation>
+<translation id="2891922230654533301">使用您的设备登录 <ph name="APP_NAME" />?</translation>
 <translation id="2893168226686371498">默认浏览器</translation>
 <translation id="2894757982205307093">在群组内添加新标签页</translation>
 <translation id="289644616180464099">SIM 卡已被锁定</translation>
@@ -1978,6 +1986,7 @@
 <translation id="3225319735946384299">代码签名</translation>
 <translation id="3227137524299004712">麦克风</translation>
 <translation id="3233271424239923319">备份 Linux 应用和文件</translation>
+<translation id="3238192140106069382">正在连接并验证</translation>
 <translation id="3239373508713281971">“<ph name="APP_NAME" />”的使用时限已被移除</translation>
 <translation id="3241680850019875542">选择要打包的扩展程序的根目录。要更新某个扩展程序,还需选择要再次使用的私有密钥文件。</translation>
 <translation id="3244294424315804309">继续保持静音</translation>
@@ -2004,6 +2013,7 @@
 <translation id="3269069891205016797">在您退出后,系统会自动从此设备上移除您的信息。</translation>
 <translation id="3269093882174072735">加载图片</translation>
 <translation id="3269612321104318480">浅蓝绿色和白色</translation>
+<translation id="3269689705184377744">{COUNT,plural, =1{文件}other{# 个文件}}</translation>
 <translation id="326999365752735949">正在下载diff</translation>
 <translation id="3270965368676314374">读取、更改和删除您计算机上的照片、音乐和其他媒体</translation>
 <translation id="327147043223061465">查看所有 Cookie 和网站数据</translation>
@@ -2140,7 +2150,6 @@
 <translation id="3429271624041785769">网页内容语言</translation>
 <translation id="3429275422858276529">为此网页添加书签,以便日后查找</translation>
 <translation id="3432227430032737297">移除显示的所有 Cookie</translation>
-<translation id="3432757130254800023">向本地网络上的显示屏发送音频和视频</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">糟糕!系统无法建立设备安装时间属性锁定。</translation>
 <translation id="3434272557872943250">如果您已为孩子开启“其他网络与应用活动记录”设置,这些数据可能会被保存到其 Google 帐号中。您可在 families.google.com 上详细了解这些设置以及如何调整它们。</translation>
@@ -2299,6 +2308,7 @@
 <translation id="3600792891314830896">将播放声音的网站静音</translation>
 <translation id="360180734785106144">即时提供可用的新功能</translation>
 <translation id="3602290021589620013">预览</translation>
+<translation id="3602870520245633055">打印和扫描</translation>
 <translation id="3603622770190368340">获取网络证书</translation>
 <translation id="3604193429970465812">辅助帐号</translation>
 <translation id="3604713164406837697">更换壁纸</translation>
@@ -2314,6 +2324,7 @@
 <translation id="3615579745882581859">正在扫描“<ph name="FILE_NAME" />”。</translation>
 <translation id="3616741288025931835">清除浏览数据(&amp;C)...</translation>
 <translation id="3617891479562106823">背景不可用。请稍后重试。</translation>
+<translation id="3618800144880386250">{COUNT,plural, =1{视频}other{# 个视频}}</translation>
 <translation id="3619115746895587757">卡布奇诺</translation>
 <translation id="362333465072914957">正在等待 CA 颁发证书</translation>
 <translation id="3624567683873126087">解锁设备并登录 Google 帐号</translation>
@@ -2722,6 +2733,7 @@
 <translation id="4047726037116394521">转到主屏幕</translation>
 <translation id="4049783682480068824">{COUNT,plural, =1{有 # 个联系人不可用。如需使用“附近分享”功能与这个联系人分享内容,请将其 Google 帐号所关联的电子邮件地址添加到您的通讯录中。}other{有 # 个联系人不可用。如需使用“附近分享”功能与这些联系人分享内容,请将其 Google 帐号所关联的电子邮件地址添加到您的通讯录中。}}</translation>
 <translation id="4050225813016893843">身份验证方法</translation>
+<translation id="4050534976465737778">请确保这两部设备均已解锁、相距很近且均已开启蓝牙。如果您的分享对象是一部不在您通讯录中的 Chromebook,请确保已为它开启“附近分享”的高可见度模式(先打开状态区,然后开启“附近分享”的高可见度模式)。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="4052120076834320548">最小</translation>
 <translation id="4054070260844648638">对所有人可见</translation>
 <translation id="4056908315660577142">您已达到您家长为 Chrome 应用“<ph name="APP_NAME" />”设定的使用时限。明天可以使用 <ph name="TIME_LIMIT" />。</translation>
@@ -2956,6 +2968,7 @@
 <translation id="4364327530094270451">甜瓜</translation>
 <translation id="4364567974334641491"><ph name="APP_NAME" /> 正在共享窗口。</translation>
 <translation id="4364830672918311045">显示通知</translation>
+<translation id="4366138410738374926">已开始打印</translation>
 <translation id="437004882363131692">接收 <ph name="DEVICE_TYPE" /> 相关提示、优惠和动态,并分享反馈。可随时退订。</translation>
 <translation id="4370425812909262207">购物车已隐藏。当您做出更改时,它们会再次现身。</translation>
 <translation id="4370975561335139969">您输入的电子邮件地址和密码不匹配。</translation>
@@ -3143,6 +3156,7 @@
 <translation id="4568025708905928793">正在申请安全密钥</translation>
 <translation id="4568213207643490790">抱歉,您不能在此设备上登录 Google 帐号。</translation>
 <translation id="4569747168316751899">空闲时</translation>
+<translation id="4569830245132310845">{COUNT,plural, =1{地址}other{# 个地址}}</translation>
 <translation id="4570387585180509432">地址、手机号码,等等</translation>
 <translation id="4572659312570518089">连接到“<ph name="DEVICE_NAME" />”时取消了身份验证。</translation>
 <translation id="4572779512957829735">为您的安全密钥输入 PIN 码</translation>
@@ -3202,6 +3216,7 @@
 <translation id="4635444580397524003">已成功恢复 Linux 备份。</translation>
 <translation id="4636930964841734540">信息</translation>
 <translation id="4637083375689622795">更多操作,<ph name="EMAIL" /></translation>
+<translation id="4637252186848840278">{COUNT,plural, =1{文字}other{# 段文字}}</translation>
 <translation id="4638930039313743000">启用 ADB 调试</translation>
 <translation id="4641539339823703554">Chrome无法设置系统时间。请检查下面的时间,并在必要时进行更正。</translation>
 <translation id="4642769377300286600">正在安装移动网络配置文件,第 <ph name="NETWORK_INDEX" /> 个网络(共 <ph name="NETWORK_COUNT" /> 个),网络名称为“<ph name="NETWORK_NAME" />”,网络服务提供商为“<ph name="NETWORK_PROVIDER_NAME" />”</translation>
@@ -3217,10 +3232,12 @@
 <translation id="4651484272688821107">无法加载包含演示模式资源的在线组件。</translation>
 <translation id="4652935475563630866">重新启动 Parallels Desktop 后,对摄像头设置做出的更改才能生效。请重新启动 Parallels Desktop 以继续。</translation>
 <translation id="4653405415038586100">配置 Linux 时出错</translation>
+<translation id="4654236001025007561">与附近的 Chromebook 和 Android 设备分享文件</translation>
 <translation id="4657914796247705218">TrackPoint 速度</translation>
 <translation id="465878909996028221">浏览器重定向仅支持 http、https 和文件协议。</translation>
 <translation id="4659077111144409915">主帐号</translation>
 <translation id="4659126640776004816">当您登录自己的 Google 帐号后,系统即会启用此功能。</translation>
+<translation id="4660465405448977105">{COUNT,plural, =1{图片}other{# 张图片}}</translation>
 <translation id="4660476621274971848">预期版本是“<ph name="EXPECTED_VERSION" />”,但实际版本是“<ph name="NEW_ID" />”</translation>
 <translation id="4660540330091848931">正在调整大小</translation>
 <translation id="4661407454952063730">应用数据可以是应用根据开发者设置而保存的任何数据,包括通讯录、邮件/消息、照片等数据。</translation>
@@ -3321,6 +3338,7 @@
 <translation id="4794810983896241342">更新由<ph name="BEGIN_LINK" />您的管理员<ph name="END_LINK" />管理</translation>
 <translation id="479536056609751218">网页,仅 HTML</translation>
 <translation id="4798236378408895261">附加<ph name="BEGIN_LINK" />蓝牙日志<ph name="END_LINK" />(Google 内部使用)</translation>
+<translation id="4798543057539040565">{COUNT,plural, =1{内容}other{# 项内容}}</translation>
 <translation id="4801448226354548035">隐藏帐号</translation>
 <translation id="4801512016965057443">允许移动数据漫游</translation>
 <translation id="4804818685124855865">断开连接</translation>
@@ -3751,6 +3769,7 @@
 <translation id="531118851858162334">此商品是系统基于您以前使用 Google 服务进行的活动向您显示的。您可在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上查看/删除自己的数据或更改设置。</translation>
 <translation id="5311304534597152726">正在使用以下身份登录:</translation>
 <translation id="5311565231560644461">不允许网站使用您的虚拟实境设备和数据</translation>
+<translation id="5312876166662946389">{COUNT,plural, =1{图片}other{# 张图片}}</translation>
 <translation id="5314381603623123224">Chrome 的《服务条款》将于 3 月 31 日变更</translation>
 <translation id="5315738755890845852">有多余的右大括号:<ph name="ERROR_LINE" /></translation>
 <translation id="5317780077021120954">保存</translation>
@@ -3816,6 +3835,7 @@
 <translation id="5390677308841849479">深红色和橙色</translation>
 <translation id="5390743329570580756">为何发送</translation>
 <translation id="5392192690789334093">允许发送通知</translation>
+<translation id="5393761864111565424">{COUNT,plural, =1{链接}other{# 个链接}}</translation>
 <translation id="5397794290049113714">您</translation>
 <translation id="5398497406011404839">隐藏的书签</translation>
 <translation id="5398572795982417028">页面引用超出范围,上限为 <ph name="MAXIMUM_PAGE" /></translation>
@@ -4343,6 +4363,7 @@
 <translation id="6011074160056912900">以太网</translation>
 <translation id="6011193465932186973">指纹</translation>
 <translation id="6011449291337289699">清除网站数据</translation>
+<translation id="6013027779243312217">为您的音频和视频生成字幕</translation>
 <translation id="6015796118275082299">年</translation>
 <translation id="6016178549409952427">转到第 <ph name="CURRENT_ELEMENT" /> 项附加内容,共 <ph name="TOTAL_ELEMENTS" /> 项</translation>
 <translation id="6016551720757758985">确认 Powerwash 是否将设备还原到之前的版本</translation>
@@ -4852,6 +4873,7 @@
 <translation id="6605847144724004692">还没有任何用户给出评分。</translation>
 <translation id="6607831829715835317">更多工具(&amp;L)</translation>
 <translation id="6607890859198268021"><ph name="USER_EMAIL" /> 已由 <ph name="DOMAIN" /> 管理。若要通过另一 Google 帐号使用家长控制功能,请在完成设置后退出登录,然后在登录屏幕上选择“添加用户”。</translation>
+<translation id="6609478180749378879">当您退出无痕模式后,登录数据会存储在此设备中。日后您将能够使用此设备重新登录该网站。</translation>
 <translation id="6611972847767394631">您可在此处找到自己的标签页</translation>
 <translation id="6612358246767739896">受保护的内容</translation>
 <translation id="6615455863669487791">演示一下</translation>
@@ -4870,6 +4892,7 @@
 <translation id="6628328486509726751">上传时间:<ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630043285902923878">正在查找 USB 设备…</translation>
 <translation id="6630752851777525409"><ph name="EXTENSION_NAME" />希望获得某个证书的永久访问权限,以便代表您进行自我身份验证。</translation>
+<translation id="6635362468090274700">任何人都无法与您分享内容,除非您将自己设为可见。<ph name="BR" /><ph name="BR" />若要将自己设为暂时可见,请打开状态区,然后开启“附近分享”的高可见度模式。</translation>
 <translation id="6635944431854494329">所有者可以通过“设置”&gt;“高级”&gt;“自动向 Google 发送诊断数据和使用情况数据”来控制这项功能。</translation>
 <translation id="6635956300022133031">选择和自定义文字转语音的语音</translation>
 <translation id="6636588250634969791">插入 SIM 卡才能继续操作</translation>
@@ -5021,6 +5044,7 @@
 <translation id="6811332638216701903">DHCP 主机名</translation>
 <translation id="6812349420832218321">不能以根用户身份运行 <ph name="PRODUCT_NAME" />。</translation>
 <translation id="6812841287760418429">保留更改</translation>
+<translation id="681584224457905309">{COUNT,plural, =1{文件}other{# 个文件}}</translation>
 <translation id="6817174620439930047">当网站想使用系统专有消息访问 MIDI 设备时询问您(推荐)</translation>
 <translation id="6818198425579322765">要翻译的网页语言</translation>
 <translation id="6818802132960437751">内置病毒防护功能</translation>
@@ -5041,6 +5065,7 @@
 <translation id="6835762382653651563">请连接到互联网,以便更新您的<ph name="DEVICE_TYPE" />。</translation>
 <translation id="6838034009068684089">在网站想在您的屏幕上打开和放置窗口时询问您(推荐)</translation>
 <translation id="6838694093138907871">激活码无效,请重试。</translation>
+<translation id="6838860780238890144">{COUNT,plural, =1{电话号码}other{# 个电话号码}}</translation>
 <translation id="6839225236531462745">证书删除错误</translation>
 <translation id="6839916869147598086">登录发生变化</translation>
 <translation id="6840155290835956714">发送前先询问</translation>
@@ -5146,6 +5171,7 @@
 <translation id="6955446738988643816">审查弹出内容</translation>
 <translation id="6955535239952325894">在受管理的浏览器上,此设置已被停用</translation>
 <translation id="6957044667612803194">此安全密钥不支持 PIN 码</translation>
+<translation id="6957914043905853560">{COUNT,plural, =1{链接}other{# 个链接}}</translation>
 <translation id="6960507406838246615">需要更新 Linux</translation>
 <translation id="696103774840402661">这部 <ph name="DEVICE_TYPE" /> 上所有用户的全部文件和本地数据都已被永久删除。</translation>
 <translation id="6964390816189577014">英雄</translation>
@@ -6055,6 +6081,7 @@
 <translation id="797394244396603170">请选择您要与哪部设备分享文件</translation>
 <translation id="7973962044839454485">用户名或密码不正确,导致 PPP 身份验证失败</translation>
 <translation id="7974566588408714340">使用“<ph name="EXTENSIONNAME" />”重试</translation>
+<translation id="7974713334845253259">默认颜色</translation>
 <translation id="7974936243149753750">过扫描</translation>
 <translation id="7975504106303186033">您必须将这部 Chrome 教育版设备注册到一个教育版帐号。若要注册新帐号,请访问 g.co/workspace/edusignup。</translation>
 <translation id="7978412674231730200">私有密钥</translation>
@@ -6212,7 +6239,6 @@
 <translation id="8147900440966275470">找到了 <ph name="NUM" /> 个标签页</translation>
 <translation id="8148760431881541277">限制登录</translation>
 <translation id="8150259863378108853">Lacros 是一个实验性浏览器。若要报告问题,请使用“帮助”&gt;“报告问题…”</translation>
-<translation id="8151579390896831136">自定义您的个人资料,包括其名称</translation>
 <translation id="8151638057146502721">配置</translation>
 <translation id="8154790740888707867">未发现文件</translation>
 <translation id="815491593104042026">糟糕!身份验证失败,因为它被配置为使用不安全的网址(<ph name="BLOCKED_URL" />)。请联系您的管理员。</translation>
@@ -6220,6 +6246,7 @@
 <translation id="8157704005178149728">正在设置监管功能</translation>
 <translation id="8158117992543756526">自 <ph name="MONTH_AND_YEAR" />起,此设备已无法再自动获取软件更新和安全更新。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="816055135686411707">设置证书信任时出错</translation>
+<translation id="8160775796528709999">只需在设置中启用“实时字幕”功能,即可为您的音频和视频生成字幕</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />,<ph name="TIME_REMAINING" /></translation>
 <translation id="8161293209665121583">使用阅读器模式显示网页</translation>
 <translation id="8162984717805647492">{NUM_TABS,plural, =1{将标签页移至新窗口}other{将标签页移至新窗口}}</translation>
@@ -6344,6 +6371,7 @@
 <translation id="8300011035382349091">为此标签页修改书签</translation>
 <translation id="8300374739238450534">深夜蓝</translation>
 <translation id="8300849813060516376">OTASP 失败</translation>
+<translation id="8303616404642252802">{COUNT,plural, =1{地址}other{# 个地址}}</translation>
 <translation id="8304383784961451596">您无权使用此设备。请与管理员联系以获取登录权限,或者使用受 Family Link 监管的 Google 帐号登录。</translation>
 <translation id="8308179586020895837">当 <ph name="HOST" /> 想要使用摄像头时询问我</translation>
 <translation id="830868413617744215">测试版</translation>
@@ -6401,7 +6429,6 @@
 <translation id="8378714024927312812">由贵单位管理</translation>
 <translation id="8379878387931047019">此设备不支持该网站要求使用的安全密钥的类型</translation>
 <translation id="8379991678458444070">只需为此标签页添加书签,便可在需要时快速返回到此处</translation>
-<translation id="8380266723152870797">窗口名称</translation>
 <translation id="8382913212082956454">复制电子邮件地址(&amp;E)</translation>
 <translation id="8386091599636877289">找不到此政策。</translation>
 <translation id="8386903983509584791">已完成扫描</translation>
@@ -6642,6 +6669,7 @@
 <translation id="867085395664725367">服务器发生了暂时性错误。</translation>
 <translation id="8673026256276578048">搜索网页...</translation>
 <translation id="8673383193459449849">服务器出现问题</translation>
+<translation id="8676152597179121671">{COUNT,plural, =1{视频}other{# 个视频}}</translation>
 <translation id="8676374126336081632">清除输入的内容</translation>
 <translation id="8676770494376880701">已连接低功率充电器</translation>
 <translation id="8677212948402625567">全部收起...</translation>
@@ -6825,7 +6853,6 @@
 <translation id="8859402192569844210">无法加载《服务条款》</translation>
 <translation id="8859662783913000679">家长帐号</translation>
 <translation id="8862003515646449717">改用极速浏览器</translation>
-<translation id="8863140399813345099">您可指定设备的公开范围,从而控制哪些人员能在您的屏幕处于解锁状态时与您分享内容</translation>
 <translation id="8863753581171631212">在<ph name="APP" />的新窗口中打开链接</translation>
 <translation id="8864055848767439877">正在将“<ph name="TAB_NAME" />”分享到 <ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512"><ph name="EMAIL" /> 已从此设备中移除</translation>
@@ -6879,7 +6906,6 @@
 <translation id="8912810933860534797">启用自动扫描</translation>
 <translation id="8915370057835397490">正在加载建议</translation>
 <translation id="8916476537757519021">隐身辅助框架:<ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">设置窗口名称</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />的 <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">深蓝绿色</translation>
 <translation id="8925458182817574960">设置(&amp;S)</translation>
@@ -7067,6 +7093,7 @@
 <translation id="9128870381267983090">连接到网络</translation>
 <translation id="9130015405878219958">输入的模式无效。</translation>
 <translation id="9131487537093447019">向蓝牙设备发送消息,以及接收来自蓝牙设备的消息。</translation>
+<translation id="9134119143784876218">自动为英文版音频和视频创建字幕(目前只能在 Chrome 浏览器中这样做)。音频和字幕绝不会从设备中泄露出去。</translation>
 <translation id="9137013805542155359">显示原始网页</translation>
 <translation id="9137157311132182254">首选搜索引擎</translation>
 <translation id="9137248913990643158">在使用此应用前,请先启动并登录 Chrome。</translation>
@@ -7114,6 +7141,7 @@
 <translation id="9179524979050048593">在登录屏幕上显示用户名</translation>
 <translation id="9180281769944411366">此过程可能需要几分钟的时间。正在启动 Linux 容器。</translation>
 <translation id="9180380851667544951">该网站可能会共享您的屏幕</translation>
+<translation id="918352324374649435">{COUNT,plural, =1{应用}other{# 个应用}}</translation>
 <translation id="9186963452600581158">使用孩子的 Google 帐号登录</translation>
 <translation id="9188732951356337132">发送使用情况数据和诊断数据。目前,此设备会自动向 Google 发送诊断数据、设备数据和应用使用情况数据。这些数据不会被用来辨识您孩子的身份,而是会被用来帮助提高系统和应用的稳定性以及实现其他方面的改进。部分汇总数据也会对 Google 应用和合作伙伴(例如 Android 开发者)有所帮助。如果您已为孩子开启“其他网络与应用活动记录”设置,这些数据可能会被保存到其 Google 帐号中。<ph name="BEGIN_LINK2" />了解详情<ph name="END_LINK2" /></translation>
 <translation id="9198090666959937775">使用您的 Android 手机作为安全密钥</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index b604e8d..02ab0115 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">網頁內容語言</translation>
 <translation id="3429275422858276529">將此網頁加入書籤,以便日後輕鬆查找</translation>
 <translation id="3432227430032737297">移除所有顯示項目</translation>
-<translation id="3432757130254800023">傳送要在區域網絡顯示的音效檔案和影片</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">糟糕!系統無法鎖定裝置安裝時的屬性。</translation>
 <translation id="3434272557872943250">如果您為子女開啟其他「網絡及應用程式活動記錄」設定,此資料可能會儲存在他們的 Google 帳戶中。您可以前往 families.google.com 詳細瞭解這些設定及其調整方式</translation>
@@ -2973,7 +2972,7 @@
 <translation id="4364327530094270451">蜜瓜</translation>
 <translation id="4364567974334641491"><ph name="APP_NAME" /> 正在共用視窗。</translation>
 <translation id="4364830672918311045">顯示通知</translation>
-<translation id="4366138410738374926">已開始列印</translation>
+<translation id="4366138410738374926">列印已開始</translation>
 <translation id="437004882363131692">取得 <ph name="DEVICE_TYPE" /> 提示、優惠和最新資訊,並分享意見。您可隨時取消訂閱。</translation>
 <translation id="4370425812909262207">已隱藏購物車。當您作出變更時,購物車就會重新顯示。</translation>
 <translation id="4370975561335139969">您所輸入的電郵與密碼不符</translation>
@@ -6244,7 +6243,6 @@
 <translation id="8147900440966275470">找到 <ph name="NUM" /> 個分頁</translation>
 <translation id="8148760431881541277">限制登入</translation>
 <translation id="8150259863378108853">Lacros 是實驗版瀏覽器。請按一下 [說明] &gt; [報告問題…] 以報告任何問題</translation>
-<translation id="8151579390896831136">自訂您嘅設定檔,包括設定檔個名</translation>
 <translation id="8151638057146502721">設定</translation>
 <translation id="8154790740888707867">沒有檔案</translation>
 <translation id="815491593104042026">糟糕!由於設定使用的網址 (<ph name="BLOCKED_URL" />) 不安全,導致驗證失敗。請與您的管理員聯絡。</translation>
@@ -6435,7 +6433,6 @@
 <translation id="8378714024927312812">由您的機構管理</translation>
 <translation id="8379878387931047019">此裝置不支援此網站要求的安全密鑰類型</translation>
 <translation id="8379991678458444070">將此分頁加入書籤,方便您快速返回此處</translation>
-<translation id="8380266723152870797">視窗名稱</translation>
 <translation id="8382913212082956454">複製電郵地址(&amp;E)</translation>
 <translation id="8386091599636877289">找不到政策。</translation>
 <translation id="8386903983509584791">掃瞄完成</translation>
@@ -6859,7 +6856,6 @@
 <translation id="8859402192569844210">無法載入《服務條款》</translation>
 <translation id="8859662783913000679">家長帳戶</translation>
 <translation id="8862003515646449717">改用速度快的瀏覽器</translation>
-<translation id="8863140399813345099">您可使用裝置分享設定來控制哪些人可在螢幕解鎖時與您分享檔案</translation>
 <translation id="8863753581171631212">在「<ph name="APP" />」的新視窗中開啟連結</translation>
 <translation id="8864055848767439877">正在與 <ph name="APP_NAME" /> 共用 <ph name="TAB_NAME" /></translation>
 <translation id="8864458770072227512">已從此裝置移除 <ph name="EMAIL" /></translation>
@@ -6913,7 +6909,6 @@
 <translation id="8912810933860534797">啟用自動掃瞄</translation>
 <translation id="8915370057835397490">正在載入建議</translation>
 <translation id="8916476537757519021">無痕模式子頁框:<ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">設定視窗名稱</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />的 <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">深藍綠色</translation>
 <translation id="8925458182817574960">設定(&amp;S)</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 7e91684..d51a673 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">網路內容語言</translation>
 <translation id="3429275422858276529">將這個網頁加入書籤,方便日後查看</translation>
 <translation id="3432227430032737297">將顯示的項目全部移除</translation>
-<translation id="3432757130254800023">傳送要在區域網路顯示的影音內容</translation>
 <translation id="3432762828853624962">Shared Workers</translation>
 <translation id="3433621910545056227">糟糕!系統無法鎖定裝置安裝時的屬性。</translation>
 <translation id="3434272557872943250">如果貴子女的「其他網路和應用程式活動」設定為開啟,這些資料可能會儲存在他們的 Google 帳戶中。如要進一步瞭解這些設定及其調整方式,請前往 families.google.com。</translation>
@@ -6243,7 +6242,6 @@
 <translation id="8147900440966275470">找到 <ph name="NUM" /> 個分頁</translation>
 <translation id="8148760431881541277">限制登入</translation>
 <translation id="8150259863378108853">Lacros 是實驗性瀏覽器。如有任何問題,請依序按一下 [說明] &gt; [回報問題...] 進行回報</translation>
-<translation id="8151579390896831136">自訂你的設定檔 (包括設定檔名稱)</translation>
 <translation id="8151638057146502721">設定</translation>
 <translation id="8154790740888707867">沒有檔案</translation>
 <translation id="815491593104042026">糟糕!由於設定使用的網址 (<ph name="BLOCKED_URL" />) 不安全,導致驗證失敗。請與你的管理員聯絡。</translation>
@@ -6434,7 +6432,6 @@
 <translation id="8378714024927312812">由貴機構管理</translation>
 <translation id="8379878387931047019">這部裝置不支援這個網站所要求的安全金鑰類型</translation>
 <translation id="8379991678458444070">將此分頁加入書籤,日後便能快速開啟這個頁面</translation>
-<translation id="8380266723152870797">視窗名稱</translation>
 <translation id="8382913212082956454">複製電子郵件地址(&amp;E)</translation>
 <translation id="8386091599636877289">找不到政策。</translation>
 <translation id="8386903983509584791">掃描完成</translation>
@@ -6859,7 +6856,6 @@
 <translation id="8859402192569844210">無法載入《服務條款》</translation>
 <translation id="8859662783913000679">家長帳戶</translation>
 <translation id="8862003515646449717">改用速度飛快的瀏覽器</translation>
-<translation id="8863140399813345099">螢幕處於解鎖狀態時,利用裝置瀏覽權限可以控管哪些人可與你分享內容</translation>
 <translation id="8863753581171631212">另外在「<ph name="APP" />」中開啟連結</translation>
 <translation id="8864055848767439877">正在與 <ph name="APP_NAME" /> 共用 <ph name="TAB_NAME" /></translation>
 <translation id="8864458770072227512">已將 <ph name="EMAIL" /> 從這個裝置中移除</translation>
@@ -6913,7 +6909,6 @@
 <translation id="8912810933860534797">啟用自動掃描</translation>
 <translation id="8915370057835397490">正在載入建議</translation>
 <translation id="8916476537757519021">無痕模式子頁框:<ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">設定視窗名稱</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" />的 <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">深藍綠色</translation>
 <translation id="8925458182817574960">設定(&amp;S)</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 8a51a35..5c51181 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -2153,7 +2153,6 @@
 <translation id="3429271624041785769">Izilimi zokuqukethwe kwewebhu</translation>
 <translation id="3429275422858276529">Bekisa leli khasi ukuze uthole kalula muva</translation>
 <translation id="3432227430032737297">Susa konke okunonisiwe</translation>
-<translation id="3432757130254800023">Thumela umsindo nevidiyo kuzibonisi kunethiwekhi yasendaweni</translation>
 <translation id="3432762828853624962">Abasebenzisi ababiwe</translation>
 <translation id="3433621910545056227">Eshu! Isistimu ihlulekile ukusungula ukukhiya kwesichasiso kwesikhathi sokufaka sedivayisi.</translation>
 <translation id="3434272557872943250">Uma isilungiselelo esingeziwe sewebhu nesohlelo lokusebenza sivulelwe ingane yakho, le datha ingalondolozwa ku-akhawunti yakhe ye-Google. Funda kabanzi ngalezi zilungiselelo nendlela yokuzilungisa kwethi families.google.com.</translation>
@@ -6245,7 +6244,6 @@
 <translation id="8147900440966275470">Kutholakele ithebhu engu-<ph name="NUM" /></translation>
 <translation id="8148760431881541277">Beka umkhawulo kukungena ngemvume</translation>
 <translation id="8150259863378108853">I-Lacros isiphequluli sokuhlolwa. Sicela ubike izinkinga ngokuthi Usizo &gt; "Bika inkinga..."</translation>
-<translation id="8151579390896831136">Yenza ngokwezifiso iphrofayela yakho, kuhlanganise negama layo</translation>
 <translation id="8151638057146502721">Lungiselela</translation>
 <translation id="8154790740888707867">Alikho ifayela</translation>
 <translation id="815491593104042026">Eshu!  Ukuvumelanisa kuhlulekile ngoba kuye kwalungiselelwa ku-URL engavikelekile (<ph name="BLOCKED_URL" />).  Sicela uxhumane nomqondisi wakho.</translation>
@@ -6436,7 +6434,6 @@
 <translation id="8378714024927312812">Kuphethwe inhlangano yakho</translation>
 <translation id="8379878387931047019">Le divayisi ayisekeli uhlobo lokhiye wokuphepha ocelwe yile webhusayithi</translation>
 <translation id="8379991678458444070">Buyela lapha ngokushesha ngokwenza ibhukhimakhi leli thebhu</translation>
-<translation id="8380266723152870797">Igama lewindi</translation>
 <translation id="8382913212082956454">Kopisha ikheli le-&amp;imeyili</translation>
 <translation id="8386091599636877289">Inqubomgomo ayitholiwe.</translation>
 <translation id="8386903983509584791">Ukuskena kuphelile</translation>
@@ -6862,7 +6859,6 @@
 <translation id="8859402192569844210">Imigomo Yesevisi ayilayishekanga</translation>
 <translation id="8859662783913000679">I-akhawunti yomzali</translation>
 <translation id="8862003515646449717">Shintshela kusiphequluli esisheshayo</translation>
-<translation id="8863140399813345099">Ukubonakala kwedivayisi yakho kulawula ukuthi ubani ongabelana nawe ngenkathi isikrini sakho sivuliwe</translation>
 <translation id="8863753581171631212">Vula isixhumanisi ku-<ph name="APP" /> entsha</translation>
 <translation id="8864055848767439877">Yabelana nge-<ph name="TAB_NAME" /> ku-<ph name="APP_NAME" /></translation>
 <translation id="8864458770072227512">I-<ph name="EMAIL" /> iye yasuswa kusukela kule divayisi</translation>
@@ -6916,7 +6912,6 @@
 <translation id="8912810933860534797">Nika amandla ukuskena ngokuzenzakalela</translation>
 <translation id="8915370057835397490">Ilayisha isiphakamiso</translation>
 <translation id="8916476537757519021">I-Incognito Subframe: <ph name="SUBFRAME_SITE" /></translation>
-<translation id="8916749157829986308">Setha Igama Lewindi</translation>
 <translation id="8918637186205009138"><ph name="GIVEN_NAME" /> <ph name="DEVICE_TYPE" /></translation>
 <translation id="8923880975836399332">I-teal emnyama</translation>
 <translation id="8925458182817574960">Izilungiselelo</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb
index 5446264..1c8aa47 100644
--- a/chrome/app/resources/google_chrome_strings_eu.xtb
+++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -63,7 +63,7 @@
 <translation id="2485422356828889247">Desinstalatu</translation>
 <translation id="2534507159460261402">Google Pay (Chrome-n kopiatu da)</translation>
 <translation id="2574930892358684005"><ph name="EXISTING_USER" /> erabiltzaileak Chrome-ko profil honetan hasi du saioa dagoeneko. Arakatze-datuak bereizita edukitzeko, Chrome-k profil bat sor dezake zuretzat.</translation>
-<translation id="2580411288591421699">Ezin da instalatu unean abian den Google Chrome-ren bertsio bera. Itxi Google Chrome eta saiatu berriro.</translation>
+<translation id="2580411288591421699">Ezin da instalatu une honetan abian den Google Chrome-ren bertsio bera. Itxi Google Chrome eta saiatu berriro.</translation>
 <translation id="2586406160782125153">Gailuko arakatze-datuak ezabatuko dira. Geroago datuak eskuratu nahi izanez gero, hasi saioa Chrome-n <ph name="USER_EMAIL" /> gisa.</translation>
 <translation id="2588634262982826227">Chrome OS-ek aplikazioak eta orriak zuzenean lehenera ditzake sistema berrabiarazten duzun guztietan, aldiro galdetu beharrik gabe.</translation>
 <translation id="2622559029861875898">Chrome-k ezin ditu bilatu eguneratzeak. Egiaztatu Internetera konektatuta zaudela.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb
index e547841..8b52e20 100644
--- a/chrome/app/resources/google_chrome_strings_iw.xtb
+++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -117,7 +117,7 @@
 <translation id="4053720452172726777">‏הגדרת Google Chrome בהתאם לרצונך</translation>
 <translation id="4110895483821904099">‏הגדרת הפרופיל החדש שלך ב-Chrome</translation>
 <translation id="4143243756087420366">‏שם ותמונה ב-Chrome</translation>
-<translation id="4147555960264124640">‏בחרת להיכנס לחשבון מנוהל, ויינתן למנהל המערכת שלו שליטה על הפרופיל שלך ב-Chrome. הנתונים שלך ב-Chrome, כגון אפליקציות, סימניות, היסטוריה, סיסמאות והגדרות אחרות ייקשרו באופן קבוע ל-<ph name="USER_NAME" />. ניתן למחוק את הנתונים האלה באמצעות מרכז השליטה של חשבונות Google, אבל לא ניתן יהיה לשייך את הנתונים האלה לחשבון אחר. <ph name="LEARN_MORE" /></translation>
+<translation id="4147555960264124640">‏בחרת להיכנס לחשבון מנוהל, ומנהל המערכת שלו יקבל שליטה על הפרופיל שלך ב-Chrome. הנתונים שלך ב-Chrome, כגון אפליקציות, סימניות, היסטוריה, סיסמאות והגדרות אחרות ייקשרו באופן קבוע ל-<ph name="USER_NAME" />. ניתן למחוק את הנתונים האלה באמצעות מרכז השליטה של חשבונות Google, אבל לא ניתן יהיה לשייך את הנתונים האלה לחשבון אחר. <ph name="LEARN_MORE" /></translation>
 <translation id="4149882025268051530">‏המתקין נכשל בביצוע דחיסה לארכיון. יש להוריד שוב את Google Chrome.</translation>
 <translation id="4191857738314598978">{0,plural, =1{‏צריך להפעיל מחדש את Chrome תוך יום אחד}two{‏צריך להפעיל מחדש את Chrome תוך # ימים}many{‏צריך להפעיל מחדש את Chrome תוך # ימים}other{‏צריך להפעיל מחדש את Chrome תוך # ימים}}</translation>
 <translation id="4205939740494406371">‏Chrome לא יכול לבדוק את הסיסמאות שלך. יש לנסות שוב בעוד 24 שעות או <ph name="BEGIN_LINK" />לבדוק את הסיסמאות בחשבון Google<ph name="END_LINK" />.</translation>
@@ -184,7 +184,7 @@
 <translation id="5895138241574237353">הפעלה מחדש</translation>
 <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> – כניסה לרשת</translation>
 <translation id="5940385492829620908">‏היסטוריית האתרים, הסימניות ופריטים נוספים מ-Chrome נמצאים כאן.</translation>
-<translation id="5941830788786076944">‏הפוך את Google Chrome לדפדפן ברירת המחדל</translation>
+<translation id="5941830788786076944">‏Google Chrome יהיה דפדפן ברירת המחדל</translation>
 <translation id="6070348360322141662">‏לשיפור האבטחה, Google Chrome יצפין את הנתונים</translation>
 <translation id="608006075545470555">הוספת פרופיל עבודה לדפדפן זה</translation>
 <translation id="6113794647360055231">‏Chrome השתפר</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uz.xtb b/chrome/app/resources/google_chrome_strings_uz.xtb
index 682b795..79e9a96 100644
--- a/chrome/app/resources/google_chrome_strings_uz.xtb
+++ b/chrome/app/resources/google_chrome_strings_uz.xtb
@@ -17,6 +17,8 @@
 <translation id="1399397803214730675">Bu kompyuterdagi Google Chrome brauzeri eskirgan, agar brauzer ishlamayotgan bo‘lsa, uni o‘chirib tashlang va qaytadan o‘rnating.</translation>
 <translation id="1434626383986940139">Chrome Canary ilovalari</translation>
 <translation id="147727933880789532">Chrome bu kengaytmani faolsizlantirishni tavsiya qiladi, chunki u Saytlarni kuchaytirilgan rejimda xavfsiz kezish standartlari talablariga javob bermaydi.</translation>
+<translation id="1516530951338665275">Google Chrome ulanishi uchun Bluetooth orqali kirish ruxsati 
+ kerak. <ph name="IDS_BLUETOOTH_DEVICE_CHOOSER_AUTHORIZE_BLUETOOTH_LINK" /></translation>
 <translation id="1553358976309200471">Chrome‘ni yangilash</translation>
 <translation id="1587223624401073077">Google Chrome kameradan foydalanmoqda.</translation>
 <translation id="1587325591171447154"><ph name="FILE_NAME" /> zararli edi, shuning uchun u Chrome tomonidan bloklandi.</translation>
@@ -206,6 +208,7 @@
 <translation id="6566149418543181476">Google Chrome yangilanmoqda (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="6568793831116033768">Chrome OS tizimi</translation>
 <translation id="6650333065969705433">Himoyalangan mediani ijro etishda Rosetta dasturidan foydalanish uchun Chrome brauzerini qayta ishga tushiring.</translation>
+<translation id="6668872995670558829">Chrome profili kerak</translation>
 <translation id="6676384891291319759">Internetga ulanish</translation>
 <translation id="6679975945624592337">Google Chrome fonda ishlashiga ruxsat</translation>
 <translation id="6739177684496155661">Yangi Chrome profilida davom etasizmi?</translation>
@@ -224,6 +227,7 @@
 <translation id="7140653346177713799">{COUNT,plural, =0{Chrome uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi.}=1{Chrome uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi. Inkognito oynalar qayta ochilmaydi.}other{Chrome uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi. # ta inkognito oyna qayta ochilmaydi.}}</translation>
 <translation id="7155997830309522122">Agar shunday boʻlsa, Chrome brauzeriga saqlangan parolingizni yangi parolingiz bilan bir xil boʻlishi uchun tahrirlang</translation>
 <translation id="7242029209006116544">Boshqariladigan hisobga kirish bilan siz administratorga Google Chrome profilingiz sozlamalarini boshqarishiga rozilik bildirasiz. Barcha Chrome ma’lumotlaringiz (m-n, ilovalar, xatcho‘plar, brauzer tarixi, parollar va boshqa sozlamalar kabi) <ph name="USER_NAME" /> hisobiga butunlay bog‘lanadi. Bu ma’lumotlarni Google shaxsiy kabinetida o‘chirish mumkin, lekin boshqa hisobga bog‘lash imkoniyati yo‘q. Chrome ma’lumotlarini saqlab qolish uchun yangi profil yarating. <ph name="LEARN_MORE" /></translation>
+<translation id="7255293161244507351">Bu hisob <ph name="MANAGEMENT_DOMAIN" /> tomonidan boshqariladi. Administrator ruxsat berish uchun Chrome profilini talab qiladi. Bu profil har qanday boshqa shaxsiy profildan butunlay ajratiladi. Bu profil ishlatilganda yaratilgan har qanday Chrome maʼlumotlari (bukmarklar, tarix, parollar va boshqa sozlamalar kabi) administrator tomonidan tozalanishi mumkin. <ph name="BEGIN_LINK" />Batafsil<ph name="END_LINK" /></translation>
 <translation id="7295052994004373688">Google Chrome UI inteyfeysi hozir shu tilda</translation>
 <translation id="7296210096911315575">Foydalanish va xavfsizlik</translation>
 <translation id="7303916856901595720">Hisob yangi Chrome profiliga oʻtkasizlsinmi?</translation>
@@ -231,6 +235,7 @@
 <translation id="7339898014177206373">Yangi oyna</translation>
 <translation id="7398801000654795464">Siz Chrome brauzeriga <ph name="USER_EMAIL_ADDRESS" /> hisobi orqali kirgandingiz. O‘sha hisobdan foydalanib yana qaytadan kiring.</translation>
 <translation id="7408085963519505752">Chrome OS shartlari</translation>
+<translation id="7416131756095014387">Bu hisob boshqariladi. Administrator ruxsat berish uchun Chrome profilini talab qiladi. Bu profil har qanday boshqa shaxsiy profildan butunlay ajratiladi. Bu profil ishlatilganda yaratilgan har qanday Chrome maʼlumotlari (bukmarklar, tarix, parollar va boshqa sozlamalar kabi) administrator tomonidan tozalanishi mumkin. <ph name="BEGIN_LINK" />Batafsil<ph name="END_LINK" /></translation>
 <translation id="7419046106786626209">Ma’lumotlarni sinxronlab bo‘lmadi, chunki domeningizda Sync xizmati mavjud emas.</translation>
 <translation id="7486227612705979895">Manzil panelida tavsiyalarni namoyish qilish uchun Chrome sizning Drive omboringizdan foydalanadi</translation>
 <translation id="7535429826459677826">Google Chrome Dev</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 70eb54cb..1244fc7 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -2819,8 +2819,6 @@
       "android/oom_intervention/oom_intervention_tab_helper.h",
       "android/partner_browser_customizations.cc",
       "android/partner_browser_customizations.h",
-      "android/password_ui_view_android.cc",
-      "android/password_ui_view_android.h",
       "android/permissions/permission_settings_bridge.cc",
       "android/policy/policy_auditor.cc",
       "android/preferences/about_settings_bridge.cc",
@@ -3128,6 +3126,8 @@
       "password_manager/android/password_scripts_fetcher_android.cc",
       "password_manager/android/password_store_bridge.cc",
       "password_manager/android/password_store_bridge.h",
+      "password_manager/android/password_ui_view_android.cc",
+      "password_manager/android/password_ui_view_android.h",
       "password_manager/android/save_password_infobar_delegate_android.cc",
       "password_manager/android/save_password_infobar_delegate_android.h",
       "password_manager/android/save_password_message_delegate.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 10d12257..fb6f0b0 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4463,7 +4463,8 @@
      flag_descriptions::kNewTabstripAnimationDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(features::kNewTabstripAnimation)},
 
-    {"scrollable-tabstrip", flag_descriptions::kScrollableTabStripName,
+    {flag_descriptions::kScrollableTabStripFlagId,
+     flag_descriptions::kScrollableTabStripName,
      flag_descriptions::kScrollableTabStripDescription, kOsDesktop,
      FEATURE_VALUE_TYPE(features::kScrollableTabStrip)},
 
diff --git a/chrome/browser/android/browserservices/verification/java/src/org/chromium/chrome/browser/browserservices/verification/OriginVerifier.java b/chrome/browser/android/browserservices/verification/java/src/org/chromium/chrome/browser/browserservices/verification/OriginVerifier.java
index 41401f7b..5b54a163 100644
--- a/chrome/browser/android/browserservices/verification/java/src/org/chromium/chrome/browser/browserservices/verification/OriginVerifier.java
+++ b/chrome/browser/android/browserservices/verification/java/src/org/chromium/chrome/browser/browserservices/verification/OriginVerifier.java
@@ -37,13 +37,11 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Use to check that an app has a Digital Asset Link relationship with the given origin.
@@ -78,13 +76,6 @@
     @Nullable
     private ExternalAuthUtils mExternalAuthUtils;
 
-    /**
-     * A collection of Relationships (stored as Strings, with the signature set to an empty String)
-     * that we override verifications to succeed for. It is threadsafe.
-     */
-    private static final AtomicReference<Set<String>> sVerificationOverrides =
-            new AtomicReference<>();
-
     @IntDef({VerificationResult.ONLINE_SUCCESS, VerificationResult.ONLINE_FAILURE,
             VerificationResult.OFFLINE_SUCCESS, VerificationResult.OFFLINE_FAILURE,
             VerificationResult.HTTPS_FAILURE, VerificationResult.REQUEST_FAILURE,
@@ -145,9 +136,6 @@
     @VisibleForTesting
     public static void clearCachedVerificationsForTesting() {
         VerificationResultStore.getInstance().clearStoredRelationships();
-        if (sVerificationOverrides.get() != null) {
-            sVerificationOverrides.get().clear();
-        }
     }
 
     /**
@@ -156,12 +144,7 @@
      */
     public static void addVerificationOverride(
             String packageName, Origin origin, int relationship) {
-        if (sVerificationOverrides.get() == null) {
-            sVerificationOverrides.compareAndSet(
-                    null, Collections.synchronizedSet(new HashSet<>()));
-        }
-        sVerificationOverrides.get().add(
-                new Relationship(packageName, "", origin, relationship).toString());
+        VerificationResultStore.getInstance().addOverride(packageName, origin, relationship);
     }
 
     /**
@@ -205,8 +188,9 @@
      */
     private static boolean wasPreviouslyVerified(String packageName, String signatureFingerprint,
             Origin origin, @Relation int relation) {
-        return shouldOverrideVerification(packageName, origin, relation)
-                || VerificationResultStore.getInstance().isRelationshipSaved(
+        VerificationResultStore resultStore = VerificationResultStore.getInstance();
+        return resultStore.shouldOverride(packageName, origin, relation)
+                || resultStore.isRelationshipSaved(
                         new Relationship(packageName, signatureFingerprint, origin, relation));
     }
 
@@ -291,7 +275,7 @@
             return;
         }
 
-        if (shouldOverrideVerification(mPackageName, origin, mRelation)) {
+        if (mVerificationResultStore.shouldOverride(mPackageName, origin, mRelation)) {
             Log.i(TAG, "Verification succeeded for %s, it was overridden.", origin);
             PostTask.runOrPostTask(
                     UiThreadTaskTraits.DEFAULT, new VerifiedCallback(origin, true, null));
@@ -342,14 +326,6 @@
         }
     }
 
-    private static boolean shouldOverrideVerification(
-            String packageName, Origin origin, int relation) {
-        if (sVerificationOverrides.get() == null) return false;
-
-        return sVerificationOverrides.get().contains(
-                new Relationship(packageName, "", origin, relation).toString());
-    }
-
     private boolean isAllowlisted(String packageName, Origin origin, int relation) {
         if (mExternalAuthUtils == null) return false;
 
diff --git a/chrome/browser/android/browserservices/verification/java/src/org/chromium/chrome/browser/browserservices/verification/VerificationResultStore.java b/chrome/browser/android/browserservices/verification/java/src/org/chromium/chrome/browser/browserservices/verification/VerificationResultStore.java
index 9094b65..06d1d97 100644
--- a/chrome/browser/android/browserservices/verification/java/src/org/chromium/chrome/browser/browserservices/verification/VerificationResultStore.java
+++ b/chrome/browser/android/browserservices/verification/java/src/org/chromium/chrome/browser/browserservices/verification/VerificationResultStore.java
@@ -10,6 +10,7 @@
 import org.chromium.base.ThreadUtils;
 import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
 import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
+import org.chromium.components.embedder_support.util.Origin;
 
 import java.util.Collections;
 import java.util.HashSet;
@@ -33,6 +34,13 @@
     // this with an AtomicReference, but it seems simpler to just eagerly create the instance.
     private static final VerificationResultStore sInstance = new VerificationResultStore();
 
+    /**
+     * A collection of Relationships (stored as Strings, with the signature set to an empty String)
+     * that we override verifications to succeed for. It is threadsafe.
+     */
+    private static final Set<String> sVerificationOverrides =
+            Collections.synchronizedSet(new HashSet<>());
+
     static VerificationResultStore getInstance() {
         return sInstance;
     }
@@ -53,9 +61,22 @@
         return getRelationships().contains(relationship.toString());
     }
 
+    void addOverride(String packageName, Origin origin, int relationship) {
+        sVerificationOverrides.add(overrideToString(packageName, origin, relationship));
+    }
+
+    boolean shouldOverride(String packageName, Origin origin, int relationship) {
+        return sVerificationOverrides.contains(overrideToString(packageName, origin, relationship));
+    }
+
+    private static String overrideToString(String packageName, Origin origin, int relationship) {
+        return new Relationship(packageName, "", origin, relationship).toString();
+    }
+
     void clearStoredRelationships() {
         ThreadUtils.assertOnUiThread();
         setRelationships(Collections.emptySet());
+        sVerificationOverrides.clear();
     }
 
     @VisibleForTesting
diff --git a/chrome/browser/android/webapps/add_to_homescreen_coordinator.cc b/chrome/browser/android/webapps/add_to_homescreen_coordinator.cc
index 5bce1622..d9c0b4d5 100644
--- a/chrome/browser/android/webapps/add_to_homescreen_coordinator.cc
+++ b/chrome/browser/android/webapps/add_to_homescreen_coordinator.cc
@@ -9,11 +9,11 @@
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/android/chrome_jni_headers/AddToHomescreenCoordinator_jni.h"
-#include "chrome/browser/android/tab_android.h"
 #include "chrome/browser/android/webapps/add_to_homescreen_mediator.h"
 #include "components/webapps/browser/android/add_to_homescreen_installer.h"
 #include "components/webapps/browser/android/add_to_homescreen_params.h"
 #include "components/webapps/browser/banners/app_banner_manager.h"
+#include "content/public/browser/web_contents.h"
 
 namespace webapps {
 
@@ -24,13 +24,10 @@
     base::RepeatingCallback<void(AddToHomescreenInstaller::Event,
                                  const AddToHomescreenParams&)>
         event_callback) {
-  TabAndroid* tab_android =
-      TabAndroid::FromWebContents(weak_manager->web_contents());
-
   JNIEnv* env = base::android::AttachCurrentThread();
   AddToHomescreenMediator* mediator = (AddToHomescreenMediator*)
       Java_AddToHomescreenCoordinator_initMvcAndReturnMediator(
-          env, tab_android->GetJavaObject());
+          env, weak_manager->web_contents()->GetJavaWebContents());
   if (!mediator)
     return false;
 
diff --git a/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc
index 3467b7d7..2267c3f2 100644
--- a/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc
+++ b/chrome/browser/ash/accessibility/spoken_feedback_browsertest.cc
@@ -962,7 +962,7 @@
   sm_.Replay();
 }
 
-IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, DISABLE_SmartStickyMode) {
+IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, DISABLED_SmartStickyMode) {
   EnableChromeVox();
   sm_.Call([this]() {
     ui_test_utils::NavigateToURL(browser(),
diff --git a/chrome/browser/autofill/form_structure_browsertest.cc b/chrome/browser/autofill/form_structure_browsertest.cc
index 32e83e1..92133ae 100644
--- a/chrome/browser/autofill/form_structure_browsertest.cc
+++ b/chrome/browser/autofill/form_structure_browsertest.cc
@@ -169,21 +169,23 @@
   feature_list_.InitWithFeatures(
       // Enabled
       {// TODO(crbug.com/1098943): Remove once experiment is over.
-       autofill::features::kAutofillEnableSupportForMoreStructureInNames,
+       features::kAutofillEnableSupportForMoreStructureInNames,
        // TODO(crbug.com/1125978): Remove once launched.
-       autofill::features::kAutofillEnableSupportForMoreStructureInAddresses,
+       features::kAutofillEnableSupportForMoreStructureInAddresses,
        // TODO(crbug.com/896689): Remove once launched.
-       autofill::features::kAutofillNameSectionsWithRendererIds,
+       features::kAutofillNameSectionsWithRendererIds,
        // TODO(crbug.com/1076175) Remove once launched.
-       autofill::features::kAutofillUseNewSectioningMethod,
+       features::kAutofillUseNewSectioningMethod,
        // Remove once launched
-       autofill::features::kAutofillEnableAugmentedPhoneCountryCode,
+       features::kAutofillEnableAugmentedPhoneCountryCode,
        // TODO(crbug.com/1157405) Remove once launched.
-       autofill::features::kAutofillEnableDependentLocalityParsing,
+       features::kAutofillEnableDependentLocalityParsing,
        // TODO(crbug.com/1150895) Remove once launched.
-       autofill::features::kAutofillParsingPatternsLanguageDetection},
+       features::kAutofillParsingPatternsLanguageDetection,
+       // TODO(crbug/1165780): Remove once shared labels are launched.
+       features::kAutofillEnableSupportForParsingWithSharedLabels},
       // Disabled
-      {autofill::features::kAutofillRestrictUnownedFieldsToFormlessCheckout});
+      {features::kAutofillRestrictUnownedFieldsToFormlessCheckout});
 }
 
 FormStructureBrowserTest::~FormStructureBrowserTest() {}
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index 284382ab..82d8053e 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -506,7 +506,7 @@
       base::BindRepeating(&BindPrerenderCanceler));
 
   // When Prerender2 is enabled, the content layer already added a binder.
-  if (!base::FeatureList::IsEnabled(blink::features::kPrerender2)) {
+  if (!blink::features::IsPrerender2Enabled()) {
     map->Add<blink::mojom::PrerenderProcessor>(
         base::BindRepeating(&BindPrerenderProcessor));
   }
diff --git a/chrome/browser/chrome_web_platform_security_metrics_browsertest.cc b/chrome/browser/chrome_web_platform_security_metrics_browsertest.cc
index 18c062e..e91298c 100644
--- a/chrome/browser/chrome_web_platform_security_metrics_browsertest.cc
+++ b/chrome/browser/chrome_web_platform_security_metrics_browsertest.cc
@@ -30,7 +30,6 @@
         {
             // Enabled:
             network::features::kCrossOriginOpenerPolicy,
-            network::features::kCrossOriginEmbedderPolicy,
             network::features::kCrossOriginOpenerPolicyReporting,
         },
         {});
diff --git a/chrome/browser/chromeos/login/error_screen_browsertest.cc b/chrome/browser/chromeos/login/error_screen_browsertest.cc
index 8b349f7..3b379a8 100644
--- a/chrome/browser/chromeos/login/error_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/error_screen_browsertest.cc
@@ -327,7 +327,7 @@
 };
 
 // Verify that certificate manager dialog opens.
-IN_PROC_BROWSER_TEST_F(KioskErrorScreenTest, DISABLE_OpenCertificateConfig) {
+IN_PROC_BROWSER_TEST_F(KioskErrorScreenTest, DISABLED_OpenCertificateConfig) {
   while (!ash::LoginScreenTestApi::IsAppsButtonShown()) {
     int ui_update_count = ash::LoginScreenTestApi::GetUiUpdateCount();
     ash::LoginScreenTestApi::WaitForUiUpdate(ui_update_count);
diff --git a/chrome/browser/component_updater/trust_token_key_commitments_component_installer.cc b/chrome/browser/component_updater/trust_token_key_commitments_component_installer.cc
index b0c83e2..da45037 100644
--- a/chrome/browser/component_updater/trust_token_key_commitments_component_installer.cc
+++ b/chrome/browser/component_updater/trust_token_key_commitments_component_installer.cc
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -20,6 +21,7 @@
 #include "base/task/post_task.h"
 #include "base/version.h"
 #include "components/component_updater/component_updater_paths.h"
+#include "components/component_updater/component_updater_switches.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/network_service_instance.h"
 #include "services/network/public/cpp/features.h"
@@ -101,6 +103,12 @@
 base::FilePath
 TrustTokenKeyCommitmentsComponentInstallerPolicy::GetInstalledPath(
     const base::FilePath& base) {
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kComponentUpdaterTrustTokensComponentPath)) {
+    return base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
+        switches::kComponentUpdaterTrustTokensComponentPath);
+  }
+
   return base.Append(kTrustTokenKeyCommitmentsFileName);
 }
 
diff --git a/chrome/browser/component_updater/trust_token_key_commitments_component_installer.h b/chrome/browser/component_updater/trust_token_key_commitments_component_installer.h
index 849ad2f..3cbe13fa 100644
--- a/chrome/browser/component_updater/trust_token_key_commitments_component_installer.h
+++ b/chrome/browser/component_updater/trust_token_key_commitments_component_installer.h
@@ -46,6 +46,8 @@
  private:
   FRIEND_TEST_ALL_PREFIXES(TrustTokenKeyCommitmentsComponentInstallerTest,
                            LoadsCommitments);
+  FRIEND_TEST_ALL_PREFIXES(TrustTokenKeyCommitmentsComponentInstallerTest,
+                           LoadsCommitmentsFromOverriddenPath);
 
   // The following methods override ComponentInstallerPolicy.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
diff --git a/chrome/browser/component_updater/trust_token_key_commitments_component_installer_unittest.cc b/chrome/browser/component_updater/trust_token_key_commitments_component_installer_unittest.cc
index 0f33baacf..824c8ea 100644
--- a/chrome/browser/component_updater/trust_token_key_commitments_component_installer_unittest.cc
+++ b/chrome/browser/component_updater/trust_token_key_commitments_component_installer_unittest.cc
@@ -12,12 +12,14 @@
 #include "base/run_loop.h"
 #include "base/sequence_checker.h"
 #include "base/test/bind.h"
+#include "base/test/scoped_command_line.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_browser_process.h"
+#include "components/component_updater/component_updater_switches.h"
 #include "components/component_updater/mock_component_updater_service.h"
 #include "services/network/public/cpp/features.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -52,6 +54,44 @@
   env_.RunUntilIdle();
 }
 
+TEST_F(TrustTokenKeyCommitmentsComponentInstallerTest,
+       LoadsCommitmentsFromOverriddenPath) {
+  base::test::ScopedFeatureList scoped_list;
+  scoped_list.InitAndEnableFeature(network::features::kTrustTokens);
+
+  base::SequenceCheckerImpl checker;
+
+  std::string expectation = "some trust token keys";
+  base::RunLoop run_loop;
+  auto confirmation_callback = [&](const std::string& got) {
+    EXPECT_TRUE(checker.CalledOnValidSequence());
+    EXPECT_EQ(got, expectation);
+    run_loop.Quit();
+  };
+
+  base::FilePath temp_path;
+  ASSERT_TRUE(base::CreateTemporaryFile(&temp_path));
+
+  base::test::ScopedCommandLine command_line;
+  command_line.GetProcessCommandLine()->AppendSwitchPath(
+      switches::kComponentUpdaterTrustTokensComponentPath, temp_path);
+
+  ASSERT_TRUE(base::WriteFile(temp_path, expectation));
+
+  auto policy =
+      std::make_unique<TrustTokenKeyCommitmentsComponentInstallerPolicy>(
+          base::BindLambdaForTesting(confirmation_callback));
+
+  // The |component_install_dir_.GetPath()| should be ignored in favor of the
+  // separate path we provide through the switch.
+  policy->ComponentReady(base::Version(), component_install_dir_.GetPath(),
+                         std::make_unique<base::DictionaryValue>());
+
+  run_loop.Run();
+
+  base::DeleteFile(temp_path);
+}
+
 TEST_F(TrustTokenKeyCommitmentsComponentInstallerTest, LoadsCommitments) {
   base::test::ScopedFeatureList scoped_list;
   scoped_list.InitAndEnableFeature(network::features::kTrustTokens);
diff --git a/chrome/browser/extensions/api/file_system/file_system_apitest_chromeos.cc b/chrome/browser/extensions/api/file_system/file_system_apitest_chromeos.cc
index 61e97d9..0273ed21 100644
--- a/chrome/browser/extensions/api/file_system/file_system_apitest_chromeos.cc
+++ b/chrome/browser/extensions/api/file_system/file_system_apitest_chromeos.cc
@@ -124,9 +124,9 @@
 
     ASSERT_TRUE(test_cache_root_.CreateUniqueTempDir());
 
-    create_drive_integration_service_ =
-        base::Bind(&FileSystemApiTestForDrive::CreateDriveIntegrationService,
-                   base::Unretained(this));
+    create_drive_integration_service_ = base::BindRepeating(
+        &FileSystemApiTestForDrive::CreateDriveIntegrationService,
+        base::Unretained(this));
     service_factory_for_test_.reset(
         new drive::DriveIntegrationServiceFactory::ScopedFactoryForTest(
             &create_drive_integration_service_));
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index d96a4df..880be9bb 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2073,6 +2073,7 @@
     "quick settings. Select the capture type and selection default from the "
     "capture mode UI bar. Try out new screen recording functionality.";
 
+const char kScrollableTabStripFlagId[] = "scrollable-tabstrip";
 const char kScrollableTabStripName[] = "Scrollable TabStrip";
 const char kScrollableTabStripDescription[] =
     "Allows users to access tabs by scrolling when they no longer fit in the "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 9ae46e78..c45847fe 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1207,6 +1207,7 @@
 extern const char kScreenCaptureTestName[];
 extern const char kScreenCaptureTestDescription[];
 
+extern const char kScrollableTabStripFlagId[];
 extern const char kScrollableTabStripName[];
 extern const char kScrollableTabStripDescription[];
 
diff --git a/chrome/browser/metrics/perf/perf_events_collector.cc b/chrome/browser/metrics/perf/perf_events_collector.cc
index f521c620..3468b9c 100644
--- a/chrome/browser/metrics/perf/perf_events_collector.cc
+++ b/chrome/browser/metrics/perf/perf_events_collector.cc
@@ -117,18 +117,18 @@
 const char kPerfFPCallgraphPPPCmd[] =
     "perf record -a -e cycles:ppp -g -c 4000037";
 
-const char kPerfFPCallgraphPPPDHGCmd[] =
-    "perf record -a -e cycles:pppDHG -g -c 4000037";
+const char kPerfFPCallgraphPPPHGCmd[] =
+    "perf record -a -e cycles:pppHG -g -c 4000037";
 
 // Collect default (imprecise) cycle events everywhere else.
 const char kPerfCyclesCmd[] = "perf record -a -e cycles -c 1000003";
 
-const char kPerfCyclesDHGCmd[] = "perf record -a -e cycles:DHG -c 1000003";
+const char kPerfCyclesHGCmd[] = "perf record -a -e cycles:HG -c 1000003";
 
 const char kPerfFPCallgraphCmd[] = "perf record -a -e cycles -g -c 4000037";
 
-const char kPerfFPCallgraphDHGCmd[] =
-    "perf record -a -e cycles:DHG -g -c 4000037";
+const char kPerfFPCallgraphHGCmd[] =
+    "perf record -a -e cycles:HG -g -c 4000037";
 
 const char kPerfLBRCallgraphCmd[] =
     "perf record -a -e cycles -c 4000037 --call-graph lbr";
@@ -198,13 +198,13 @@
     lbr_cmd = kPerfLBRCmdAtom;
   }
   if (base::FeatureList::IsEnabled(kCWPCollectionOnHostAndGuest)) {
-    cycles_cmd = kPerfCyclesDHGCmd;
-    fp_callgraph_cmd = kPerfFPCallgraphDHGCmd;
+    cycles_cmd = kPerfCyclesHGCmd;
+    fp_callgraph_cmd = kPerfFPCallgraphHGCmd;
   }
   if (MicroarchitectureHasCyclesPPPEvent(cpu_uarch)) {
     fp_callgraph_cmd = kPerfFPCallgraphPPPCmd;
     if (base::FeatureList::IsEnabled(kCWPCollectionOnHostAndGuest))
-      fp_callgraph_cmd = kPerfFPCallgraphPPPDHGCmd;
+      fp_callgraph_cmd = kPerfFPCallgraphPPPHGCmd;
   }
 
   cmds.emplace_back(WeightAndValue(50.0, cycles_cmd));
@@ -283,8 +283,8 @@
       cpuid.arch == "armv7l" ||   // ARM32
       cpuid.arch == "aarch64") {  // ARM64
     if (base::FeatureList::IsEnabled(kCWPCollectionOnHostAndGuest)) {
-      cmds.emplace_back(WeightAndValue(80.0, kPerfCyclesDHGCmd));
-      cmds.emplace_back(WeightAndValue(20.0, kPerfFPCallgraphDHGCmd));
+      cmds.emplace_back(WeightAndValue(80.0, kPerfCyclesHGCmd));
+      cmds.emplace_back(WeightAndValue(20.0, kPerfFPCallgraphHGCmd));
     } else {
       cmds.emplace_back(WeightAndValue(80.0, kPerfCyclesCmd));
       cmds.emplace_back(WeightAndValue(20.0, kPerfFPCallgraphCmd));
@@ -294,7 +294,7 @@
 
   // Unknown CPUs
   if (base::FeatureList::IsEnabled(kCWPCollectionOnHostAndGuest)) {
-    cmds.emplace_back(WeightAndValue(1.0, kPerfCyclesDHGCmd));
+    cmds.emplace_back(WeightAndValue(1.0, kPerfCyclesHGCmd));
   } else {
     cmds.emplace_back(WeightAndValue(1.0, kPerfCyclesCmd));
   }
diff --git a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
index 51ff874..cef97cb 100644
--- a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
+++ b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
@@ -34,16 +34,16 @@
 const char kPerfCommandDelimiter[] = " ";
 
 const char kPerfCyclesCmd[] = "perf record -a -e cycles -c 1000003";
-const char kPerfCyclesDHGCmd[] = "perf record -a -e cycles:DHG -c 1000003";
+const char kPerfCyclesHGCmd[] = "perf record -a -e cycles:HG -c 1000003";
 const char kPerfFPCallgraphCmd[] = "perf record -a -e cycles -g -c 4000037";
-const char kPerfFPCallgraphDHGCmd[] =
-    "perf record -a -e cycles:DHG -g -c 4000037";
+const char kPerfFPCallgraphHGCmd[] =
+    "perf record -a -e cycles:HG -g -c 4000037";
 const char kPerfLBRCallgraphCmd[] =
     "perf record -a -e cycles -c 4000037 --call-graph lbr";
 const char kPerfFPCallgraphPPPCmd[] =
     "perf record -a -e cycles:ppp -g -c 4000037";
-const char kPerfFPCallgraphPPPDHGCmd[] =
-    "perf record -a -e cycles:pppDHG -g -c 4000037";
+const char kPerfFPCallgraphPPPHGCmd[] =
+    "perf record -a -e cycles:pppHG -g -c 4000037";
 const char kPerfLBRCmd[] = "perf record -a -e r20c4 -b -c 200011";
 const char kPerfLBRCmdAtom[] = "perf record -a -e rc4 -b -c 300001";
 const char kPerfITLBMissCyclesCmdIvyBridge[] =
@@ -420,9 +420,9 @@
   std::vector<RandomSelector::WeightAndValue> cmds =
       internal::GetDefaultCommandsForCpu(cpuid);
   ASSERT_GE(cmds.size(), 2UL);
-  EXPECT_EQ(cmds[0].value, kPerfCyclesDHGCmd);
+  EXPECT_EQ(cmds[0].value, kPerfCyclesHGCmd);
   EXPECT_TRUE(DoesCommandSampleCycles(cmds[0].value));
-  EXPECT_EQ(cmds[1].value, kPerfFPCallgraphDHGCmd);
+  EXPECT_EQ(cmds[1].value, kPerfFPCallgraphHGCmd);
   EXPECT_TRUE(DoesCommandSampleCycles(cmds[1].value));
 }
 
@@ -582,9 +582,9 @@
   std::vector<RandomSelector::WeightAndValue> cmds =
       internal::GetDefaultCommandsForCpu(cpuid);
   ASSERT_GE(cmds.size(), 3UL);
-  EXPECT_EQ(cmds[0].value, kPerfCyclesDHGCmd);
+  EXPECT_EQ(cmds[0].value, kPerfCyclesHGCmd);
   // We have both FP and LBR based callstacks.
-  EXPECT_EQ(cmds[1].value, kPerfFPCallgraphPPPDHGCmd);
+  EXPECT_EQ(cmds[1].value, kPerfFPCallgraphPPPHGCmd);
   EXPECT_TRUE(DoesCommandSampleCycles(cmds[0].value));
   EXPECT_EQ(cmds[2].value, kPerfLBRCallgraphCmd);
   EXPECT_TRUE(DoesCommandSampleCycles(cmds[1].value));
@@ -757,9 +757,9 @@
   std::vector<RandomSelector::WeightAndValue> cmds =
       internal::GetDefaultCommandsForCpu(cpuid);
   ASSERT_GE(cmds.size(), 2UL);
-  EXPECT_EQ(cmds[0].value, kPerfCyclesDHGCmd);
+  EXPECT_EQ(cmds[0].value, kPerfCyclesHGCmd);
   EXPECT_TRUE(DoesCommandSampleCycles(cmds[0].value));
-  EXPECT_EQ(cmds[1].value, kPerfFPCallgraphDHGCmd);
+  EXPECT_EQ(cmds[1].value, kPerfFPCallgraphHGCmd);
   EXPECT_TRUE(DoesCommandSampleCycles(cmds[1].value));
 }
 
diff --git a/chrome/browser/nearby_sharing/nearby_process_manager.cc b/chrome/browser/nearby_sharing/nearby_process_manager.cc
index 62d350d..57745f6 100644
--- a/chrome/browser/nearby_sharing/nearby_process_manager.cc
+++ b/chrome/browser/nearby_sharing/nearby_process_manager.cc
@@ -143,7 +143,12 @@
     return nullptr;
 
   EnsureProcessIsRunning();
-  return reference_->GetNearbyConnections().get();
+
+  if (reference_) {
+    return reference_->GetNearbyConnections().get();
+  } else {
+    return nullptr;
+  }
 }
 
 sharing::mojom::NearbySharingDecoder*
@@ -152,7 +157,12 @@
     return nullptr;
 
   EnsureProcessIsRunning();
-  return reference_->GetNearbySharingDecoder().get();
+
+  if (reference_) {
+    return reference_->GetNearbySharingDecoder().get();
+  } else {
+    return nullptr;
+  }
 }
 
 void NearbyProcessManager::StopProcess(Profile* profile) {
@@ -202,10 +212,12 @@
   // Note: base::Unretained(this) is used because this is a singleton.
   reference_ = process_manager->GetNearbyProcessReference(base::BindOnce(
       &NearbyProcessManager::OnNearbyProcessStopped, base::Unretained(this)));
-  DCHECK(reference_);
-
-  for (auto& observer : observers_)
-    observer.OnNearbyProcessStarted();
+  if (reference_) {
+    for (auto& observer : observers_)
+      observer.OnNearbyProcessStarted();
+  } else {
+    NS_LOG(ERROR) << "Failed to start process.";
+  }
 }
 
 void NearbyProcessManager::OnNearbyProcessStopped() {
diff --git a/chrome/browser/android/password_ui_view_android.cc b/chrome/browser/password_manager/android/password_ui_view_android.cc
similarity index 99%
rename from chrome/browser/android/password_ui_view_android.cc
rename to chrome/browser/password_manager/android/password_ui_view_android.cc
index 11e071a..84c33f12 100644
--- a/chrome/browser/android/password_ui_view_android.cc
+++ b/chrome/browser/password_manager/android/password_ui_view_android.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/android/password_ui_view_android.h"
+#include "chrome/browser/password_manager/android/password_ui_view_android.h"
 
 #include <algorithm>
 #include <memory>
diff --git a/chrome/browser/android/password_ui_view_android.h b/chrome/browser/password_manager/android/password_ui_view_android.h
similarity index 95%
rename from chrome/browser/android/password_ui_view_android.h
rename to chrome/browser/password_manager/android/password_ui_view_android.h
index d1adc3c..facc14d 100644
--- a/chrome/browser/android/password_ui_view_android.h
+++ b/chrome/browser/password_manager/android/password_ui_view_android.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_ANDROID_PASSWORD_UI_VIEW_ANDROID_H_
-#define CHROME_BROWSER_ANDROID_PASSWORD_UI_VIEW_ANDROID_H_
+#ifndef CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_PASSWORD_UI_VIEW_ANDROID_H_
+#define CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_PASSWORD_UI_VIEW_ANDROID_H_
 
 #include <stddef.h>
 
@@ -14,7 +14,6 @@
 #include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/macros.h"
-#include "chrome/browser/password_manager/password_store_factory.h"
 #include "chrome/browser/ui/passwords/settings/password_manager_presenter.h"
 #include "chrome/browser/ui/passwords/settings/password_ui_view.h"
 #include "components/password_manager/core/browser/password_store.h"
@@ -117,7 +116,7 @@
   // DELETION_PENDING:
   //   * Destroy() was called, a background task is pending and |this| should
   //     be deleted once the tasks complete.
-  //   * This state should not be reached anywhere but in the compeltion call
+  //   * This state should not be reached anywhere but in the completion call
   //     of the pending task.
   enum class State { ALIVE, ALIVE_SERIALIZATION_PENDING, DELETION_PENDING };
 
@@ -158,4 +157,4 @@
   DISALLOW_COPY_AND_ASSIGN(PasswordUIViewAndroid);
 };
 
-#endif  // CHROME_BROWSER_ANDROID_PASSWORD_UI_VIEW_ANDROID_H_
+#endif  // CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_PASSWORD_UI_VIEW_ANDROID_H_
diff --git a/chrome/browser/android/password_ui_view_android_unittest.cc b/chrome/browser/password_manager/android/password_ui_view_android_unittest.cc
similarity index 98%
rename from chrome/browser/android/password_ui_view_android_unittest.cc
rename to chrome/browser/password_manager/android/password_ui_view_android_unittest.cc
index 33a2761..88e478c 100644
--- a/chrome/browser/android/password_ui_view_android_unittest.cc
+++ b/chrome/browser/password_manager/android/password_ui_view_android_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/android/password_ui_view_android.h"
+#include "chrome/browser/password_manager/android/password_ui_view_android.h"
 
 #include <jni.h>
 
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
index 1f145fa2..61031f3 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_eu.xtb
@@ -883,7 +883,7 @@
 <translation id="7609342235116740824">Iragarri uneko orriaren URLa</translation>
 <translation id="7609363189280667021">Aktibatu/Desaktibatu braille-oinak</translation>
 <translation id="761303759119251275">Adierazpena</translation>
-<translation id="762020119231868829">Unean erreproduzitzen ari diren multimedia-widgetak pausatzen ditu</translation>
+<translation id="762020119231868829">Une honetan erreproduzitzen ari diren multimedia-widgetak pausatzen ditu</translation>
 <translation id="7625690649919402823">Hurrengo taula</translation>
 <translation id="7628927569678398026"><ph name="LOCALE" /> (<ph name="VARIANT" />), <ph name="GRADE" />. maila</translation>
 <translation id="7637342083105831460">Praktikatzeko eremua aurkitzeko, sakatu bilaketa-tekla + eskuinera egiteko gezi-tekla edo "Hurrengo ikasgaia" botoia. Gero, aktibatu bilaketa-tekla + zuriune-barra praktikatzeko eremua aktibatzeko.</translation>
diff --git a/chrome/browser/resources/chromeos/login/arc_terms_of_service.js b/chrome/browser/resources/chromeos/login/arc_terms_of_service.js
index 5ed94a20..e8789a8a 100644
--- a/chrome/browser/resources/chromeos/login/arc_terms_of_service.js
+++ b/chrome/browser/resources/chromeos/login/arc_terms_of_service.js
@@ -438,7 +438,7 @@
 
     // Try to use currently loaded document first.
     var self = this;
-    if (termsView.src != '' && this.isLoaded_()) {
+    if (termsView.src != '' && this.uiStep == UIState.LOADED) {
       var navigateScript = 'processLangZoneTerms(true, \'' + language +
           '\', \'' + countryCode + '\');';
       termsView.executeScript({code: navigateScript}, function(results) {
diff --git a/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.js b/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.js
index a79c696e..57e6ffb6 100644
--- a/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.js
+++ b/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.js
@@ -454,12 +454,14 @@
      */
     showChromeVoxHint() {
       this.$.chromeVoxHint.showDialog();
+      this.welcomeVideoController_.pause();
     },
 
     /**
      * Called to close the ChromeVox hint dialog.
      */
     closeChromeVoxHint() {
+      this.welcomeVideoController_.play();
       this.$.chromeVoxHint.hideDialog();
     },
 
diff --git a/chrome/browser/resources/new_tab_page/modules/module_wrapper.js b/chrome/browser/resources/new_tab_page/modules/module_wrapper.js
index 7fdcfaad..c03d2c91 100644
--- a/chrome/browser/resources/new_tab_page/modules/module_wrapper.js
+++ b/chrome/browser/resources/new_tab_page/modules/module_wrapper.js
@@ -88,6 +88,15 @@
       headerObserver.observe(this.$.impressionProbe);
       moduleObserver.observe(this);
     });
+
+    // Track whether the user hovered on the module.
+    this.addEventListener('mouseover', () => {
+      chrome.metricsPrivate.recordSparseHashable(
+          'NewTabPage.Modules.Hover', this.descriptor.id);
+    }, {
+      useCapture: true,  // So that modules cannot swallow event.
+      once: true,        // Only one log per NTP load.
+    });
   }
 }
 
diff --git a/chrome/browser/resources/settings/lazy_load.js b/chrome/browser/resources/settings/lazy_load.js
index 6798eab..d34d911 100644
--- a/chrome/browser/resources/settings/lazy_load.js
+++ b/chrome/browser/resources/settings/lazy_load.js
@@ -88,8 +88,8 @@
 export {AndroidInfoBrowserProxyImpl} from './site_settings/android_info_browser_proxy.js';
 // </if>
 export {ChooserType, ContentSetting, ContentSettingsTypes, CookieControlsMode, SITE_EXCEPTION_WILDCARD, SiteSettingSource, SortMethod} from './site_settings/constants.js';
-export {cookieInfo} from './site_settings/cookie_info.js';
-export {CookieList, LocalDataBrowserProxy, LocalDataBrowserProxyImpl, LocalDataItem} from './site_settings/local_data_browser_proxy.js';
+export {CookieDetails, cookieInfo} from './site_settings/cookie_info.js';
+export {LocalDataBrowserProxy, LocalDataBrowserProxyImpl, LocalDataItem} from './site_settings/local_data_browser_proxy.js';
 export {HandlerEntry, ProtocolEntry} from './site_settings/protocol_handlers.js';
 export {kControlledByLookup} from './site_settings/site_settings_behavior.js';
 export {ContentSettingProvider, DefaultContentSetting, RawChooserException, RawSiteException, RecentSitePermissions, SiteException, SiteGroup, SiteSettingsPrefsBrowserProxy, SiteSettingsPrefsBrowserProxyImpl, ZoomLevelEntry} from './site_settings/site_settings_prefs_browser_proxy.js';
diff --git a/chrome/browser/resources/settings/site_settings/local_data_browser_proxy.js b/chrome/browser/resources/settings/site_settings/local_data_browser_proxy.js
index 071d431f..6adbae8 100644
--- a/chrome/browser/resources/settings/site_settings/local_data_browser_proxy.js
+++ b/chrome/browser/resources/settings/site_settings/local_data_browser_proxy.js
@@ -14,15 +14,6 @@
 
 /**
  * @typedef {{
- *   id: string,
- *   start: number,
- *   children: !Array<CookieDetails>,
- * }}
- */
-export let CookieList;
-
-/**
- * @typedef {{
  *   localData: string,
  *   site: string,
  * }}
@@ -30,15 +21,6 @@
 export let LocalDataItem;
 
 /**
- * TODO(dschuyler): add |filter| and |order|.
- * @typedef {{
- *   items: !Array<!LocalDataItem>,
- *   total: number,
- * }}
- */
-let LocalDataList;
-
-/**
  * Number of cookies attached to a given domain / eTLD+1.
  * @typedef {{
  *   etldPlus1: string,
@@ -51,7 +33,7 @@
 export class LocalDataBrowserProxy {
   /**
    * @param {string} filter Search filter (use "" for none).
-   * @return {!Promise<!LocalDataList>}
+   * @return {!Promise<!Array<!LocalDataItem>>}
    */
   getDisplayList(filter) {}
 
@@ -69,15 +51,16 @@
   removeShownItems() {}
 
   /**
-   * Remove a specific list item. Completion signaled by on-tree-item-removed.
-   * @param {string} id Which element to delete.
+   * Remove data for a specific site. Completion signaled by
+   * on-tree-item-removed.
+   * @param {string} site Site to delete data for.
    */
-  removeItem(id) {}
+  removeSite(site) {}
 
   /**
    * Gets the cookie details for a particular site.
    * @param {string} site The name of the site.
-   * @return {!Promise<!CookieList>}
+   * @return {!Promise<!Array<!CookieDetails>>}
    */
   getCookieDetails(site) {}
 
@@ -96,11 +79,10 @@
   reloadCookies() {}
 
   /**
-   * TODO(dschuyler): merge with removeItem().
-   * Removes a given cookie.
-   * @param {string} path The path to the parent cookie.
+   * Removes a given piece of site data.
+   * @param {string} path The path to the item in the tree model.
    */
-  removeCookie(path) {}
+  removeItem(path) {}
 
   /**
    * Removes all SameSite=None cookies, as well as storage available in
@@ -131,8 +113,8 @@
   }
 
   /** @override */
-  removeItem(id) {
-    chrome.send('localData.removeItem', [id]);
+  removeSite(site) {
+    chrome.send('localData.removeSite', [site]);
   }
 
   /** @override */
@@ -151,8 +133,8 @@
   }
 
   /** @override */
-  removeCookie(path) {
-    chrome.send('localData.removeCookie', [path]);
+  removeItem(path) {
+    chrome.send('localData.removeItem', [path]);
   }
 
   /** @override */
diff --git a/chrome/browser/resources/settings/site_settings/site_data.js b/chrome/browser/resources/settings/site_settings/site_data.js
index c0529c1..d9613b8 100644
--- a/chrome/browser/resources/settings/site_settings/site_data.js
+++ b/chrome/browser/resources/settings/site_settings/site_data.js
@@ -130,12 +130,10 @@
   currentRouteChanged(currentRoute, previousRoute) {
     GlobalScrollTargetBehaviorImpl.currentRouteChanged.call(this, currentRoute);
     // Reload cookies on navigation to the site data page from a different
-    // route, except when a search query is present, as that will be handled by
-    // onFilterChanged_.
-    // TODO (crbug.com/1141796): Remove this layering violation.
-    const searchQueryParam =
-        Router.getInstance().getQueryParameters().get('searchSubpage');
-    if (currentRoute === routes.SITE_SETTINGS_SITE_DATA && !searchQueryParam) {
+    // page. Avoid reloading on repeated navigations to the same page, as these
+    // are likely search queries.
+    if (currentRoute === routes.SITE_SETTINGS_SITE_DATA &&
+        currentRoute !== previousRoute) {
       this.isLoading_ = true;
       // Needed to fix iron-list rendering issue. The list will not render
       // correctly until a scroll occurs.
@@ -205,12 +203,12 @@
    * @private
    */
   onFilterChanged_(current, previous) {
-    // Ignore the first undefined -> defined transition, unless |current| has a
-    // value. This can occur if the first navigation to the page contains a
-    // search query parameter.
-    // TODO (crbug.com/1141796): Remove requirement to perform this check as
-    // it is subtle and a flow on from a layering violation.
-    if (previous === undefined && !current) {
+    // Ignore filter changes which do not occur on the site data page. The
+    // site settings data details subpage expects the tree model to remain in
+    // the same state.
+    if (previous === undefined ||
+        Router.getInstance().getCurrentRoute() !==
+            routes.SITE_SETTINGS_SITE_DATA) {
       return;
     }
     this.updateSiteList_();
@@ -222,8 +220,8 @@
    */
   updateSiteList_() {
     this.isLoading_ = true;
-    this.browserProxy_.getDisplayList(this.filter).then(listInfo => {
-      this.updateList('sites', item => item.site, listInfo.items);
+    this.browserProxy_.getDisplayList(this.filter).then(localDataItems => {
+      this.updateList('sites', item => item.site, localDataItems);
       this.isLoading_ = false;
       this.fire('site-data-list-complete');
     });
diff --git a/chrome/browser/resources/settings/site_settings/site_data_details_subpage.js b/chrome/browser/resources/settings/site_settings/site_data_details_subpage.js
index 23b145b..2ac38ede 100644
--- a/chrome/browser/resources/settings/site_settings/site_data_details_subpage.js
+++ b/chrome/browser/resources/settings/site_settings/site_data_details_subpage.js
@@ -18,7 +18,7 @@
 import {Route, RouteObserverBehavior, Router} from '../router.m.js';
 
 import {CookieDataForDisplay, CookieDetails, getCookieData} from './cookie_info.js';
-import {CookieList, LocalDataBrowserProxy, LocalDataBrowserProxyImpl} from './local_data_browser_proxy.js';
+import {LocalDataBrowserProxy, LocalDataBrowserProxyImpl} from './local_data_browser_proxy.js';
 
 
 const categoryLabels = {
@@ -60,9 +60,6 @@
 
     /** @private */
     site_: String,
-
-    /** @private */
-    siteId_: String,
   },
 
   /**
@@ -118,12 +115,11 @@
   },
 
   /**
-   * @param {!CookieList} cookies
+   * @param {!Array<!CookieDetails>} cookies
    * @private
    */
   onCookiesLoaded_(cookies) {
-    this.siteId_ = cookies.id;
-    this.entries_ = cookies.children;
+    this.entries_ = cookies;
     // Set up flag for expanding cookie details.
     this.entries_.forEach(function(e) {
       e.expanded_ = false;
@@ -136,12 +132,11 @@
    * @private
    */
   onCookiesLoadFailed_() {
-    this.siteId_ = '';
     this.entries_ = [];
   },
 
   /**
-   * A handler for when the user opts to remove a single cookie.
+   * Retrieves a string description for the provided |item|.
    * @param {!CookieDetails} item
    * @return {string}
    * @private
@@ -167,7 +162,7 @@
   onRemove_(event) {
     MetricsBrowserProxyImpl.getInstance().recordSettingsPageHistogram(
         PrivacyElementInteractions.COOKIE_DETAILS_REMOVE_ITEM);
-    this.browserProxy_.removeCookie(
+    this.browserProxy_.removeItem(
         /** @type {!CookieDetails} */ (event.currentTarget.dataset).idPath);
   },
 
@@ -177,6 +172,6 @@
   removeAll() {
     MetricsBrowserProxyImpl.getInstance().recordSettingsPageHistogram(
         PrivacyElementInteractions.COOKIE_DETAILS_REMOVE_ALL);
-    this.browserProxy_.removeCookie(this.siteId_);
+    this.browserProxy_.removeSite(this.site_);
   },
 });
diff --git a/chrome/browser/resources/settings/site_settings/site_data_entry.js b/chrome/browser/resources/settings/site_settings/site_data_entry.js
index 4b6ee303..1c7d375 100644
--- a/chrome/browser/resources/settings/site_settings/site_data_entry.js
+++ b/chrome/browser/resources/settings/site_settings/site_data_entry.js
@@ -55,6 +55,6 @@
     e.stopPropagation();
     MetricsBrowserProxyImpl.getInstance().recordSettingsPageHistogram(
         PrivacyElementInteractions.SITE_DATA_REMOVE_SITE);
-    this.browserProxy_.removeItem(this.model.site);
+    this.browserProxy_.removeSite(this.model.site);
   },
 });
diff --git a/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc b/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc
index c4d03686..dd64054 100644
--- a/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc
+++ b/chrome/browser/safe_browsing/download_protection/deep_scanning_browsertest.cc
@@ -7,9 +7,12 @@
 #include "base/base64.h"
 #include "base/path_service.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
+#include "base/threading/thread_restrictions.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/download/download_prefs.h"
+#include "chrome/browser/enterprise/connectors/connectors_service.h"
 #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h"
 #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h"
 #include "chrome/browser/policy/dm_token_utils.h"
@@ -98,12 +101,21 @@
 
 // Integration tests for download deep scanning behavior, only mocking network
 // traffic and FCM dependencies.
-class DownloadDeepScanningBrowserTest
+class DownloadDeepScanningBrowserTestBase
     : public DeepScanningBrowserTestBase,
       public content::DownloadManager::Observer,
       public download::DownloadItem::Observer {
  public:
-  DownloadDeepScanningBrowserTest() = default;
+  // |connectors_machine_scope| indicates whether the Connector prefs such as
+  // OnFileDownloadedEnterpriseConnector and OnSecurityEventEnterpriseConnector
+  // should be set at the machine or user scope.
+  explicit DownloadDeepScanningBrowserTestBase(bool connectors_machine_scope)
+      : connectors_machine_scope_(connectors_machine_scope) {
+    if (!connectors_machine_scope) {
+      scoped_feature_list_.InitAndEnableFeature(
+          enterprise_connectors::kPerProfileConnectorsEnabled);
+    }
+  }
 
   void OnDownloadCreated(content::DownloadManager* manager,
                          download::DownloadItem* item) override {
@@ -116,12 +128,27 @@
   }
 
   void SetUpReporting() {
-    SetOnSecurityEventReporting(browser()->profile()->GetPrefs(), true);
+    SetOnSecurityEventReporting(browser()->profile()->GetPrefs(),
+                                /*enabled*/ true, /*enabled_event_names*/ {},
+                                connectors_machine_scope());
     client_ = std::make_unique<policy::MockCloudPolicyClient>();
     client_->SetDMToken("dm_token");
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
     extensions::SafeBrowsingPrivateEventRouterFactory::GetForProfile(
         browser()->profile())
         ->SetBrowserCloudPolicyClientForTesting(client_.get());
+#else
+    if (connectors_machine_scope()) {
+      extensions::SafeBrowsingPrivateEventRouterFactory::GetForProfile(
+          browser()->profile())
+          ->SetBrowserCloudPolicyClientForTesting(client_.get());
+    } else {
+      extensions::SafeBrowsingPrivateEventRouterFactory::GetForProfile(
+          browser()->profile())
+          ->SetProfileCloudPolicyClientForTesting(client_.get());
+    }
+#endif
     identity_test_environment_ =
         std::make_unique<signin::IdentityTestEnvironment>();
     identity_test_environment_->MakePrimaryAccountAvailable(kUserName);
@@ -157,8 +184,17 @@
     ObserveDownloadManager();
     AuthorizeForDeepScanning();
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
     SetDMTokenForTesting(
         policy::DMToken::CreateValidTokenForTesting("dm_token"));
+#else
+    if (connectors_machine_scope()) {
+      SetDMTokenForTesting(
+          policy::DMToken::CreateValidTokenForTesting("dm_token"));
+    } else {
+      SetProfileDMToken(browser()->profile(), "dm_token");
+    }
+#endif
     SetAnalysisConnector(browser()->profile()->GetPrefs(),
                          enterprise_connectors::FILE_DOWNLOADED,
                          R"({
@@ -170,7 +206,8 @@
                                 }
                               ],
                               "block_password_protected": true
-                            })");
+                            })",
+                         connectors_machine_scope());
   }
 
   void WaitForDownloadToFinish() {
@@ -254,7 +291,7 @@
     BinaryUploadServiceFactory::GetInstance()->SetTestingFactory(
         browser()->profile(),
         base::BindRepeating(
-            &DownloadDeepScanningBrowserTest::CreateBinaryUploadService,
+            &DownloadDeepScanningBrowserTestBase::CreateBinaryUploadService,
             base::Unretained(this)));
   }
 
@@ -271,7 +308,7 @@
         ->test_safe_browsing_service()
         ->GetTestUrlLoaderFactory()
         ->SetInterceptor(base::BindRepeating(
-            &DownloadDeepScanningBrowserTest::InterceptRequest,
+            &DownloadDeepScanningBrowserTestBase::InterceptRequest,
             base::Unretained(this)));
   }
 
@@ -289,6 +326,8 @@
         ->SetAuthForTesting("dm_token", /*authorized=*/true);
   }
 
+  bool connectors_machine_scope() const { return connectors_machine_scope_; }
+
  private:
   std::unique_ptr<KeyedService> CreateBinaryUploadService(
       content::BrowserContext* browser_context) {
@@ -349,10 +388,27 @@
 
   std::unique_ptr<policy::MockCloudPolicyClient> client_;
   std::unique_ptr<signin::IdentityTestEnvironment> identity_test_environment_;
+
+  bool connectors_machine_scope_;
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
-IN_PROC_BROWSER_TEST_F(DownloadDeepScanningBrowserTest,
+class DownloadDeepScanningBrowserTest
+    : public DownloadDeepScanningBrowserTestBase,
+      public testing::WithParamInterface<bool> {
+ public:
+  DownloadDeepScanningBrowserTest()
+      : DownloadDeepScanningBrowserTestBase(GetParam()) {}
+};
+
+INSTANTIATE_TEST_SUITE_P(, DownloadDeepScanningBrowserTest, testing::Bool());
+
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest,
                        SafeDownloadHasCorrectDangerType) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   // The file is SAFE according to the metadata check
   ClientDownloadResponse metadata_response;
   metadata_response.set_verdict(ClientDownloadResponse::SAFE);
@@ -395,7 +451,11 @@
   EXPECT_EQ(item->GetState(), download::DownloadItem::COMPLETE);
 }
 
-IN_PROC_BROWSER_TEST_F(DownloadDeepScanningBrowserTest, FailedScanFailsOpen) {
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest, FailedScanFailsOpen) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   // The file is SAFE according to the metadata check
   ClientDownloadResponse metadata_response;
   metadata_response.set_verdict(ClientDownloadResponse::SAFE);
@@ -437,8 +497,12 @@
   EXPECT_EQ(item->GetState(), download::DownloadItem::COMPLETE);
 }
 
-IN_PROC_BROWSER_TEST_F(DownloadDeepScanningBrowserTest,
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest,
                        PartialFailureShowsMalwareWarning) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   // The file is SAFE according to the metadata check
   ClientDownloadResponse metadata_response;
   metadata_response.set_verdict(ClientDownloadResponse::SAFE);
@@ -484,8 +548,12 @@
   EXPECT_EQ(item->GetState(), download::DownloadItem::IN_PROGRESS);
 }
 
-IN_PROC_BROWSER_TEST_F(DownloadDeepScanningBrowserTest,
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest,
                        PartialFailureShowsDlpWarning) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   // The file is SAFE according to the metadata check
   ClientDownloadResponse metadata_response;
   metadata_response.set_verdict(ClientDownloadResponse::SAFE);
@@ -530,8 +598,12 @@
   EXPECT_EQ(item->GetState(), download::DownloadItem::INTERRUPTED);
 }
 
-IN_PROC_BROWSER_TEST_F(DownloadDeepScanningBrowserTest,
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest,
                        DangerousHostNotMalwareScanned) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   // The file is DANGEROUS_HOST according to the metadata check
   ClientDownloadResponse metadata_response;
   metadata_response.set_verdict(ClientDownloadResponse::DANGEROUS_HOST);
@@ -562,8 +634,12 @@
   EXPECT_EQ(item->GetState(), download::DownloadItem::IN_PROGRESS);
 }
 
-IN_PROC_BROWSER_TEST_F(DownloadDeepScanningBrowserTest,
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest,
                        PasswordProtectedTxtFilesAreBlocked) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   // The file is SAFE according to the metadata check
   ClientDownloadResponse metadata_response;
   metadata_response.set_verdict(ClientDownloadResponse::SAFE);
@@ -586,7 +662,11 @@
   EXPECT_EQ(item->GetState(), download::DownloadItem::INTERRUPTED);
 }
 
-IN_PROC_BROWSER_TEST_F(DownloadDeepScanningBrowserTest, MultipleFCMResponses) {
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest, MultipleFCMResponses) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   SetUpReporting();
   base::HistogramTester histograms;
 
@@ -674,8 +754,12 @@
                                 true, 1);
 }
 
-IN_PROC_BROWSER_TEST_F(DownloadDeepScanningBrowserTest,
+IN_PROC_BROWSER_TEST_P(DownloadDeepScanningBrowserTest,
                        DlpAndMalwareViolations) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   SetUpReporting();
   base::HistogramTester histograms;
 
@@ -745,13 +829,15 @@
 }
 
 class DownloadRestrictionsDeepScanningBrowserTest
-    : public DownloadDeepScanningBrowserTest {
+    : public DownloadDeepScanningBrowserTestBase,
+      public testing::WithParamInterface<bool> {
  public:
-  DownloadRestrictionsDeepScanningBrowserTest() = default;
+  DownloadRestrictionsDeepScanningBrowserTest()
+      : DownloadDeepScanningBrowserTestBase(GetParam()) {}
   ~DownloadRestrictionsDeepScanningBrowserTest() override = default;
 
   void SetUpOnMainThread() override {
-    DownloadDeepScanningBrowserTest::SetUpOnMainThread();
+    DownloadDeepScanningBrowserTestBase::SetUpOnMainThread();
 
     browser()->profile()->GetPrefs()->SetInteger(
         prefs::kDownloadRestrictions,
@@ -766,12 +852,21 @@
                                   "tags": ["malware"]
                                 }
                               ]
-                            })");
+                            })",
+                         connectors_machine_scope());
   }
 };
 
-IN_PROC_BROWSER_TEST_F(DownloadRestrictionsDeepScanningBrowserTest,
+INSTANTIATE_TEST_SUITE_P(,
+                         DownloadRestrictionsDeepScanningBrowserTest,
+                         testing::Bool());
+
+IN_PROC_BROWSER_TEST_P(DownloadRestrictionsDeepScanningBrowserTest,
                        ReportsDownloadsBlockedByDownloadRestrictions) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   SetUpReporting();
 
   // The file is DANGEROUS according to the metadata check
@@ -815,13 +910,15 @@
 }
 
 class AllowlistedUrlDeepScanningBrowserTest
-    : public DownloadDeepScanningBrowserTest {
+    : public DownloadDeepScanningBrowserTestBase,
+      public testing::WithParamInterface<bool> {
  public:
-  AllowlistedUrlDeepScanningBrowserTest() = default;
+  AllowlistedUrlDeepScanningBrowserTest()
+      : DownloadDeepScanningBrowserTestBase(GetParam()) {}
   ~AllowlistedUrlDeepScanningBrowserTest() override = default;
 
   void SetUpOnMainThread() override {
-    DownloadDeepScanningBrowserTest::SetUpOnMainThread();
+    DownloadDeepScanningBrowserTestBase::SetUpOnMainThread();
 
     base::ListValue domain_list;
     domain_list.AppendString(embedded_test_server()->base_url().host_piece());
@@ -830,8 +927,16 @@
   }
 };
 
-IN_PROC_BROWSER_TEST_F(AllowlistedUrlDeepScanningBrowserTest,
+INSTANTIATE_TEST_SUITE_P(,
+                         AllowlistedUrlDeepScanningBrowserTest,
+                         testing::Bool());
+
+IN_PROC_BROWSER_TEST_P(AllowlistedUrlDeepScanningBrowserTest,
                        AllowlistedUrlStillDoesDlp) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   // The file is SAFE according to the metadata check
   ClientDownloadResponse metadata_response;
   metadata_response.set_verdict(ClientDownloadResponse::SAFE);
@@ -872,10 +977,13 @@
 // This test validates that metadata check verdicts and deep scanning verdicts
 // override each other correctly and only report up to 1 event.
 class MetadataCheckAndDeepScanningBrowserTest
-    : public DownloadDeepScanningBrowserTest,
+    : public DownloadDeepScanningBrowserTestBase,
       public testing::WithParamInterface<
-          std::tuple<ClientDownloadResponse::Verdict, ScanningVerdict>> {
+          std::tuple<ClientDownloadResponse::Verdict, ScanningVerdict, bool>> {
  public:
+  MetadataCheckAndDeepScanningBrowserTest()
+      : DownloadDeepScanningBrowserTestBase(std::get<2>(GetParam())) {}
+
   ClientDownloadResponse::Verdict metadata_check_verdict() const {
     return std::get<0>(GetParam());
   }
@@ -990,9 +1098,14 @@
                         ClientDownloadResponse::UNKNOWN),
         testing::Values(ScanningVerdict::MALWARE,
                         ScanningVerdict::UNWANTED,
-                        ScanningVerdict::SAFE)));
+                        ScanningVerdict::SAFE),
+        testing::Bool()));
 
 IN_PROC_BROWSER_TEST_P(MetadataCheckAndDeepScanningBrowserTest, Test) {
+  // This allows the blocking DM token reads happening on profile-Connector
+  // triggers.
+  base::ScopedAllowBlockingForTesting allow_blocking;
+
   SetUpReporting();
   SetAnalysisConnector(browser()->profile()->GetPrefs(),
                        enterprise_connectors::FILE_DOWNLOADED,
@@ -1004,7 +1117,8 @@
                                 "tags": ["malware"]
                               }
                             ]
-                          })");
+                          })",
+                       connectors_machine_scope());
   base::HistogramTester histograms;
 
   // Set up the metadata response.
diff --git a/chrome/browser/service_process/service_process_control.cc b/chrome/browser/service_process/service_process_control.cc
index fe51be7..71c9ea126 100644
--- a/chrome/browser/service_process/service_process_control.cc
+++ b/chrome/browser/service_process/service_process_control.cc
@@ -194,8 +194,8 @@
       CreateServiceProcessCommandLine());
   // And then start the process asynchronously.
   launcher_ = new Launcher(std::move(cmd_line));
-  launcher_->Run(base::Bind(&ServiceProcessControl::OnProcessLaunched,
-                            base::Unretained(this)));
+  launcher_->Run(base::BindOnce(&ServiceProcessControl::OnProcessLaunched,
+                                base::Unretained(this)));
 }
 
 void ServiceProcessControl::Disconnect() {
@@ -273,15 +273,13 @@
 void ServiceProcessControl::RunHistogramsCallback() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!histograms_callback_.is_null()) {
-    histograms_callback_.Run();
-    histograms_callback_.Reset();
+    std::move(histograms_callback_).Run();
   }
   histograms_timeout_callback_.Cancel();
 }
 
-bool ServiceProcessControl::GetHistograms(
-    const base::Closure& histograms_callback,
-    const base::TimeDelta& timeout) {
+bool ServiceProcessControl::GetHistograms(base::OnceClosure histograms_callback,
+                                          const base::TimeDelta& timeout) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   DCHECK(!histograms_callback.is_null());
   histograms_callback_.Reset();
@@ -302,12 +300,12 @@
       &ServiceProcessControl::OnHistograms, base::Unretained(this)));
 
   // Run timeout task to make sure |histograms_callback| is called.
-  histograms_timeout_callback_.Reset(base::Bind(
+  histograms_timeout_callback_.Reset(base::BindOnce(
       &ServiceProcessControl::RunHistogramsCallback, base::Unretained(this)));
   content::GetUIThreadTaskRunner({})->PostDelayedTask(
       FROM_HERE, histograms_timeout_callback_.callback(), timeout);
 
-  histograms_callback_ = histograms_callback;
+  histograms_callback_ = std::move(histograms_callback);
   return true;
 }
 
@@ -332,9 +330,9 @@
 // Execute the command line to start the process asynchronously.
 // After the command is executed, |task| is called with the process handle on
 // the UI thread.
-void ServiceProcessControl::Launcher::Run(const base::Closure& task) {
+void ServiceProcessControl::Launcher::Run(base::OnceClosure task) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  notify_task_ = task;
+  notify_task_ = std::move(task);
   content::GetProcessLauncherTaskRunner()->PostTask(
       FROM_HERE, base::BindOnce(&Launcher::DoRun, this));
 }
@@ -345,8 +343,7 @@
 
 void ServiceProcessControl::Launcher::Notify() {
   DCHECK(!notify_task_.is_null());
-  notify_task_.Run();
-  notify_task_.Reset();
+  std::move(notify_task_).Run();
 }
 
 #if !defined(OS_MAC)
diff --git a/chrome/browser/service_process/service_process_control.h b/chrome/browser/service_process/service_process_control.h
index 07928e54..c0f6a12 100644
--- a/chrome/browser/service_process/service_process_control.h
+++ b/chrome/browser/service_process/service_process_control.h
@@ -109,7 +109,7 @@
   // success or timeout. The method resets any previous callback.
   // Returns false if service is not running or other failure, callback will not
   // be called in this case.
-  bool GetHistograms(const base::Closure& cloud_print_status_callback,
+  bool GetHistograms(base::OnceClosure cloud_print_status_callback,
                      const base::TimeDelta& timeout);
 
   service_manager::InterfaceProvider& remote_interfaces() {
@@ -128,7 +128,7 @@
     // Execute the command line to start the process asynchronously. After the
     // command is executed |task| is called with the process handle on the UI
     // thread.
-    void Run(const base::Closure& task);
+    void Run(base::OnceClosure task);
 
     bool launched() const { return launched_; }
     base::ProcessId saved_pid() const { return saved_pid_; }
@@ -144,7 +144,7 @@
     void DoRun();
     void Notify();
     std::unique_ptr<base::CommandLine> cmd_line_;
-    base::Closure notify_task_;
+    base::OnceClosure notify_task_;
     bool launched_;
     uint32_t retry_count_;
     base::Process process_;
@@ -208,10 +208,10 @@
 
   // Callback that gets invoked when a message with histograms is received from
   // the service process.
-  base::Closure histograms_callback_;
+  base::OnceClosure histograms_callback_;
 
   // Callback that gets invoked if service didn't reply in time.
-  base::CancelableClosure histograms_timeout_callback_;
+  base::CancelableOnceClosure histograms_timeout_callback_;
 
   // If true changes to UpgradeObserver are applied, if false they are ignored.
   bool apply_changes_from_upgrade_observer_;
diff --git a/chrome/browser/service_process/service_process_control_browsertest.cc b/chrome/browser/service_process/service_process_control_browsertest.cc
index 7ba16b5..b40be31b 100644
--- a/chrome/browser/service_process/service_process_control_browsertest.cc
+++ b/chrome/browser/service_process/service_process_control_browsertest.cc
@@ -422,8 +422,8 @@
   ASSERT_FALSE(ServiceProcessControl::GetInstance()->IsConnected());
   EXPECT_CALL(*this, MockHistogramsCallback()).Times(0);
   EXPECT_FALSE(ServiceProcessControl::GetInstance()->GetHistograms(
-      base::BindRepeating(&ServiceProcessControlBrowserTest::HistogramsCallback,
-                          base::Unretained(this), base::DoNothing()),
+      base::BindOnce(&ServiceProcessControlBrowserTest::HistogramsCallback,
+                     base::Unretained(this), base::DoNothing()),
       base::TimeDelta()));
 }
 
@@ -434,8 +434,8 @@
   EXPECT_CALL(*this, MockHistogramsCallback()).Times(0);
   base::RunLoop run_loop;
   EXPECT_TRUE(ServiceProcessControl::GetInstance()->GetHistograms(
-      base::BindRepeating(&ServiceProcessControlBrowserTest::HistogramsCallback,
-                          base::Unretained(this), run_loop.QuitClosure()),
+      base::BindOnce(&ServiceProcessControlBrowserTest::HistogramsCallback,
+                     base::Unretained(this), run_loop.QuitClosure()),
       base::TimeDelta::FromMilliseconds(100)));
   EXPECT_CALL(*this, MockHistogramsCallback()).Times(1);
   EXPECT_TRUE(ServiceProcessControl::GetInstance()->Shutdown());
@@ -450,8 +450,8 @@
   // Wait for real callback by providing large timeout value.
   base::RunLoop run_loop;
   EXPECT_TRUE(ServiceProcessControl::GetInstance()->GetHistograms(
-      base::BindRepeating(&ServiceProcessControlBrowserTest::HistogramsCallback,
-                          base::Unretained(this), run_loop.QuitClosure()),
+      base::BindOnce(&ServiceProcessControlBrowserTest::HistogramsCallback,
+                     base::Unretained(this), run_loop.QuitClosure()),
       base::TimeDelta::FromHours(1)));
   EXPECT_CALL(*this, MockHistogramsCallback()).Times(1);
   run_loop.Run();
diff --git a/chrome/browser/signin/signin_manager.cc b/chrome/browser/signin/signin_manager.cc
index 63e6b1aa..b59ae4e 100644
--- a/chrome/browser/signin/signin_manager.cc
+++ b/chrome/browser/signin/signin_manager.cc
@@ -104,18 +104,26 @@
 }
 
 // signin::IdentityManager::Observer implementation.
-void SigninManager::AfterSyncPrimaryAccountCleared() {
+void SigninManager::OnPrimaryAccountChanged(
+    const signin::PrimaryAccountChangeEvent& event_details) {
   // This is needed for the case where the user chooses to start syncing
   // with an account that is different from the unconsented primary account
   // (not the first in cookies) but then cancels. In that case, the tokens stay
   // the same. In all the other cases, either the token will be revoked which
   // will trigger an update for the unconsented primary account or the
   // primary account stays the same but the sync consent is revoked.
-  // |OnPrimaryAccountCleared| is not used to ensure the value of the
-  // unconsented primary account doesn't change during other observers being
-  // notified. All observers should see the same value for the unconsented
-  // primary account.
-  UpdateUnconsentedPrimaryAccount();
+  if (event_details.GetEventTypeFor(signin::ConsentLevel::kSync) !=
+      signin::PrimaryAccountChangeEvent::Type::kCleared) {
+    return;
+  }
+
+  // It is important to update the primary account after all observers process
+  // the current OnPrimaryAccountChanged() as all observers should see the same
+  // value for the unconsented primary account. Schedule the potential update
+  // on the next run loop.
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::BindOnce(&SigninManager::UpdateUnconsentedPrimaryAccount,
+                                weak_ptr_factory_.GetWeakPtr()));
 }
 
 void SigninManager::OnRefreshTokenUpdatedForAccount(
diff --git a/chrome/browser/signin/signin_manager.h b/chrome/browser/signin/signin_manager.h
index 4ecab06..3b14dac 100644
--- a/chrome/browser/signin/signin_manager.h
+++ b/chrome/browser/signin/signin_manager.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_H_
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
 
@@ -36,7 +37,8 @@
   base::Optional<CoreAccountInfo> ComputeUnconsentedPrimaryAccountInfo() const;
 
   // signin::IdentityManager::Observer implementation.
-  void AfterSyncPrimaryAccountCleared() override;
+  void OnPrimaryAccountChanged(
+      const signin::PrimaryAccountChangeEvent& event_details) override;
   void OnRefreshTokenUpdatedForAccount(
       const CoreAccountInfo& account_info) override;
   void OnRefreshTokenRemovedForAccount(
@@ -53,6 +55,8 @@
   signin::IdentityManager* identity_manager_;
   bool unconsented_primary_account_revoked_during_load_ = false;
 
+  base::WeakPtrFactory<SigninManager> weak_ptr_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(SigninManager);
 };
 
diff --git a/chrome/browser/signin/signin_manager_unittest.cc b/chrome/browser/signin/signin_manager_unittest.cc
index 6c44d0dd..a418a64 100644
--- a/chrome/browser/signin/signin_manager_unittest.cc
+++ b/chrome/browser/signin/signin_manager_unittest.cc
@@ -215,6 +215,8 @@
 
   // Tests that sync primary account is cleared, but unconsented account is not.
   identity_test_env()->RevokeSyncConsent();
+  base::RunLoop().RunUntilIdle();
+
   EXPECT_EQ(account, identity_manager()->GetPrimaryAccountInfo(
                          ConsentLevel::kNotRequired));
   EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSync));
@@ -349,6 +351,8 @@
   // Clear primary account but do not delete the account. The unconsented
   // primary account should be updated to be the first account in cookies.
   identity_test_env()->RevokeSyncConsent();
+  base::RunLoop().RunUntilIdle();
+
   // Primary account is cleared, but unconsented account is not.
   EXPECT_FALSE(identity_manager()->HasPrimaryAccount());
   EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSync));
@@ -380,6 +384,7 @@
   ExpectSyncPrimaryAccountSetEvent(account);
 
   identity_test_env()->ClearPrimaryAccount();
+  base::RunLoop().RunUntilIdle();
 
   EXPECT_EQ(1U, observer().events().size());
   auto event = observer().events()[0];
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 2ba38ae..93437040 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
@@ -1100,7 +1100,7 @@
 <translation id="8583805026567836021">Fiókadatok törlése</translation>
 <translation id="8587585930972369234">Lenyomva tartás a kereséshez</translation>
 <translation id="860043288473659153">Kártyatulajdonos neve</translation>
-<translation id="860282621117673749">Árcsökkenéssel kapcsolatos értesítések</translation>
+<translation id="860282621117673749">Árcsökkenési értesítések</translation>
 <translation id="8616006591992756292">Előfordulhat, hogy a böngészési előzmények más formái még megtalálhatók Google-fiókjában a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> webhelyen.</translation>
 <translation id="8617240290563765734">Megnyitja a letöltött tartalomban szereplő javasolt URL-t?</translation>
 <translation id="8636825310635137004">Ha a többi eszközén is szeretné elérni lapjait, kapcsolja be a szinkronizálást</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index f84bcb5a..7bd1a2d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -933,7 +933,7 @@
 <translation id="7484997419527351112">‏Discover – כבוי</translation>
 <translation id="7493994139787901920"><ph name="VERSION" /> (עודכן <ph name="TIME_SINCE_UPDATE" />)</translation>
 <translation id="7494974237137038751">חיסכון בחבילת הגלישה</translation>
-<translation id="7498271377022651285">המתן…</translation>
+<translation id="7498271377022651285">נא להמתין…</translation>
 <translation id="7507207699631365376">הצגת <ph name="BEGIN_LINK" />מדיניות הפרטיות<ph name="END_LINK" /> של הספק הזה</translation>
 <translation id="7514365320538308">הורדה</translation>
 <translation id="751961395872307827">לא ניתן להתחבר לאתר</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
index c557742c..bac81840 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -432,6 +432,7 @@
 <translation id="4095146165863963773">Bu ilova maʼlumotlari oʻchirilsinmi?</translation>
 <translation id="4095189195365058471">Saqlab olish: <ph name="BEGIN_NEW" />Yangi<ph name="END_NEW" /></translation>
 <translation id="4099578267706723511">Google’ga foydalanish statistikasi va ishdan chiqish hisobotlarini jo‘natish orqali Chrome’ning takomillashtirishga yordam bering</translation>
+<translation id="4108314971463891922">Kuzatish</translation>
 <translation id="4108998448622696017">Xavfli tahdidlarni aniqlaydi va sizni ulardan himoya qiladi.</translation>
 <translation id="4116038641877404294">Saytlarni oflayn ko‘rish uchun yuklab oling</translation>
 <translation id="4135200667068010335">Yopiq varaq uzatiladigan qurilmalar roʻyxati.</translation>
@@ -643,6 +644,7 @@
 <translation id="5606787249466187650">Privacy Sandbox bilan tanishing</translation>
 <translation id="5620163320393916465">Hech qanday parol saqlanmagan</translation>
 <translation id="5620928963363755975">“Yuklanmalar” jildidagi fayl va sahiflarni “Boshqa parametrlar” tugmasidan topish mumkin</translation>
+<translation id="562289928968387744">Munosabatlarni boshqarish</translation>
 <translation id="5626134646977739690">Ism:</translation>
 <translation id="5639724618331995626">Barcha saytlarni ochishga ruxsat berish</translation>
 <translation id="5648166631817621825">Oxirgi 7 kun</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 432a1d6..bfde248 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
@@ -424,7 +424,7 @@
 <translation id="4000212216660919741">离线版首页</translation>
 <translation id="4034817413553209278">{HOURS,plural, =1{# 小时}other{# 小时}}</translation>
 <translation id="4045764304651014138">使用情况数据</translation>
-<translation id="4056223980640387499">棕色调</translation>
+<translation id="4056223980640387499">棕褐色调</translation>
 <translation id="4060598801229743805">选项位于屏幕顶部附近</translation>
 <translation id="4062305924942672200">法律信息</translation>
 <translation id="4084682180776658562">添加书签</translation>
diff --git a/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc b/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc
index 507b4da..44cf7c86 100644
--- a/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc
+++ b/chrome/browser/ui/cookie_controls/cookie_controls_controller_unittest.cc
@@ -73,9 +73,10 @@
             content_settings::CookieControlsMode::kBlockThirdParty));
     NavigateAndCommit(GURL("chrome://newtab"));
 
+    cookie_settings_ = CookieSettingsFactory::GetForProfile(profile());
     cookie_controls_ =
         std::make_unique<content_settings::CookieControlsController>(
-            CookieSettingsFactory::GetForProfile(profile()), nullptr);
+            cookie_settings_, nullptr);
     cookie_controls_->AddObserver(mock());
     testing::Mock::VerifyAndClearExpectations(mock());
   }
@@ -90,6 +91,10 @@
     return cookie_controls_.get();
   }
 
+  content_settings::CookieSettings* cookie_settings() {
+    return cookie_settings_.get();
+  }
+
   MockCookieControlsView* mock() { return &mock_; }
 
   content_settings::PageSpecificContentSettings*
@@ -101,6 +106,7 @@
  private:
   MockCookieControlsView mock_;
   std::unique_ptr<content_settings::CookieControlsController> cookie_controls_;
+  scoped_refptr<content_settings::CookieSettings> cookie_settings_;
 };
 
 TEST_F(CookieControlsTest, NewTabPage) {
@@ -171,6 +177,29 @@
   testing::Mock::VerifyAndClearExpectations(mock());
 }
 
+TEST_F(CookieControlsTest, AllCookiesBlocked) {
+  NavigateAndCommit(GURL("https://example.com"));
+  EXPECT_CALL(*mock(),
+              OnStatusChanged(CookieControlsStatus::kEnabled,
+                              CookieControlsEnforcement::kNoEnforcement, 0, 0));
+  cookie_controls()->Update(web_contents());
+  testing::Mock::VerifyAndClearExpectations(mock());
+
+  // Disable all cookies - an OnStatusCallback should get triggered.
+  EXPECT_CALL(*mock(),
+              OnStatusChanged(CookieControlsStatus::kEnabled,
+                              CookieControlsEnforcement::kNoEnforcement, 0, 0));
+  cookie_settings()->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
+  testing::Mock::VerifyAndClearExpectations(mock());
+
+  // Disable cookie blocking for example.com.
+  EXPECT_CALL(*mock(),
+              OnStatusChanged(CookieControlsStatus::kDisabledForSite,
+                              CookieControlsEnforcement::kNoEnforcement, 0, 0));
+  cookie_controls()->OnCookieBlockingEnabledForSite(false);
+  testing::Mock::VerifyAndClearExpectations(mock());
+}
+
 TEST_F(CookieControlsTest, DisableForSite) {
   NavigateAndCommit(GURL("https://example.com"));
   EXPECT_CALL(*mock(),
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_container.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_container.cc
index 64b9581..842823d 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_container.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_dialog_container.cc
@@ -174,10 +174,13 @@
     SetButtons(ui::DIALOG_BUTTON_NONE);
     SetModalType(kModalType);
     AddChildView(std::move(dialog_body));
-    RegisterWindowClosingCallback(std::move(close_callback));
     SetLayoutManager(std::make_unique<views::FillLayout>());
     chrome::RecordDialogCreation(chrome::DialogIdentifier::NATIVE_CONTAINER);
     SetPreferredSize(size);
+
+    if (!close_callback.is_null()) {
+      RegisterWindowClosingCallback(std::move(close_callback));
+    }
   }
   NativeDialogContainer(const NativeDialogContainer&) = delete;
   NativeDialogContainer& operator=(const NativeDialogContainer&) = delete;
diff --git a/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.cc b/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.cc
index 20cde1a4..6c723cfe 100644
--- a/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.cc
+++ b/chrome/browser/ui/views/location_bar/cookie_controls_bubble_view.cc
@@ -245,8 +245,11 @@
   }
   switch (status_) {
     case CookieControlsStatus::kEnabled:
-      return l10n_util::GetPluralStringFUTF16(IDS_COOKIE_CONTROLS_DIALOG_TITLE,
-                                              blocked_cookies_.value_or(0));
+      return l10n_util::GetPluralStringFUTF16(
+          (controller_->FirstPartyCookiesBlocked()
+               ? IDS_COOKIE_CONTROLS_DIALOG_TITLE_ALL_BLOCKED
+               : IDS_COOKIE_CONTROLS_DIALOG_TITLE),
+          blocked_cookies_.value_or(0));
     case CookieControlsStatus::kDisabledForSite:
       return l10n_util::GetStringUTF16(IDS_COOKIE_CONTROLS_DIALOG_TITLE_OFF);
     case CookieControlsStatus::kUninitialized:
diff --git a/chrome/browser/ui/views/toolbar/chrome_labs_bubble_view.cc b/chrome/browser/ui/views/toolbar/chrome_labs_bubble_view.cc
index 7321f4b..3c0eea8 100644
--- a/chrome/browser/ui/views/toolbar/chrome_labs_bubble_view.cc
+++ b/chrome/browser/ui/views/toolbar/chrome_labs_bubble_view.cc
@@ -34,7 +34,8 @@
   kUnspecifiedSelected = 0,
   kReadLaterSelected = 1,
   kTabSearchSelected = 2,
-  kMaxValue = kTabSearchSelected,
+  kTabScrollingSelected = 3,
+  kMaxValue = kTabScrollingSelected,
 };
 
 void EmitToHistogram(const base::string16& selected_lab_state,
@@ -61,6 +62,8 @@
       return ChromeLabsSelectedLab::kReadLaterSelected;
     } else if (internal_name == flag_descriptions::kEnableTabSearchFlagId) {
       return ChromeLabsSelectedLab::kTabSearchSelected;
+    } else if (internal_name == flag_descriptions::kScrollableTabStripFlagId) {
+      return ChromeLabsSelectedLab::kTabScrollingSelected;
     } else {
       return ChromeLabsSelectedLab::kUnspecifiedSelected;
     }
diff --git a/chrome/browser/ui/views/toolbar/chrome_labs_bubble_view_model.cc b/chrome/browser/ui/views/toolbar/chrome_labs_bubble_view_model.cc
index a2c89d5..f44c26ac 100644
--- a/chrome/browser/ui/views/toolbar/chrome_labs_bubble_view_model.cc
+++ b/chrome/browser/ui/views/toolbar/chrome_labs_bubble_view_model.cc
@@ -49,6 +49,14 @@
                          "list. Access from the Bookmarks bar."),
       version_info::Channel::BETA));
 
+  // Tab Scrolling.
+  lab_info_.emplace_back(
+      LabInfo(flag_descriptions::kScrollableTabStripFlagId,
+              base::ASCIIToUTF16("Tab Scrolling"),
+              base::ASCIIToUTF16(
+                  "Enables tab strip to scroll left and right when full."),
+              version_info::Channel::BETA));
+
   // Tab Search.
   lab_info_.emplace_back(
       LabInfo(flag_descriptions::kEnableTabSearchFlagId,
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
index a3e8fe3..8ef46bf 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -1049,7 +1049,7 @@
 
   ShowAppInfoInNativeDialog(web_ui()->GetWebContents(),
                             Profile::FromWebUI(web_ui()), extension,
-                            base::OnceClosure());
+                            base::DoNothing());
 }
 
 void AppLauncherHandler::HandleReorderApps(const base::ListValue* args) {
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
index c9c342ff..9cc2833 100644
--- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
+++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
@@ -182,16 +182,19 @@
 
 NTPResourceCache::WindowType NTPResourceCache::GetWindowType(
     Profile* profile, content::RenderProcessHost* render_host) {
-  if (profile->IsGuestSession() || profile->IsEphemeralGuestProfile()) {
+  if (profile->IsGuestSession() || profile->IsEphemeralGuestProfile())
     return GUEST;
-  } else if (render_host) {
-    // Sometimes the |profile| is the parent (non-incognito) version of the user
-    // so we check the |render_host| if it is provided.
-    if (render_host->GetBrowserContext()->IsOffTheRecord())
-      return INCOGNITO;
-  } else if (profile->IsOffTheRecord()) {
+
+  // Sometimes the |profile| is the parent (non-incognito) version of the user
+  // so we check the |render_host| if it is provided.
+  if (render_host && render_host->GetBrowserContext()->IsOffTheRecord())
+    profile = Profile::FromBrowserContext(render_host->GetBrowserContext());
+
+  if (profile->IsIncognitoProfile())
     return INCOGNITO;
-  }
+  if (profile->IsOffTheRecord())
+    return NON_PRIMARY_OTR;
+
   return NORMAL;
 }
 
@@ -213,14 +216,27 @@
 
 base::RefCountedMemory* NTPResourceCache::GetNewTabHTML(WindowType win_type) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  if (win_type == GUEST) {
-    return GetNewTabGuestHTML();
-  }
+  switch (win_type) {
+    case GUEST:
+      return GetNewTabGuestHTML();
 
-  DCHECK(win_type == INCOGNITO);
-  if (!new_tab_incognito_html_)
-    CreateNewTabIncognitoHTML();
-  return new_tab_incognito_html_.get();
+    case INCOGNITO:
+      if (!new_tab_incognito_html_)
+        CreateNewTabIncognitoHTML();
+      return new_tab_incognito_html_.get();
+
+    case NON_PRIMARY_OTR:
+      if (!new_tab_non_primary_otr_html_) {
+        std::string empty_html;
+        new_tab_non_primary_otr_html_ =
+            base::RefCountedString::TakeString(&empty_html);
+      }
+      return new_tab_non_primary_otr_html_.get();
+
+    case NORMAL:
+      NOTREACHED();
+      return nullptr;
+  }
 }
 
 base::RefCountedMemory* NTPResourceCache::GetNewTabCSS(WindowType win_type) {
@@ -259,14 +275,12 @@
   // A change occurred to one of the preferences we care about, so flush the
   // cache.
   new_tab_incognito_html_ = nullptr;
-  new_tab_html_ = nullptr;
   new_tab_css_ = nullptr;
 }
 
 // TODO(dbeam): why must Invalidate() and OnPreferenceChanged() both exist?
 void NTPResourceCache::Invalidate() {
   new_tab_incognito_html_ = nullptr;
-  new_tab_html_ = nullptr;
   new_tab_incognito_css_ = nullptr;
   new_tab_css_ = nullptr;
   new_tab_guest_html_ = nullptr;
@@ -453,10 +467,8 @@
 }
 
 void NTPResourceCache::CreateNewTabIncognitoCSS() {
-  // Same theme is used by all off-the-record profiles, so just getting it from
-  // the first one.
   const ui::ThemeProvider& tp = ThemeService::GetThemeProviderForProfile(
-      profile_->GetAllOffTheRecordProfiles()[0]);
+      profile_->GetPrimaryOTRProfile());
 
   // Generate the replacements.
   ui::TemplateReplacements substitutions;
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.h b/chrome/browser/ui/webui/ntp/ntp_resource_cache.h
index 353a3ec..6a52055 100644
--- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.h
+++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.h
@@ -46,6 +46,8 @@
     NORMAL,
     INCOGNITO,
     GUEST,
+    // The OTR profile that is not used for Incognito or Guest windows.
+    NON_PRIMARY_OTR,
   };
 
   explicit NTPResourceCache(Profile* profile);
@@ -120,13 +122,13 @@
 
   Profile* profile_;
 
-  scoped_refptr<base::RefCountedMemory> new_tab_html_;
   scoped_refptr<base::RefCountedMemory> new_tab_css_;
   scoped_refptr<base::RefCountedMemory> new_tab_guest_html_;
   scoped_refptr<base::RefCountedMemory> new_tab_guest_signed_in_html_;
   scoped_refptr<base::RefCountedMemory> new_tab_guest_signed_out_html_;
   scoped_refptr<base::RefCountedMemory> new_tab_incognito_html_;
   scoped_refptr<base::RefCountedMemory> new_tab_incognito_css_;
+  scoped_refptr<base::RefCountedMemory> new_tab_non_primary_otr_html_;
   content::NotificationRegistrar registrar_;
   PrefChangeRegistrar profile_pref_change_registrar_;
   PrefChangeRegistrar local_state_pref_change_registrar_;
diff --git a/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc b/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc
index 9e58e687..6a8860ce9 100644
--- a/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc
+++ b/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc
@@ -100,22 +100,27 @@
 
 namespace settings {
 
-constexpr char kChildren[] = "children";
-constexpr char kCount[] = "count";
-constexpr char kId[] = "id";
-constexpr char kItems[] = "items";
-constexpr char kStart[] = "start";
 constexpr char kLocalData[] = "localData";
 constexpr char kSite[] = "site";
-constexpr char kTotal[] = "total";
 
-CookiesViewHandler::Request::Request() {
-  Clear();
+CookiesViewHandler::Request::Request(TreeModelBatchBehavior batch_behavior,
+                                     base::OnceClosure initial_task)
+    : batch_behavior(batch_behavior), initial_task(std::move(initial_task)) {
+  if (batch_behavior == Request::ASYNC_BATCH)
+    batch_end_task = base::DoNothing::Once();
 }
 
-void CookiesViewHandler::Request::Clear() {
-  should_send_list = false;
-  callback_id_.clear();
+CookiesViewHandler::Request::Request(base::OnceClosure initial_task,
+                                     base::OnceClosure batch_end_task)
+    : batch_behavior(Request::TreeModelBatchBehavior::ASYNC_BATCH),
+      initial_task(std::move(initial_task)),
+      batch_end_task(std::move(batch_end_task)) {}
+
+CookiesViewHandler::Request::~Request() = default;
+
+CookiesViewHandler::Request::Request(Request&& other) {
+  initial_task = std::move(other.initial_task);
+  batch_end_task = std::move(other.batch_end_task);
 }
 
 CookiesViewHandler::CookiesViewHandler()
@@ -125,16 +130,21 @@
 }
 
 void CookiesViewHandler::OnJavascriptAllowed() {
+  // Some requests assume that a tree model has already been created, creating
+  // here ensures this is true.
+  pending_requests_.emplace(
+      Request::ASYNC_BATCH,
+      base::BindOnce(&CookiesViewHandler::RecreateCookiesTreeModel,
+                     callback_weak_ptr_factory_.GetWeakPtr()));
+  ProcessPendingRequests();
 }
 
 void CookiesViewHandler::OnJavascriptDisallowed() {
   callback_weak_ptr_factory_.InvalidateWeakPtrs();
-  request_.Clear();
+  pending_requests_ = std::queue<Request>();
 }
 
 void CookiesViewHandler::RegisterMessages() {
-  EnsureCookiesTreeModelCreated();
-
   web_ui()->RegisterMessageCallback(
       "localData.getDisplayList",
       base::BindRepeating(&CookiesViewHandler::HandleGetDisplayList,
@@ -160,8 +170,8 @@
       base::BindRepeating(&CookiesViewHandler::HandleGetNumCookiesString,
                           base::Unretained(this)));
   web_ui()->RegisterMessageCallback(
-      "localData.removeCookie",
-      base::BindRepeating(&CookiesViewHandler::HandleRemove,
+      "localData.removeSite",
+      base::BindRepeating(&CookiesViewHandler::HandleRemoveSite,
                           base::Unretained(this)));
   web_ui()->RegisterMessageCallback(
       "localData.removeThirdPartyCookies",
@@ -176,30 +186,7 @@
 void CookiesViewHandler::TreeNodesAdded(ui::TreeModel* model,
                                         ui::TreeModelNode* parent,
                                         size_t start,
-                                        size_t count) {
-  // Skip if there is a batch update in progress.
-  if (batch_update_)
-    return;
-
-  CookiesTreeModel* tree_model = static_cast<CookiesTreeModel*>(model);
-  CookieTreeNode* parent_node = tree_model->AsNode(parent);
-
-  std::unique_ptr<base::ListValue> children(new base::ListValue);
-  // Passing false for |include_quota_nodes| since they don't reflect reality
-  // until bug http://crbug.com/642955 is fixed and local/session storage is
-  // counted against the total.
-  model_util_->GetChildNodeList(
-      parent_node, start, count, /*include_quota_nodes=*/false, children.get());
-
-  base::DictionaryValue args;
-  if (parent == tree_model->GetRoot())
-    args.Set(kId, std::make_unique<base::Value>());
-  else
-    args.SetString(kId, model_util_->GetTreeNodeId(parent_node));
-  args.SetInteger(kStart, int{start});
-  args.Set(kChildren, std::move(children));
-  FireWebUIListener("on-tree-item-added", args);
-}
+                                        size_t count) {}
 
 void CookiesViewHandler::TreeNodesRemoved(ui::TreeModel* model,
                                           ui::TreeModelNode* parent,
@@ -208,74 +195,79 @@
   // Skip if there is a batch update in progress.
   if (batch_update_)
     return;
-
-  CookiesTreeModel* tree_model = static_cast<CookiesTreeModel*>(model);
-
-  base::DictionaryValue args;
-  if (parent == tree_model->GetRoot())
-    args.Set(kId, std::make_unique<base::Value>());
-  else
-    args.SetString(kId, model_util_->GetTreeNodeId(tree_model->AsNode(parent)));
-  args.SetInteger(kStart, int{start});
-  args.SetInteger(kCount, int{count});
-  FireWebUIListener("on-tree-item-removed", args);
+  FireWebUIListener("on-tree-item-removed");
 }
 
 void CookiesViewHandler::TreeModelBeginBatch(CookiesTreeModel* model) {
   DCHECK(!batch_update_);  // There should be no nested batch begin.
+  DCHECK(!pending_requests_.empty());
   batch_update_ = true;
+
+  DCHECK_NE(Request::NO_BATCH, pending_requests_.front().batch_behavior);
 }
 
 void CookiesViewHandler::TreeModelEndBatch(CookiesTreeModel* model) {
   DCHECK(batch_update_);
+  DCHECK(!pending_requests_.empty());
   batch_update_ = false;
 
-  if (request_.should_send_list) {
-    SendLocalDataList(model->GetRoot());
-  } else if (!request_.callback_id_.empty()) {
-    ResolveJavascriptCallback(base::Value(request_.callback_id_),
-                              (base::Value()));
-    request_.Clear();
+  DCHECK_NE(Request::NO_BATCH, pending_requests_.front().batch_behavior);
+
+  if (pending_requests_.front().batch_behavior == Request::ASYNC_BATCH) {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, std::move(pending_requests_.front().batch_end_task));
+
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(&CookiesViewHandler::RequestComplete,
+                                  callback_weak_ptr_factory_.GetWeakPtr()));
   }
 }
 
-void CookiesViewHandler::EnsureCookiesTreeModelCreated() {
-  if (!cookies_tree_model_.get()) {
-    Profile* profile = Profile::FromWebUI(web_ui());
-    cookies_tree_model_ = CookiesTreeModel::CreateForProfile(profile);
-    cookies_tree_model_->AddCookiesTreeObserver(this);
-  }
+void CookiesViewHandler::SetCookiesTreeModelForTesting(
+    std::unique_ptr<CookiesTreeModel> cookies_tree_model) {
+  cookies_tree_model_for_testing_ = std::move(cookies_tree_model);
 }
 
 void CookiesViewHandler::RecreateCookiesTreeModel() {
   cookies_tree_model_.reset();
   filter_.clear();
-  sorted_sites_.clear();
-  EnsureCookiesTreeModelCreated();
-
-  CHECK(!request_.callback_id_.empty());
-  ResolveJavascriptCallback(base::Value(request_.callback_id_),
-                            (base::Value()));
-  request_.Clear();
+  cookies_tree_model_ =
+      cookies_tree_model_for_testing_.get()
+          ? std::move(cookies_tree_model_for_testing_)
+          : CookiesTreeModel::CreateForProfile(Profile::FromWebUI(web_ui()));
+  cookies_tree_model_->AddCookiesTreeObserver(this);
 }
 
 void CookiesViewHandler::HandleGetCookieDetails(const base::ListValue* args) {
-  CHECK(request_.callback_id_.empty());
   CHECK_EQ(2U, args->GetList().size());
-  request_.callback_id_ = args->GetList()[0].GetString();
+  std::string callback_id = args->GetList()[0].GetString();
   std::string site = args->GetList()[1].GetString();
 
   AllowJavascript();
+  pending_requests_.emplace(
+      Request::NO_BATCH, base::BindOnce(&CookiesViewHandler::GetCookieDetails,
+                                        callback_weak_ptr_factory_.GetWeakPtr(),
+                                        callback_id, site));
+  ProcessPendingRequests();
+}
+
+void CookiesViewHandler::GetCookieDetails(const std::string& callback_id,
+                                          const std::string& site) {
   const CookieTreeNode* node = model_util_->GetTreeNodeFromTitle(
       cookies_tree_model_->GetRoot(), base::UTF8ToUTF16(site));
 
   if (!node) {
-    RejectJavascriptCallback(base::Value(request_.callback_id_), base::Value());
-    request_.Clear();
+    RejectJavascriptCallback(base::Value(callback_id), base::Value());
     return;
   }
 
-  SendCookieDetails(node);
+  base::ListValue children;
+  // TODO (crbug.com/642955): Pass true for |include_quota_nodes| parameter
+  // when quota nodes include local/session storage in the total.
+  model_util_->GetChildNodeDetails(node, /* include_quota_nodes */ false,
+                                   &children);
+
+  ResolveJavascriptCallback(base::Value(callback_id), std::move(children));
 }
 
 void CookiesViewHandler::HandleGetNumCookiesString(
@@ -295,106 +287,155 @@
 }
 
 void CookiesViewHandler::HandleGetDisplayList(const base::ListValue* args) {
-  CHECK(request_.callback_id_.empty());
   CHECK_EQ(2U, args->GetList().size());
-  request_.callback_id_ = args->GetList()[0].GetString();
+  std::string callback_id = args->GetList()[0].GetString();
   base::string16 filter = base::UTF8ToUTF16(args->GetList()[1].GetString());
 
   AllowJavascript();
-  request_.should_send_list = true;
-  // Resetting the filter is a heavy operation, avoid unnecessary filtering.
+  pending_requests_.emplace(
+      Request::SYNC_BATCH,
+      base::BindOnce(&CookiesViewHandler::GetDisplayList,
+                     callback_weak_ptr_factory_.GetWeakPtr(), callback_id,
+                     filter));
+
+  ProcessPendingRequests();
+}
+
+void CookiesViewHandler::GetDisplayList(std::string callback_id,
+                                        const base::string16& filter) {
   if (filter != filter_) {
     filter_ = filter;
-    sorted_sites_.clear();
     cookies_tree_model_->UpdateSearchResults(filter_);
-    return;
+    DCHECK(!batch_update_) << "Expected CookiesTreeModel::UpdateSearchResults "
+                           << "to execute synchronously.";
   }
-  SendLocalDataList(cookies_tree_model_->GetRoot());
+  ReturnLocalDataList(callback_id);
 }
 
 void CookiesViewHandler::HandleReloadCookies(const base::ListValue* args) {
-  CHECK(request_.callback_id_.empty());
   CHECK_EQ(1U, args->GetList().size());
-  request_.callback_id_ = args->GetList()[0].GetString();
+  std::string callback_id = args->GetList()[0].GetString();
 
-  AllowJavascript();
-  RecreateCookiesTreeModel();
+  // Allowing Javascript for the first time will queue a task to create a new
+  // tree model. Thus the tree model only needs to be recreated if Javascript
+  // has already been allowed. Reload cookies is often the first call made by
+  // pages using this handler, so this avoids unnecessary work.
+  if (IsJavascriptAllowed()) {
+    pending_requests_.emplace(
+        base::BindOnce(&CookiesViewHandler::RecreateCookiesTreeModel,
+                       callback_weak_ptr_factory_.GetWeakPtr()),
+        base::BindOnce(&CookiesViewHandler::ResolveJavascriptCallback,
+                       callback_weak_ptr_factory_.GetWeakPtr(),
+                       base::Value(callback_id), base::Value()));
+  } else {
+    AllowJavascript();
+    pending_requests_.emplace(
+        Request::NO_BATCH,
+        base::BindOnce(&CookiesViewHandler::ResolveJavascriptCallback,
+                       callback_weak_ptr_factory_.GetWeakPtr(),
+                       base::Value(callback_id), base::Value()));
+  }
+  ProcessPendingRequests();
 }
 
 void CookiesViewHandler::HandleRemoveAll(const base::ListValue* args) {
-  CHECK(request_.callback_id_.empty());
   CHECK_EQ(1U, args->GetList().size());
-  request_.callback_id_ = args->GetList()[0].GetString();
-
   AllowJavascript();
-  cookies_tree_model_->DeleteAllStoredObjects();
-  sorted_sites_.clear();
+
+  std::string callback_id = args->GetList()[0].GetString();
+
+  pending_requests_.emplace(
+      Request::SYNC_BATCH,
+      base::BindOnce(&CookiesViewHandler::RemoveAll,
+                     callback_weak_ptr_factory_.GetWeakPtr(), callback_id));
+  ProcessPendingRequests();
 }
 
-void CookiesViewHandler::HandleRemove(const base::ListValue* args) {
+void CookiesViewHandler::RemoveAll(const std::string& callback_id) {
+  cookies_tree_model_->DeleteAllStoredObjects();
+  ResolveJavascriptCallback(base::Value(callback_id), base::Value());
+}
+
+void CookiesViewHandler::HandleRemoveItem(const base::ListValue* args) {
   std::string node_path = args->GetList()[0].GetString();
 
   AllowJavascript();
-  const CookieTreeNode* node = model_util_->GetTreeNodeFromPath(
-      cookies_tree_model_->GetRoot(), node_path);
+  pending_requests_.emplace(
+      Request::NO_BATCH,
+      base::BindOnce(&CookiesViewHandler::RemoveItem,
+                     callback_weak_ptr_factory_.GetWeakPtr(), node_path));
+  ProcessPendingRequests();
+}
+
+void CookiesViewHandler::RemoveItem(const std::string& path) {
+  const CookieTreeNode* node =
+      model_util_->GetTreeNodeFromPath(cookies_tree_model_->GetRoot(), path);
   if (node) {
     cookies_tree_model_->DeleteCookieNode(const_cast<CookieTreeNode*>(node));
-    sorted_sites_.clear();
   }
 }
 
 void CookiesViewHandler::HandleRemoveThirdParty(const base::ListValue* args) {
-  CHECK(request_.callback_id_.empty());
   CHECK_EQ(1U, args->GetList().size());
-  request_.callback_id_ = args->GetList()[0].GetString();
+  std::string callback_id = args->GetList()[0].GetString();
 
   AllowJavascript();
   Profile* profile = Profile::FromWebUI(web_ui());
-  ClearSameSiteNoneData(
-      base::BindOnce(&CookiesViewHandler::RecreateCookiesTreeModel,
-                     callback_weak_ptr_factory_.GetWeakPtr()),
-      profile,
-      /* clear_storage */ true);
+
+  pending_requests_.emplace(
+      base::BindOnce(
+          content::ClearSameSiteNoneData,
+          base::BindOnce(&CookiesViewHandler::RecreateCookiesTreeModel,
+                         callback_weak_ptr_factory_.GetWeakPtr()),
+          profile,
+          /* clear_storage */ true),
+      base::BindOnce(&CookiesViewHandler::ResolveJavascriptCallback,
+                     callback_weak_ptr_factory_.GetWeakPtr(),
+                     base::Value(callback_id), base::Value()));
+  ProcessPendingRequests();
 }
 
 void CookiesViewHandler::HandleRemoveShownItems(const base::ListValue* args) {
   CHECK_EQ(0U, args->GetList().size());
 
   AllowJavascript();
+  pending_requests_.emplace(
+      Request::NO_BATCH,
+      base::BindOnce(&CookiesViewHandler::RemoveShownItems,
+                     callback_weak_ptr_factory_.GetWeakPtr()));
+  ProcessPendingRequests();
+}
+
+void CookiesViewHandler::RemoveShownItems() {
   CookieTreeNode* parent = cookies_tree_model_->GetRoot();
   while (!parent->children().empty())
     cookies_tree_model_->DeleteCookieNode(parent->children().front().get());
 }
 
-void CookiesViewHandler::HandleRemoveItem(const base::ListValue* args) {
+void CookiesViewHandler::HandleRemoveSite(const base::ListValue* args) {
   CHECK_EQ(1U, args->GetList().size());
-  CHECK(request_.callback_id_.empty());
   base::string16 site = base::UTF8ToUTF16(args->GetList()[0].GetString());
-
   AllowJavascript();
+  pending_requests_.emplace(
+      Request::NO_BATCH,
+      base::BindOnce(&CookiesViewHandler::RemoveSite,
+                     callback_weak_ptr_factory_.GetWeakPtr(), site));
+  ProcessPendingRequests();
+}
+
+void CookiesViewHandler::RemoveSite(const base::string16& site) {
   CookieTreeNode* parent = cookies_tree_model_->GetRoot();
   const auto i = std::find_if(
       parent->children().cbegin(), parent->children().cend(),
       [&site](const auto& node) { return node->GetTitle() == site; });
   if (i != parent->children().cend()) {
     cookies_tree_model_->DeleteCookieNode(i->get());
-    sorted_sites_.clear();
   }
 }
 
-void CookiesViewHandler::SendLocalDataList(const CookieTreeNode* parent) {
+void CookiesViewHandler::ReturnLocalDataList(const std::string& callback_id) {
   CHECK(cookies_tree_model_.get());
-  CHECK(request_.should_send_list);
-  const size_t parent_child_count = parent->children().size();
-  if (sorted_sites_.empty()) {
-    // Sort the list by site.
-    sorted_sites_.reserve(parent_child_count);  // Optimization, hint size.
-    for (size_t i = 0; i < parent_child_count; ++i) {
-      const base::string16& title = parent->children()[i]->GetTitle();
-      sorted_sites_.push_back(LabelAndIndex(title, i));
-    }
-    std::sort(sorted_sites_.begin(), sorted_sites_.end());
-  }
+  auto* parent = cookies_tree_model_->GetRoot();
 
   // The layers in the CookieTree are:
   //   root - Top level.
@@ -402,9 +443,8 @@
   //   category - Cookies, Local Storage, etc.
   //   item - Info on the actual thing.
   // Gather list of sites with some highlights of the categories and items.
-  std::unique_ptr<base::ListValue> site_list(new base::ListValue);
-  for (const auto& sorted_site : sorted_sites_) {
-    const CookieTreeNode* site = parent->children()[sorted_site.second].get();
+  base::ListValue site_list;
+  for (const auto& site : parent->children()) {
     base::string16 description;
     for (const auto& category : site->children()) {
       if (!description.empty())
@@ -438,53 +478,44 @@
     list_info->Set(kLocalData, std::make_unique<base::Value>(description));
     std::string title = base::UTF16ToUTF8(site->GetTitle());
     list_info->Set(kSite, std::make_unique<base::Value>(title));
-    site_list->Append(std::move(list_info));
+    site_list.Append(std::move(list_info));
   }
 
-  base::DictionaryValue response;
-  response.Set(kItems, std::move(site_list));
-  response.Set(kTotal,
-               std::make_unique<base::Value>(int{sorted_sites_.size()}));
+  // Sort the list into alphabetical order based on site name.
+  std::sort(site_list.begin(), site_list.end(),
+            [=](const base::Value& a, const base::Value& b) {
+              return *a.FindStringKey(kSite) < *b.FindStringKey(kSite);
+            });
 
-  ResolveJavascriptCallback(base::Value(request_.callback_id_), response);
-  request_.Clear();
+  ResolveJavascriptCallback(base::Value(callback_id), std::move(site_list));
 }
 
-void CookiesViewHandler::SendChildren(const CookieTreeNode* parent) {
-  std::unique_ptr<base::ListValue> children(new base::ListValue);
-  // Passing false for |include_quota_nodes| since they don't reflect reality
-  // until bug http://crbug.com/642955 is fixed and local/session storage is
-  // counted against the total.
-  model_util_->GetChildNodeList(parent, /*start=*/0, parent->children().size(),
-                                /*include_quota_nodes=*/false, children.get());
+void CookiesViewHandler::ProcessPendingRequests() {
+  if (pending_requests_.empty())
+    return;
 
-  base::DictionaryValue args;
-  if (parent == cookies_tree_model_->GetRoot())
-    args.Set(kId, std::make_unique<base::Value>());
-  else
-    args.SetString(kId, model_util_->GetTreeNodeId(parent));
-  args.Set(kChildren, std::move(children));
+  // To ensure that multiple requests do not run during a tree model batch
+  // update, only tasks for a single request are queued at any one time.
+  if (request_in_progress_)
+    return;
 
-  ResolveJavascriptCallback(base::Value(request_.callback_id_), args);
-  request_.Clear();
+  request_in_progress_ = true;
+
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, std::move(pending_requests_.front().initial_task));
+  if (pending_requests_.front().batch_behavior != Request::ASYNC_BATCH) {
+    base::SequencedTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(&CookiesViewHandler::RequestComplete,
+                                  callback_weak_ptr_factory_.GetWeakPtr()));
+  }
 }
 
-void CookiesViewHandler::SendCookieDetails(const CookieTreeNode* parent) {
-  std::unique_ptr<base::ListValue> children(new base::ListValue);
-  // Passing false for |include_quota_nodes| since they don't reflect reality
-  // until bug http://crbug.com/642955 is fixed and local/session storage is
-  // counted against the total.
-  model_util_->GetChildNodeDetails(parent, false, children.get());
-
-  base::DictionaryValue args;
-  if (parent == cookies_tree_model_->GetRoot())
-    args.Set(kId, std::make_unique<base::Value>());
-  else
-    args.SetString(kId, model_util_->GetTreeNodeId(parent));
-  args.Set(kChildren, std::move(children));
-
-  ResolveJavascriptCallback(base::Value(request_.callback_id_), args);
-  request_.Clear();
+void CookiesViewHandler::RequestComplete() {
+  DCHECK(!pending_requests_.empty());
+  DCHECK(!batch_update_);
+  request_in_progress_ = false;
+  pending_requests_.pop();
+  ProcessPendingRequests();
 }
 
 }  // namespace settings
diff --git a/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h b/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h
index 27b91d2..c98b2c97 100644
--- a/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h
+++ b/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h
@@ -45,49 +45,60 @@
   void TreeModelBeginBatch(CookiesTreeModel* model) override;
   void TreeModelEndBatch(CookiesTreeModel* model) override;
 
+  // Sets the tree model that will be used when the handler creates a tree
+  // model, instead of building from from the profile.
+  void SetCookiesTreeModelForTesting(
+      std::unique_ptr<CookiesTreeModel> cookies_tree_model);
+
  private:
   friend class CookiesViewHandlerTest;
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, HandleGetDisplayList);
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, HandleRemoveShownItems);
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, SingleRequestDuringBatch);
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, NoStarvation);
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, ImmediateTreeOperation);
   FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest,
                            HandleReloadCookiesAndGetDisplayList);
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, HandleGetCookieDetails);
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, HandleRemoveAll);
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, HandleRemoveItem);
+  FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, HandleRemoveSite);
 
-  // Creates the CookiesTreeModel if necessary.
-  void EnsureCookiesTreeModelCreated();
-
-  // Resets the CookiesTreeModel, the current |filter_|, and the site list.
+  // Recreates the CookiesTreeModel and resets the current |filter_|.
   void RecreateCookiesTreeModel();
 
   // Set |filter_| and get a portion (or all) of the list items.
   void HandleGetDisplayList(const base::ListValue* args);
+  void GetDisplayList(std::string callback_id, const base::string16& filter);
 
   // Remove all items matching the current |filter_|.
   void HandleRemoveShownItems(const base::ListValue* args);
+  void RemoveShownItems();
 
-  // Remove a single item.
-  void HandleRemoveItem(const base::ListValue* args);
+  // Remove selected sites data.
+  void HandleRemoveSite(const base::ListValue* args);
+  void RemoveSite(const base::string16& site);
 
   // Retrieve cookie details for a specific site.
   void HandleGetCookieDetails(const base::ListValue* args);
+  void GetCookieDetails(const std::string& callback_id,
+                        const std::string& site);
 
   // Gets a plural string for the given number of cookies.
   void HandleGetNumCookiesString(const base::ListValue* args);
 
   // Remove all sites data.
   void HandleRemoveAll(const base::ListValue* args);
+  void RemoveAll(const std::string& callback_id);
 
-  // Remove selected sites data.
-  void HandleRemove(const base::ListValue* args);
+  // Remove a single item.
+  void HandleRemoveItem(const base::ListValue* args);
+  void RemoveItem(const std::string& path);
 
   // Removes cookies and site data available in third-party contexts.
   void HandleRemoveThirdParty(const base::ListValue* args);
 
-  // Get children nodes data and pass it to 'CookiesView.loadChildren' to
-  // update the WebUI.
-  void SendChildren(const CookieTreeNode* parent);
-
-  void SendLocalDataList(const CookieTreeNode* parent);
-
-  // Package and send cookie details for a site.
-  void SendCookieDetails(const CookieTreeNode* parent);
+  void ReturnLocalDataList(const std::string& callback_id);
 
   // Reloads the CookiesTreeModel and passes the nodes to
   // 'CookiesView.loadChildren' to update the WebUI.
@@ -99,21 +110,68 @@
   // The Cookies Tree model
   std::unique_ptr<CookiesTreeModel> cookies_tree_model_;
 
+  // Cookies tree model which can be set for testing and will be used instead
+  // of creating one directly from the profile.
+  std::unique_ptr<CookiesTreeModel> cookies_tree_model_for_testing_;
+
   // Only show items that contain |filter|.
   base::string16 filter_;
 
   struct Request {
-    Request();
-    void Clear();
+    // Specifies the batch behavior of the tree model when this request is run
+    // against it. Batch behavior must be constant across invocations, and
+    // defines when tasks can be queued.
+    enum TreeModelBatchBehavior {
+      // The request will not cause a batch operation to be started. Tasks may
+      // only be queued when the request is first processed.
+      NO_BATCH,
 
-    // Whether the request expects a list response.
-    bool should_send_list;
-    // The callback ID for the current outstanding request.
-    std::string callback_id_;
+      // The request will cause a batch to start and finish syncronously. Tasks
+      // may only be queued when the request is first processed.
+      SYNC_BATCH,
+
+      // The request will cause an asynchronous batch update to be run. Both
+      // batch end and begin may occur asynchronously. Tasks may be queued when
+      // the request is first processed, and when the batch is finished.
+      ASYNC_BATCH
+    };
+
+    // Creates a request with a task to be queued when the request is first
+    // processed.
+    Request(TreeModelBatchBehavior batch_behavior,
+            base::OnceClosure initial_task);
+
+    // Creates a request with both a task to be queued when processed, and a
+    // task to be queued when the tree model batch finishes. This constructor
+    // implies |batch_behavior| == ASYNC_BATCH.
+    Request(base::OnceClosure initial_task, base::OnceClosure batch_end_task);
+
+    ~Request();
+    Request(const Request&) = delete;
+    Request(Request&& other);
+    Request& operator=(const Request&&) = delete;
+
+    TreeModelBatchBehavior batch_behavior;
+
+    // Task which is run when the request reaches the front of the queue.
+    // Task must only interact with the tree model in a synchronous manner.
+    base::OnceClosure initial_task;
+
+    // Optional task which is queued to run when the tree model batch ends.
+    // Only valid when |batch_behavior| == ASYNC_BATCH. Must only interact with
+    // the tree model in a synchronous manner.
+    base::OnceClosure batch_end_task;
   };
 
-  // The current client request.
-  Request request_;
+  // The current client requests.
+  std::queue<Request> pending_requests_;
+  bool request_in_progress_ = false;
+
+  // Check the request queue and process the first request if approproiate.
+  void ProcessPendingRequests();
+
+  // Signal that the request at the head of the request queue is complete.
+  void RequestComplete();
 
   // Sorted index list, by site. Indexes refer to |model->GetRoot()| children.
   typedef std::pair<base::string16, size_t> LabelAndIndex;
diff --git a/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc b/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc
index 05d9e3d..2e2e56d 100644
--- a/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc
@@ -7,10 +7,25 @@
 #include <memory>
 #include <string>
 
+#include "base/test/bind.h"
 #include "base/values.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "components/browsing_data/content/mock_cookie_helper.h"
+#include "components/browsing_data/content/mock_local_storage_helper.h"
 #include "content/public/test/test_web_ui.h"
 
+namespace {
+
+constexpr char kCallbackId[] = "test-callback-id";
+constexpr char kTestOrigin1[] = "https://a-example.com";
+constexpr char kTestOrigin2[] = "https://b-example.com";
+constexpr char kTestHost1[] = "a-example.com";
+constexpr char kTestHost2[] = "b-example.com";
+constexpr char kTestCookie1[] = "A=1";
+constexpr char kTestCookie2[] = "B=1";
+
+}  // namespace
+
 namespace settings {
 
 class CookiesViewHandlerTest : public ChromeRenderViewHostTestHarness {
@@ -22,7 +37,6 @@
     web_ui_->set_web_contents(web_contents());
     handler_ = std::make_unique<CookiesViewHandler>();
     handler_->set_web_ui(web_ui());
-    handler_->AllowJavascript();
     web_ui_->ClearTrackedCalls();
   }
 
@@ -34,32 +48,475 @@
     ChromeRenderViewHostTestHarness::TearDown();
   }
 
+  void SetupTreeModelForTesting() {
+    mock_browsing_data_cookie_helper =
+        base::MakeRefCounted<browsing_data::MockCookieHelper>(profile());
+    mock_browsing_data_local_storage_helper =
+        base::MakeRefCounted<browsing_data::MockLocalStorageHelper>(profile());
+
+    auto container = std::make_unique<LocalDataContainer>(
+        mock_browsing_data_cookie_helper,
+        /*database_helper=*/nullptr, mock_browsing_data_local_storage_helper,
+        /*session_storage_helper=*/nullptr,
+        /*appcache_helper=*/nullptr,
+        /*indexed_db_helper=*/nullptr,
+        /*file_system_helper=*/nullptr,
+        /*quota_helper=*/nullptr,
+        /*service_worker_helper=*/nullptr,
+        /*data_shared_worker_helper=*/nullptr,
+        /*cache_storage_helper=*/nullptr,
+        /*media_license_helper=*/nullptr);
+    auto mock_cookies_tree_model = std::make_unique<CookiesTreeModel>(
+        std::move(container), profile()->GetExtensionSpecialStoragePolicy());
+
+    mock_browsing_data_local_storage_helper->AddLocalStorageForOrigin(
+        url::Origin::Create(GURL(kTestOrigin1)), 2);
+    mock_browsing_data_local_storage_helper->AddLocalStorageForOrigin(
+        url::Origin::Create(GURL(kTestOrigin2)), 3);
+
+    mock_browsing_data_cookie_helper->AddCookieSamples(GURL(kTestOrigin1),
+                                                       kTestCookie1);
+    mock_browsing_data_cookie_helper->AddCookieSamples(GURL(kTestOrigin2),
+                                                       kTestCookie2);
+
+    handler()->SetCookiesTreeModelForTesting(
+        std::move(mock_cookies_tree_model));
+  }
+
+  void NotifyTreeModel() {
+    mock_browsing_data_local_storage_helper->Notify();
+    mock_browsing_data_cookie_helper->Notify();
+  }
+
+  void SetupHandlerWithTreeModel() {
+    SetupTreeModelForTesting();
+    base::ListValue reload_args;
+    reload_args.AppendString(kCallbackId);
+    handler()->HandleReloadCookies(&reload_args);
+
+    // The handler will post a task to recreate the tree model.
+    task_environment()->RunUntilIdle();
+    NotifyTreeModel();
+
+    // After batch end, the handler will have posted a task to complete
+    // the callback.
+    task_environment()->RunUntilIdle();
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIResponse", data.function_name());
+    EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+    ASSERT_TRUE(data.arg2()->GetBool());
+
+    web_ui_->ClearTrackedCalls();
+  }
+
   content::TestWebUI* web_ui() { return web_ui_.get(); }
   CookiesViewHandler* handler() { return handler_.get(); }
 
  private:
   std::unique_ptr<content::TestWebUI> web_ui_;
   std::unique_ptr<CookiesViewHandler> handler_;
+
+  // Ref pointers to storage helpers used in the tree model used for testing.
+  // Retained to allow control over batch update completion.
+  scoped_refptr<browsing_data::MockLocalStorageHelper>
+      mock_browsing_data_local_storage_helper;
+  scoped_refptr<browsing_data::MockCookieHelper>
+      mock_browsing_data_cookie_helper;
 };
 
-// This unit test checks that the javascript callbacks are called correctly for
-// the reloadCookies and the getDisplayList handler cases. It also makes sure
-// that CHECKs for request_.callback_id_.empty() do not fire when multiple
-// handlers are called in sequence.
-TEST_F(CookiesViewHandlerTest, HandleReloadCookiesAndGetDisplayList) {
-  const std::string reload_callback_id("localData.reload_0");
-  const std::string get_display_list_callback_id("localData.getDisplayList_1");
+TEST_F(CookiesViewHandlerTest, SingleRequestDuringBatch) {
+  // Ensure that multiple requests do not run while a tree model batch process
+  // is running.
+  SetupTreeModelForTesting();
+
+  constexpr char kReloadCallbackID[] = "reload-cookies-callback";
+  constexpr char kGetDisplaylistCallbackID[] = "get-display-list-callback";
 
   base::ListValue reload_args;
-  reload_args.AppendString(reload_callback_id);
+  reload_args.AppendString(kReloadCallbackID);
   handler()->HandleReloadCookies(&reload_args);
-  EXPECT_EQ(1U, web_ui()->call_data().size());
+  task_environment()->RunUntilIdle();
 
+  // At the point the handler will have recreated the model (using the provided
+  // test model) and will be awaiting batch end. Performing another request
+  // should result in it not being satisfied, and instead being queued.
   base::ListValue get_display_list_args;
-  get_display_list_args.AppendString(reload_callback_id);
-  get_display_list_args.AppendString(std::string());
+  get_display_list_args.AppendString(kGetDisplaylistCallbackID);
+  get_display_list_args.AppendString("");
   handler()->HandleGetDisplayList(&get_display_list_args);
+  task_environment()->RunUntilIdle();
+
+  // Because the tree model hasn't completed the batch, no callback should
+  // have been completed.
+  EXPECT_EQ(0U, web_ui()->call_data().size());
+
+  // Completing the tree model batch should result in both callbacks being
+  // completed in the correct order.
+  NotifyTreeModel();
+  task_environment()->RunUntilIdle();
   EXPECT_EQ(2U, web_ui()->call_data().size());
+
+  const content::TestWebUI::CallData& reload_response =
+      *web_ui()->call_data().front();
+  EXPECT_EQ("cr.webUIResponse", reload_response.function_name());
+  EXPECT_EQ(kReloadCallbackID, reload_response.arg1()->GetString());
+  ASSERT_TRUE(reload_response.arg2()->GetBool());
+
+  const content::TestWebUI::CallData& get_display_list_response =
+      *web_ui()->call_data().back();
+  EXPECT_EQ("cr.webUIResponse", get_display_list_response.function_name());
+  EXPECT_EQ(kGetDisplaylistCallbackID,
+            get_display_list_response.arg1()->GetString());
+  ASSERT_TRUE(get_display_list_response.arg2()->GetBool());
+  base::Value::ConstListView local_data_list =
+      get_display_list_response.arg3()->GetList();
+  ASSERT_EQ(2U, local_data_list.size());
+  EXPECT_EQ(kTestHost1, local_data_list[0].FindKey("site")->GetString());
+  EXPECT_EQ(kTestHost2, local_data_list[1].FindKey("site")->GetString());
+}
+
+TEST_F(CookiesViewHandlerTest, NoStarvation) {
+  SetupHandlerWithTreeModel();
+
+  // Confirm that the request queue does not starve during various combinations
+  // of requests. This is achieved by queueing numerous permutations of requests
+  // which have different interaction properties with the tree model.
+  std::string current_filter = kTestHost1;
+  auto get_display_list_new_filter =
+      base::BindLambdaForTesting([&](std::string callback_id) {
+        base::ListValue args;
+        args.AppendString(callback_id);
+        current_filter = current_filter == kTestHost1 ? "" : kTestHost1;
+        args.AppendString(kTestHost1);
+        handler()->HandleGetDisplayList(&args);
+      });
+  auto get_display_list_same_filter =
+      base::BindLambdaForTesting([&](std::string callback_id) {
+        base::ListValue args;
+        args.AppendString(callback_id);
+        args.AppendString(current_filter);
+        handler()->HandleGetDisplayList(&args);
+      });
+  auto get_cookie_details =
+      base::BindLambdaForTesting([&](std::string callback_id) {
+        base::ListValue args;
+        args.AppendString(callback_id);
+        args.AppendString(kTestHost1);
+        handler()->HandleGetCookieDetails(&args);
+      });
+  auto reload_cookies =
+      base::BindLambdaForTesting([&](std::string callback_id) {
+        base::ListValue args;
+        args.AppendString(callback_id);
+        handler()->HandleReloadCookies(&args);
+      });
+  auto remove_third_party =
+      base::BindLambdaForTesting([&](std::string callback_id) {
+        base::ListValue args;
+        args.AppendString(callback_id);
+        handler()->HandleRemoveThirdParty(&args);
+      });
+  // Include a dummy request which allows the request queue to be cleared. This
+  // ensures that requests may be queued up both during, and outside of, batch
+  // updates.
+  auto process_pending_requests = base::BindLambdaForTesting(
+      [&](std::string callback_id) { task_environment()->RunUntilIdle(); });
+
+  // For completeness, test every permutation of these calls.
+  std::vector<std::pair<int, base::RepeatingCallback<void(std::string)>>>
+      request_functions = {
+          {1, get_display_list_new_filter}, {2, get_display_list_same_filter},
+          {3, get_cookie_details},          {4, reload_cookies},
+          {5, remove_third_party},          {6, process_pending_requests},
+      };
+  auto request_function_ordering =
+      [](const std::pair<int, base::RepeatingCallback<void(std::string)>>& left,
+         std::pair<int, base::RepeatingCallback<void(std::string)>>& right) {
+        return left.first < right.first;
+      };
+  std::sort(request_functions.begin(), request_functions.end(),
+            request_function_ordering);
+
+  size_t expected_response_count = 0;
+  do {
+    for (const auto& function : request_functions) {
+      // Provide a unique callback ID for each request.
+      function.second.Run(
+          std::string(kCallbackId)
+              .append(base::NumberToString(expected_response_count)));
+
+      if (function.second != process_pending_requests)
+        expected_response_count++;
+    }
+  } while (std::next_permutation(request_functions.begin(),
+                                 request_functions.end(),
+                                 request_function_ordering));
+
+  task_environment()->RunUntilIdle();
+
+  // Ensure that callbacks have been fulfilled in the order they were queued.
+  ASSERT_EQ(expected_response_count, web_ui()->call_data().size());
+  for (size_t i = 0; i < expected_response_count; i++) {
+    EXPECT_EQ(std::string(kCallbackId).append(base::NumberToString(i)),
+              web_ui()->call_data()[i]->arg1()->GetString());
+  }
+}
+
+TEST_F(CookiesViewHandlerTest, ImmediateTreeOperation) {
+  // Check that a query which assumes a tree model to have been created
+  // previously results in a tree being created before the request is handled.
+  SetupTreeModelForTesting();
+
+  base::ListValue args;
+  args.AppendString(kCallbackId);
+  args.AppendString(kTestHost1);
+  handler()->HandleGetCookieDetails(&args);
+  task_environment()->RunUntilIdle();
+
+  // At this point the handler should have queued the creation of a tree and
+  // be awaiting batch completion.
+  NotifyTreeModel();
+  task_environment()->RunUntilIdle();
+
+  // Check that the returned information is accurate, despite not having
+  // previously loaded the tree.
+  const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+  EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+  EXPECT_EQ("cr.webUIResponse", data.function_name());
+  ASSERT_TRUE(data.arg2()->GetBool());
+
+  base::Value::ConstListView cookies_list = data.arg3()->GetList();
+  ASSERT_EQ(2UL, cookies_list.size());
+  EXPECT_EQ("cookie", cookies_list[0].FindKey("type")->GetString());
+  EXPECT_EQ("local_storage", cookies_list[1].FindKey("type")->GetString());
+}
+
+TEST_F(CookiesViewHandlerTest, HandleGetDisplayList) {
+  // Ensure that getting the display list works appropriately.
+  SetupHandlerWithTreeModel();
+
+  // Retrieve a filtered list.
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    args.AppendString(kTestHost1);
+
+    handler()->HandleGetDisplayList(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIResponse", data.function_name());
+    EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+    ASSERT_TRUE(data.arg2()->GetBool());
+    base::Value::ConstListView local_data_list = data.arg3()->GetList();
+    ASSERT_EQ(1U, local_data_list.size());
+    EXPECT_EQ(kTestHost1, local_data_list[0].FindKey("site")->GetString());
+  }
+
+  // Remove the filter and confirm the full list is returned.
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    args.AppendString("");
+
+    handler()->HandleGetDisplayList(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIResponse", data.function_name());
+    EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+    ASSERT_TRUE(data.arg2()->GetBool());
+    base::Value::ConstListView local_data_list = data.arg3()->GetList();
+    ASSERT_EQ(2U, local_data_list.size());
+    EXPECT_EQ(kTestHost1, local_data_list[0].FindKey("site")->GetString());
+    EXPECT_EQ(kTestHost2, local_data_list[1].FindKey("site")->GetString());
+  }
+}
+
+TEST_F(CookiesViewHandlerTest, HandleRemoveShownItems) {
+  // Ensure that removing shown items only removes items appropriate for the
+  // current filter.
+  SetupHandlerWithTreeModel();
+
+  // Apply a filter to the list and confirm it is returned.
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    args.AppendString(kTestHost2);
+    handler()->HandleGetDisplayList(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIResponse", data.function_name());
+    EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+    ASSERT_TRUE(data.arg2()->GetBool());
+    base::Value::ConstListView local_data_list = data.arg3()->GetList();
+    ASSERT_EQ(1U, local_data_list.size());
+    EXPECT_EQ(kTestHost2, local_data_list[0].FindKey("site")->GetString());
+  }
+
+  // Remove displayed items.
+  {
+    base::ListValue args;
+    handler()->HandleRemoveShownItems(&args);
+    task_environment()->RunUntilIdle();
+  }
+
+  // Remove the filter and confirm unremoved items are returned.
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    args.AppendString("");
+    handler()->HandleGetDisplayList(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIResponse", data.function_name());
+    EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+    ASSERT_TRUE(data.arg2()->GetBool());
+    base::Value::ConstListView local_data_list = data.arg3()->GetList();
+    ASSERT_EQ(1U, local_data_list.size());
+    EXPECT_EQ(kTestHost1, local_data_list[0].FindKey("site")->GetString());
+  }
+}
+
+TEST_F(CookiesViewHandlerTest, HandleGetCookieDetails) {
+  // Ensure that the cookie details are correctly returned for a site.
+  SetupHandlerWithTreeModel();
+  base::ListValue args;
+  args.AppendString(kCallbackId);
+  args.AppendString(kTestHost1);
+  handler()->HandleGetCookieDetails(&args);
+  task_environment()->RunUntilIdle();
+
+  const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+  EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+  EXPECT_EQ("cr.webUIResponse", data.function_name());
+  ASSERT_TRUE(data.arg2()->GetBool());
+
+  base::Value::ConstListView cookies_list = data.arg3()->GetList();
+  ASSERT_EQ(2UL, cookies_list.size());
+  EXPECT_EQ("cookie", cookies_list[0].FindKey("type")->GetString());
+  EXPECT_EQ("local_storage", cookies_list[1].FindKey("type")->GetString());
+}
+
+TEST_F(CookiesViewHandlerTest, HandleRemoveAll) {
+  // Ensure that RemoveAll removes all cookies & storage.
+  SetupHandlerWithTreeModel();
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    handler()->HandleRemoveAll(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+    EXPECT_EQ("cr.webUIResponse", data.function_name());
+    ASSERT_TRUE(data.arg2()->GetBool());
+  }
+
+  // Ensure returned display list is empty.
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    args.AppendString("");
+    handler()->HandleGetDisplayList(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIResponse", data.function_name());
+    EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+    ASSERT_TRUE(data.arg2()->GetBool());
+    base::Value::ConstListView local_data_list = data.arg3()->GetList();
+    ASSERT_EQ(0U, local_data_list.size());
+  }
+}
+
+TEST_F(CookiesViewHandlerTest, HandleRemoveItem) {
+  // Delete an individual piece of site data. This requires first getting the
+  // node path ID via the HandleGetCookieDetails function.
+  SetupHandlerWithTreeModel();
+
+  // Get the appropriate path for removal.
+  std::string node_path_id;
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    args.AppendString(kTestHost1);
+    handler()->HandleGetCookieDetails(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    base::Value::ConstListView cookies_list = data.arg3()->GetList();
+    ASSERT_EQ(2UL, cookies_list.size());
+    // Find the entry item associated with the kTestCookie1 cookie.
+    for (const auto& cookie : cookies_list) {
+      if (cookie.FindKey("type")->GetString() == "cookie")
+        node_path_id = cookie.FindKey("idPath")->GetString();
+    }
+  }
+
+  // Remove path and ensure that the removed item listener fires.
+  {
+    base::ListValue args;
+    args.AppendString(node_path_id);
+    handler()->HandleRemoveItem(&args);
+    task_environment()->RunUntilIdle();
+
+    // Removal should fire an update event.
+    const content::TestWebUI::CallData& all_data =
+        *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIListenerCallback", all_data.function_name());
+    EXPECT_EQ("on-tree-item-removed", all_data.arg1()->GetString());
+  }
+
+  // Ensure that the removed item is no longer present in cookie details.
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    args.AppendString(kTestHost1);
+    handler()->HandleGetCookieDetails(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    base::Value::ConstListView cookies_list = data.arg3()->GetList();
+    ASSERT_EQ(1UL, cookies_list.size());
+    EXPECT_EQ("local_storage", cookies_list[0].FindKey("type")->GetString());
+  }
+}
+
+TEST_F(CookiesViewHandlerTest, HandleRemoveSite) {
+  SetupHandlerWithTreeModel();
+
+  // Check that removing a single site works.
+  {
+    base::ListValue args;
+    args.AppendString(kTestHost1);
+    handler()->HandleRemoveSite(&args);
+    task_environment()->RunUntilIdle();
+
+    // Removal should fire an update event.
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIListenerCallback", data.function_name());
+    EXPECT_EQ("on-tree-item-removed", data.arg1()->GetString());
+  }
+
+  // Check that the removed site is no longer present in the display list.
+  {
+    base::ListValue args;
+    args.AppendString(kCallbackId);
+    args.AppendString("");
+    handler()->HandleGetDisplayList(&args);
+    task_environment()->RunUntilIdle();
+
+    const content::TestWebUI::CallData& data = *web_ui()->call_data().back();
+    EXPECT_EQ("cr.webUIResponse", data.function_name());
+    EXPECT_EQ(kCallbackId, data.arg1()->GetString());
+    ASSERT_TRUE(data.arg2()->GetBool());
+    base::Value::ConstListView local_data_list = data.arg3()->GetList();
+    ASSERT_EQ(1U, local_data_list.size());
+    EXPECT_EQ(kTestHost2, local_data_list[0].FindKey("site")->GetString());
+  }
 }
 
 }  // namespace settings
diff --git a/chrome/browser/webapps/android/java/res/layout/pwa_install_bottom_sheet_content.xml b/chrome/browser/webapps/android/java/res/layout/pwa_install_bottom_sheet_content.xml
index f649896c..987050d8 100644
--- a/chrome/browser/webapps/android/java/res/layout/pwa_install_bottom_sheet_content.xml
+++ b/chrome/browser/webapps/android/java/res/layout/pwa_install_bottom_sheet_content.xml
@@ -22,6 +22,8 @@
         android:layout_marginStart="16dp"
         android:layout_marginEnd="16dp"
         android:layout_marginTop="22dp"
+        android:ellipsize="end"
+        android:maxLines="7"
         android:textAppearance="@style/TextAppearance.TextMedium.Secondary" />
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/screenshots_container"
diff --git a/chrome/browser/webapps/android/pwa_bottom_sheet_controller.cc b/chrome/browser/webapps/android/pwa_bottom_sheet_controller.cc
index 37fd7c9..f08f9dc60 100644
--- a/chrome/browser/webapps/android/pwa_bottom_sheet_controller.cc
+++ b/chrome/browser/webapps/android/pwa_bottom_sheet_controller.cc
@@ -23,22 +23,15 @@
 
 namespace {
 
-// Keep in sync with DevTools frontend: front_end/resources/AppManifestView.js
-const int kDescriptionMinLength = 80;
-const int kDescriptionMaxLength = 324;
-
 bool CanShowBottomSheet(content::WebContents* web_contents,
-                        const base::string16& description,
                         const std::vector<SkBitmap>& screenshots) {
   if (!base::FeatureList::IsEnabled(
           webapps::features::kPwaInstallUseBottomSheet)) {
     return false;
   }
 
-  if (description.length() < kDescriptionMinLength ||
-      description.length() > kDescriptionMaxLength || screenshots.size() == 0) {
+  if (screenshots.size() == 0)
     return false;
-  }
 
   JNIEnv* env = base::android::AttachCurrentThread();
   return Java_PwaBottomSheetControllerProvider_canShowPwaBottomSheetInstaller(
@@ -81,7 +74,7 @@
     const std::vector<SkBitmap>& screenshots,
     const base::string16& description,
     bool show_expanded) {
-  if (CanShowBottomSheet(web_contents, description, screenshots)) {
+  if (CanShowBottomSheet(web_contents, screenshots)) {
     // Lifetime of this object is managed by the Java counterpart, iff bottom
     // sheets can be shown (otherwise an infobar is used and this class is no
     // longer needed).
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index a40220d..78f42fa4 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-master-1611813560-3ca268a63c19fe3c7b36f8df8a6f0e133ca2c954.profdata
+chrome-linux-master-1611834165-3de8138b68f3249c9171d047dc9aa8e0feb18681.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 5065849..e70ae8c 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-master-1611813560-5fe7bdf565603c5bb9b7dac5f72808eb0cec1bcd.profdata
+chrome-mac-master-1611834165-5b4c2ca0c732830797b1d3211ef326065c3ef2bd.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index 69b0e22..7befdf5 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-master-1611770003-84469baf661952d041279f6747977f5c1094106e.profdata
+chrome-win32-master-1611824033-c2e20d642b54c6039dac96251f5f1f1cd63f9041.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index b8244c4..575f8950 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-master-1611802570-bc09e9d55a40e28f38cf5c2f6bcc456bc6a0cc2d.profdata
+chrome-win64-master-1611834165-f4f84b17839308b62c7941fe22fb5fc879fe91da.profdata
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index de46d22..a882060 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3891,7 +3891,6 @@
       "../browser/android/metrics/background_task_memory_metrics_emitter_unittest.cc",
       "../browser/android/oom_intervention/near_oom_monitor_unittest.cc",
       "../browser/android/oom_intervention/oom_intervention_decider_unittest.cc",
-      "../browser/android/password_ui_view_android_unittest.cc",
       "../browser/android/signin/signin_manager_android_unittest.cc",
       "../browser/android/signin/web_signin_bridge_unittest.cc",
       "../browser/android/tab_web_contents_delegate_android_unittest.cc",
@@ -3911,6 +3910,7 @@
       "../browser/history/android/visit_sql_handler_unittest.cc",
       "../browser/metrics/thread_watcher_android_unittest.cc",
       "../browser/notifications/notification_channels_provider_android_unittest.cc",
+      "../browser/password_manager/android/password_ui_view_android_unittest.cc",
       "../browser/search/contextual_search_policy_handler_android_unittest.cc",
       "../browser/translate/android/translate_bridge_unittest.cc",
       "../browser/ui/android/autofill_assistant/autofill_assistant_tab_helper_unittest.cc",
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
index 172117d..0b61214 100644
--- a/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
+++ b/chrome/test/data/webui/settings/chromeos/os_settings_browsertest.js
@@ -771,7 +771,8 @@
   mocha.grep(assert(device_page_tests.TestNames.DevicePage)).run();
 });
 
-TEST_F('OSSettingsDevicePageTest', 'DisplayTest', () => {
+// Fails after https://chromium-review.googlesource.com/c/chromium/src/+/2640774
+TEST_F('OSSettingsDevicePageTest', 'DISABLED_DisplayTest', () => {
   mocha.grep(assert(device_page_tests.TestNames.Display)).run();
 });
 
diff --git a/chrome/test/data/webui/settings/site_data_details_subpage_tests.js b/chrome/test/data/webui/settings/site_data_details_subpage_tests.js
index 22ebcbe..2dec303 100644
--- a/chrome/test/data/webui/settings/site_data_details_subpage_tests.js
+++ b/chrome/test/data/webui/settings/site_data_details_subpage_tests.js
@@ -42,17 +42,11 @@
     type: 'cookie'
   };
 
-  /** @type {!CookieList} */
-  const cookieList = {
-    id: 'fooId',
-    children: [cookieDetails],
-  };
-
   const site = 'foo.com';
 
   setup(function() {
     browserProxy = new TestLocalDataBrowserProxy();
-    browserProxy.setCookieDetails(cookieList);
+    browserProxy.setCookieDetails([cookieDetails]);
     LocalDataBrowserProxyImpl.instance_ = browserProxy;
     testMetricsBrowserProxy = new TestMetricsBrowserProxy();
     MetricsBrowserProxyImpl.instance_ = testMetricsBrowserProxy;
diff --git a/chrome/test/data/webui/settings/site_data_test.js b/chrome/test/data/webui/settings/site_data_test.js
index 28b9650..60ef0b10 100644
--- a/chrome/test/data/webui/settings/site_data_test.js
+++ b/chrome/test/data/webui/settings/site_data_test.js
@@ -7,7 +7,7 @@
 import {LocalDataBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
 import {MetricsBrowserProxyImpl, PrivacyElementInteractions, Router,routes} from 'chrome://settings/settings.js';
 import {TestLocalDataBrowserProxy} from 'chrome://test/settings/test_local_data_browser_proxy.js';
-import {eventToPromise} from 'chrome://test/test_util.m.js';
+import {eventToPromise, flushTasks} from 'chrome://test/test_util.m.js';
 
 import {TestMetricsBrowserProxy} from './test_metrics_browser_proxy.js';
 
@@ -47,7 +47,7 @@
               assertTrue(!!button);
               assertEquals('CR-ICON-BUTTON', button.tagName);
               button.click();
-              return testBrowserProxy.whenCalled('removeItem');
+              return testBrowserProxy.whenCalled('removeSite');
             })
             .then(function(path) {
               assertEquals('Hello', path);
@@ -104,19 +104,17 @@
     return testBrowserProxy.whenCalled('reloadCookies');
   });
 
-  test('calls getDisplayList() when search param present', async function() {
+  test('no call to reloadCookies() on same route navigation', async function() {
     // Check that providing a search query parameter while navigating and a
     // search filter to the cookies page does not reload cookies, but instead
     // updates the list.
     document.body.appendChild(siteData);
-    Router.getInstance().navigateTo(routes.BASIC);
-    const params = new URLSearchParams();
-    params.append('searchSubpage', 'test');
-    Router.getInstance().navigateTo(routes.SITE_SETTINGS_SITE_DATA, params);
-    siteData.filter = 'test';
-    const filter = await testBrowserProxy.whenCalled('getDisplayList');
-    assertEquals('test', filter);
-    assertEquals(0, testBrowserProxy.getCallCount('reloadCookies'));
+    Router.getInstance().navigateTo(routes.SITE_SETTINGS_SITE_DATA);
+    await testBrowserProxy.whenCalled('reloadCookies');
+
+    Router.getInstance().navigateTo(routes.SITE_SETTINGS_SITE_DATA);
+    await flushTasks();
+    assertEquals(1, testBrowserProxy.getCallCount('reloadCookies'));
   });
 
   test('remove button records interaction metric', async function() {
@@ -142,4 +140,27 @@
         await testMetricsBrowserProxy.whenCalled('recordSettingsPageHistogram');
     assertEquals(PrivacyElementInteractions.SITE_DATA_REMOVE_FILTERED, metric);
   });
+
+  test('changes to filter update list', async function() {
+    // Check that updating the page filter correctly calls update display list.
+    document.body.appendChild(siteData);
+    Router.getInstance().navigateTo(routes.COOKIES);
+    flush();
+
+    // Changes to the filter while not on the site data page should not be
+    // responded to.
+    siteData.set('filter', 'Test');
+    await flushTasks();
+    assertEquals(0, testBrowserProxy.getCallCount('getDisplayList'));
+
+    Router.getInstance().navigateTo(routes.SITE_SETTINGS_SITE_DATA);
+    let filter = await testBrowserProxy.whenCalled('getDisplayList');
+    assertEquals('Test', filter);
+    testBrowserProxy.reset();
+
+    siteData.set('filter', 'Test2');
+    filter = await testBrowserProxy.whenCalled('getDisplayList');
+    assertEquals('Test2', filter);
+  });
+
 });
diff --git a/chrome/test/data/webui/settings/test_local_data_browser_proxy.js b/chrome/test/data/webui/settings/test_local_data_browser_proxy.js
index 88d0bd1..943150b2 100644
--- a/chrome/test/data/webui/settings/test_local_data_browser_proxy.js
+++ b/chrome/test/data/webui/settings/test_local_data_browser_proxy.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // clang-format off
-import { CookieList,LocalDataBrowserProxy, LocalDataItem} from 'chrome://settings/lazy_load.js';
+import {CookieDetails, LocalDataBrowserProxy, LocalDataItem} from 'chrome://settings/lazy_load.js';
 
 import {TestBrowserProxy} from '../test_browser_proxy.m.js';
 // clang-format on
@@ -22,6 +22,7 @@
       'removeAll',
       'removeShownItems',
       'removeItem',
+      'removeSite',
       'getCookieDetails',
       'getNumCookiesString',
       'reloadCookies',
@@ -29,8 +30,8 @@
       'removeAllThirdPartyCookies',
     ]);
 
-    /** @private {?CookieList} */
-    this.cookieDetails_ = null;
+    /** @private {!Array<!CookieDetails>} */
+    this.cookieDetails_ = [];
 
     /** @private {Array<!LocalDataItem>} */
     this.cookieList_ = [];
@@ -41,7 +42,7 @@
 
   /**
    * Test-only helper.
-   * @param {!CookieList} cookieDetails
+   * @param {!Array<!CookieDetails>} cookieDetails
    */
   setCookieDetails(cookieDetails) {
     this.cookieDetails_ = cookieDetails;
@@ -69,7 +70,7 @@
         output.push(this.filteredCookieList_[i]);
       }
     }
-    return Promise.resolve({items: output, total: output.length});
+    return Promise.resolve(output);
   }
 
   /** @override */
@@ -84,15 +85,14 @@
   }
 
   /** @override */
-  removeItem(id) {
-    this.methodCalled('removeItem', id);
+  removeSite(path) {
+    this.methodCalled('removeSite', path);
   }
 
   /** @override */
   getCookieDetails(site) {
     this.methodCalled('getCookieDetails', site);
-    return Promise.resolve(
-        this.cookieDetails_ || {id: '', children: [], start: 0});
+    return Promise.resolve(this.cookieDetails_);
   }
 
   /** @override */
@@ -109,8 +109,8 @@
   }
 
   /** @override */
-  removeCookie(path) {
-    this.methodCalled('removeCookie', path);
+  removeItem(path) {
+    this.methodCalled('removeItem', path);
   }
 
   /** @override */
diff --git a/chromeos/components/account_manager/account_manager_ash.cc b/chromeos/components/account_manager/account_manager_ash.cc
index 4d453013..39f8d53 100644
--- a/chromeos/components/account_manager/account_manager_ash.cc
+++ b/chromeos/components/account_manager/account_manager_ash.cc
@@ -12,6 +12,19 @@
 #include "components/account_manager_core/account_manager_util.h"
 #include "mojo/public/cpp/bindings/remote.h"
 
+namespace {
+
+void MarshalAccounts(
+    crosapi::mojom::AccountManager::GetAccountsCallback callback,
+    const std::vector<account_manager::Account>& accounts_to_marshal) {
+  std::vector<crosapi::mojom::AccountPtr> mojo_accounts;
+  for (const account_manager::Account& account : accounts_to_marshal) {
+    mojo_accounts.emplace_back(account_manager::ToMojoAccount(account));
+  }
+}
+
+}  // namespace
+
 namespace crosapi {
 
 AccountManagerAsh::AccountManagerAsh(chromeos::AccountManager* account_manager)
@@ -40,6 +53,12 @@
   std::move(callback).Run(std::move(receiver));
 }
 
+void AccountManagerAsh::GetAccounts(
+    mojom::AccountManager::GetAccountsCallback callback) {
+  account_manager_->GetAccounts(
+      base::BindOnce(&MarshalAccounts, std::move(callback)));
+}
+
 void AccountManagerAsh::OnTokenUpserted(
     const account_manager::Account& account) {
   for (auto& observer : observers_)
diff --git a/chromeos/components/account_manager/account_manager_ash.h b/chromeos/components/account_manager/account_manager_ash.h
index 2ca4d18..93ef434 100644
--- a/chromeos/components/account_manager/account_manager_ash.h
+++ b/chromeos/components/account_manager/account_manager_ash.h
@@ -32,6 +32,7 @@
   // crosapi::mojom::AccountManager:
   void IsInitialized(IsInitializedCallback callback) override;
   void AddObserver(AddObserverCallback callback) override;
+  void GetAccounts(GetAccountsCallback callback) override;
 
   // chromeos::AccountManager::Observer:
   void OnTokenUpserted(const account_manager::Account& account) override;
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_as.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_as.xtb
index 05eff3f1..f8b9ea3 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_as.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_as.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">সহায়</translation>
 <translation id="7658239707568436148">বাতিল কৰক</translation>
 <translation id="7670511624014457267">৬০ FPS</translation>
+<translation id="7974782136796202581">পেন কৰা, হেলনীয়া কৰা, জুমৰ বিকল্পসমূহ দেখুৱাওক</translation>
 <translation id="7983668134180549431">পাঠ চিনাক্ত কৰা হৈছে।</translation>
 <translation id="8067883171444229417">ভিডিঅ’ প্লে কৰক</translation>
 <translation id="8131740175452115882">নিশ্চিত কৰক</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_bn.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_bn.xtb
index e3ee3b83..3821d20 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_bn.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_bn.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">সহায়তা</translation>
 <translation id="7658239707568436148">বাতিল</translation>
 <translation id="7670511624014457267">৬০ FPS</translation>
+<translation id="7974782136796202581">ক্যামেরা অনুভূমিকভাবে সরিয়ে প্যানোরামা ছবি তোলা, ক্যামেরা কাত করে ধরা বা জুম করার বিকল্প দেখুন</translation>
 <translation id="7983668134180549431">টেক্সট শনাক্ত করা গেছে।</translation>
 <translation id="8067883171444229417">ভিডিও চালানোর বোতাম</translation>
 <translation id="8131740175452115882">নিশ্চিত হন</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_fr-CA.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_fr-CA.xtb
index e86bb7c..f6605b7 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_fr-CA.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_fr-CA.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">Aide</translation>
 <translation id="7658239707568436148">Annuler</translation>
 <translation id="7670511624014457267">60 i/s</translation>
+<translation id="7974782136796202581">Afficher les options de panoramique, d'inclinaison et de zoom</translation>
 <translation id="7983668134180549431">Texte détecté.</translation>
 <translation id="8067883171444229417">Lire la vidéo</translation>
 <translation id="8131740175452115882">Confirmer</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_gu.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_gu.xtb
index 92043981..735e6d9 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_gu.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_gu.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">સહાય</translation>
 <translation id="7658239707568436148">રદ કરો</translation>
 <translation id="7670511624014457267">60 FPS</translation>
+<translation id="7974782136796202581">પૅન, ટિલ્ટ કે નાનું-મોટું કરવાના વિકલ્પો બતાવો</translation>
 <translation id="7983668134180549431">ટેક્સ્ટની જાણકારી મળી.</translation>
 <translation id="8067883171444229417">વીડિયો ચલાવો</translation>
 <translation id="8131740175452115882">પુષ્ટિ કરો</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ne.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ne.xtb
index d45f85f..d6cbd6d 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ne.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ne.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">मद्दत</translation>
 <translation id="7658239707568436148">रद्द गर्नुहोस्</translation>
 <translation id="7670511624014457267">६० FPS</translation>
+<translation id="7974782136796202581">प्यान गर्ने, ढल्काउने र जुम गर्ने विकल्पहरू देखाइयोस्</translation>
 <translation id="7983668134180549431">टेक्स्ट भेट्टियो।</translation>
 <translation id="8067883171444229417">भिडियो प्ले गर्नुहोस्</translation>
 <translation id="8131740175452115882">निश्चित</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_or.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_or.xtb
index d7dbf3e..d18a8937 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_or.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_or.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">ସହାୟତା</translation>
 <translation id="7658239707568436148">ବାତିଲ୍</translation>
 <translation id="7670511624014457267">60 FPS</translation>
+<translation id="7974782136796202581">ପ୍ୟାନ୍ ଟିଲ୍ଟ ଜୁମ୍ ବିକଳ୍ପ ଦେଖାନ୍ତୁ</translation>
 <translation id="7983668134180549431">ଟେକ୍ସଟ୍ ଚିହ୍ନଟ କରାଯାଇଛି।</translation>
 <translation id="8067883171444229417">ଭିଡିଓ ଚଲାନ୍ତୁ</translation>
 <translation id="8131740175452115882">ନିଶ୍ଚିତ କରନ୍ତୁ</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ta.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ta.xtb
index ef4cbf5..9f65188 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ta.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ta.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">உதவி</translation>
 <translation id="7658239707568436148">ரத்து செய்</translation>
 <translation id="7670511624014457267">60 FPS</translation>
+<translation id="7974782136796202581">நகர்த்துதல், சாய்த்தல், அளவை மாற்றுதல் போன்ற விருப்பங்களைக் காட்டு</translation>
 <translation id="7983668134180549431">உரை கண்டறியப்பட்டது.</translation>
 <translation id="8067883171444229417">வீடியோவை பிளே செய்</translation>
 <translation id="8131740175452115882">உறுதிப்படுத்து</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_te.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_te.xtb
index 0ff8b0f..3fc7d4f 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_te.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_te.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">సహాయం</translation>
 <translation id="7658239707568436148">రద్దు చేయి</translation>
 <translation id="7670511624014457267">60 FPS</translation>
+<translation id="7974782136796202581">ప్యాన్/టిల్ట్/జూమ్ ఆప్షన్‌లను చూపించు</translation>
 <translation id="7983668134180549431">టెక్స్ట్ గుర్తించబడింది.</translation>
 <translation id="8067883171444229417">వీడియోను ప్లే చేయి</translation>
 <translation id="8131740175452115882">నిర్ధారించు</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ur.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ur.xtb
index 85f18e5..0d1c6b0 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ur.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ur.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">مدد</translation>
 <translation id="7658239707568436148">منسوخ کریں</translation>
 <translation id="7670511624014457267">60 FPS</translation>
+<translation id="7974782136796202581">پین جھکاؤ زوم کے اختیارات دکھائیں</translation>
 <translation id="7983668134180549431">ٹیکسٹ کا پتہ چلا۔</translation>
 <translation id="8067883171444229417">ویڈیو چلائیں</translation>
 <translation id="8131740175452115882">تصدیق کریں</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_zh-CN.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_zh-CN.xtb
index 45b5dc2..0021f52 100644
--- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_zh-CN.xtb
+++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_zh-CN.xtb
@@ -80,6 +80,7 @@
 <translation id="7649070708921625228">帮助</translation>
 <translation id="7658239707568436148">取消</translation>
 <translation id="7670511624014457267">60 FPS</translation>
+<translation id="7974782136796202581">显示平移/倾斜/缩放选项</translation>
 <translation id="7983668134180549431">检测到文字。</translation>
 <translation id="8067883171444229417">播放视频</translation>
 <translation id="8131740175452115882">确认</translation>
diff --git a/chromeos/components/quick_answers/result_loader.cc b/chromeos/components/quick_answers/result_loader.cc
index 175f981..a7c2e7e 100644
--- a/chromeos/components/quick_answers/result_loader.cc
+++ b/chromeos/components/quick_answers/result_loader.cc
@@ -93,6 +93,7 @@
   if (!response_body || loader_->NetError() != net::OK ||
       !loader_->ResponseInfo() || !loader_->ResponseInfo()->headers) {
     RecordLoadingStatus(LoadStatus::kNetworkError, duration);
+    RecordNetworkError(preprocessed_output.intent_info.intent_type);
     delegate_->OnNetworkError();
     return;
   }
diff --git a/chromeos/components/quick_answers/utils/quick_answers_metrics.cc b/chromeos/components/quick_answers/utils/quick_answers_metrics.cc
index 1cf515d68..c4c0b59 100644
--- a/chromeos/components/quick_answers/utils/quick_answers_metrics.cc
+++ b/chromeos/components/quick_answers/utils/quick_answers_metrics.cc
@@ -26,6 +26,7 @@
 const char kQuickAnswersNotice[] = "QuickAnswers.Consent";
 const char kQuickAnswersNoticeDuration[] = "QuickAnswers.Consent.Duration";
 const char kQuickAnswersNoticeImpression[] = "QuickAnswers.Consent.Impression";
+const char kQuickAnswersNetworkError[] = "QuickAnswers.NetworkError.IntentType";
 
 std::string ResultTypeToString(ResultType result_type) {
   switch (result_type) {
@@ -127,5 +128,10 @@
 void RecordIntentType(IntentType intent_type) {
   base::UmaHistogramEnumeration(kQuickAnswerIntent, intent_type);
 }
+
+void RecordNetworkError(IntentType intent_type) {
+  base::UmaHistogramEnumeration(kQuickAnswersNetworkError, intent_type);
+}
+
 }  // namespace quick_answers
 }  // namespace chromeos
diff --git a/chromeos/components/quick_answers/utils/quick_answers_metrics.h b/chromeos/components/quick_answers/utils/quick_answers_metrics.h
index b239ca9..d0c0abea 100644
--- a/chromeos/components/quick_answers/utils/quick_answers_metrics.h
+++ b/chromeos/components/quick_answers/utils/quick_answers_metrics.h
@@ -45,6 +45,9 @@
 // Record the intent generated on-device.
 void RecordIntentType(IntentType intent_type);
 
+// Record the intent type when network error occurs.
+void RecordNetworkError(IntentType intent_type);
+
 }  // namespace quick_answers
 }  // namespace chromeos
 
diff --git a/chromeos/crosapi/mojom/account_manager.mojom b/chromeos/crosapi/mojom/account_manager.mojom
index 0b85c10a9..e048f5e 100644
--- a/chromeos/crosapi/mojom/account_manager.mojom
+++ b/chromeos/crosapi/mojom/account_manager.mojom
@@ -105,8 +105,8 @@
 // ARC++ uses components/arc/mojom/auth.mojom to talk to the Chrome OS Account
 // Manager.
 //
-// Next version: 2
-// Next method id: 2
+// Next version: 3
+// Next method id: 3
 [Stable, Uuid="85b9a674-9d8e-497f-98d5-22c8dca6f2b8"]
 interface AccountManager {
   // Returns |true| if Chrome OS Account Manager has been fully initialized, and
@@ -121,4 +121,10 @@
   // is destroyed. This will happen automatically when lacros is shut down.
   [MinVersion = 1]
   AddObserver@1() => (pending_receiver<AccountManagerObserver> receiver);
+
+  // Returns the list of accounts in AccountManager. Can be invoked before the
+  // initialization is completed (in this case the callback will be invoked
+  // after the initialization is done).
+  [MinVersion = 2]
+  GetAccounts@2() => (array<Account> accounts);
 };
diff --git a/chromeos/network/BUILD.gn b/chromeos/network/BUILD.gn
index 9323ba0..57ed16a 100644
--- a/chromeos/network/BUILD.gn
+++ b/chromeos/network/BUILD.gn
@@ -38,6 +38,8 @@
   sources = [
     "auto_connect_handler.cc",
     "auto_connect_handler.h",
+    "cellular_esim_profile.cc",
+    "cellular_esim_profile.h",
     "cellular_inhibitor.cc",
     "cellular_inhibitor.h",
     "cellular_metrics_logger.cc",
@@ -240,6 +242,7 @@
   ]
   sources = [
     "auto_connect_handler_unittest.cc",
+    "cellular_esim_profile_unittest.cc",
     "cellular_inhibitor_unittest.cc",
     "cellular_metrics_logger_unittest.cc",
     "certificate_helper_unittest.cc",
diff --git a/chromeos/network/cellular_esim_profile.cc b/chromeos/network/cellular_esim_profile.cc
new file mode 100644
index 0000000..1e772dc
--- /dev/null
+++ b/chromeos/network/cellular_esim_profile.cc
@@ -0,0 +1,110 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/network/cellular_esim_profile.h"
+
+#include "base/strings/utf_string_conversions.h"
+
+namespace chromeos {
+namespace {
+
+// Keys used by ToDictionaryValue() and FromDictionaryValue().
+const char kKeyState[] = "State";
+const char kKeyEid[] = "Eid";
+const char kKeyIccid[] = "Iccid";
+const char kKeyName[] = "Name";
+const char kKeyNickname[] = "Nickname";
+const char kKeyServiceProvider[] = "ServiceProvider";
+const char kKeyActivationCode[] = "ActivationCode";
+
+}  // namespace
+
+// static
+base::Optional<CellularESimProfile> CellularESimProfile::FromDictionaryValue(
+    const base::Value& value) {
+  if (!value.is_dict())
+    return base::nullopt;
+
+  base::Optional<int> state = value.FindIntPath(kKeyState);
+  if (!state)
+    return base::nullopt;
+
+  const std::string* eid = value.FindStringPath(kKeyEid);
+  if (!eid)
+    return base::nullopt;
+
+  const std::string* iccid = value.FindStringPath(kKeyIccid);
+  if (!iccid)
+    return base::nullopt;
+
+  const std::string* name = value.FindStringPath(kKeyName);
+  if (!name)
+    return base::nullopt;
+
+  const std::string* nickname = value.FindStringPath(kKeyNickname);
+  if (!nickname)
+    return base::nullopt;
+
+  const std::string* service_provider =
+      value.FindStringPath(kKeyServiceProvider);
+  if (!service_provider)
+    return base::nullopt;
+
+  const std::string* activation_code = value.FindStringPath(kKeyActivationCode);
+  if (!activation_code)
+    return base::nullopt;
+
+  return CellularESimProfile(
+      static_cast<State>(*state), *eid, *iccid, base::UTF8ToUTF16(*name),
+      base::UTF8ToUTF16(*nickname), base::UTF8ToUTF16(*service_provider),
+      *activation_code);
+}
+
+CellularESimProfile::CellularESimProfile(State state,
+                                         const std::string& eid,
+                                         const std::string& iccid,
+                                         const base::string16& name,
+                                         const base::string16& nickname,
+                                         const base::string16& service_provider,
+                                         const std::string& activation_code)
+    : state_(state),
+      eid_(eid),
+      iccid_(iccid),
+      name_(name),
+      nickname_(nickname),
+      service_provider_(service_provider),
+      activation_code_(activation_code) {}
+
+CellularESimProfile::CellularESimProfile(const CellularESimProfile&) = default;
+
+CellularESimProfile& CellularESimProfile::operator=(
+    const CellularESimProfile&) = default;
+
+CellularESimProfile::~CellularESimProfile() = default;
+
+base::Value CellularESimProfile::ToDictionaryValue() const {
+  base::Value dictionary(base::Value::Type::DICTIONARY);
+  dictionary.SetKey(kKeyState, base::Value(static_cast<int>(state_)));
+  dictionary.SetKey(kKeyEid, base::Value(eid_));
+  dictionary.SetKey(kKeyIccid, base::Value(iccid_));
+  dictionary.SetKey(kKeyName, base::Value(name_));
+  dictionary.SetKey(kKeyNickname, base::Value(nickname_));
+  dictionary.SetKey(kKeyServiceProvider, base::Value(service_provider_));
+  dictionary.SetKey(kKeyActivationCode, base::Value(activation_code_));
+  return dictionary;
+}
+
+bool CellularESimProfile::operator==(const CellularESimProfile& other) const {
+  return state_ == other.state_ && eid_ == other.eid_ &&
+         iccid_ == other.iccid_ && name_ == other.name_ &&
+         nickname_ == other.nickname_ &&
+         service_provider_ == other.service_provider_ &&
+         activation_code_ == other.activation_code_;
+}
+
+bool CellularESimProfile::operator!=(const CellularESimProfile& other) const {
+  return !(*this == other);
+}
+
+}  // namespace chromeos
diff --git a/chromeos/network/cellular_esim_profile.h b/chromeos/network/cellular_esim_profile.h
new file mode 100644
index 0000000..7e71e34
--- /dev/null
+++ b/chromeos/network/cellular_esim_profile.h
@@ -0,0 +1,92 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_NETWORK_CELLULAR_ESIM_PROFILE_H_
+#define CHROMEOS_NETWORK_CELLULAR_ESIM_PROFILE_H_
+
+#include <string>
+
+#include "base/component_export.h"
+#include "base/optional.h"
+#include "base/strings/string16.h"
+#include "base/values.h"
+
+namespace chromeos {
+
+// Metadata representing an eSIM profile.
+class COMPONENT_EXPORT(CHROMEOS_NETWORK) CellularESimProfile {
+ public:
+  // Note that numerical values are stored in prefs and should not be changed or
+  // reused.
+  enum class State {
+    // Profile is not installed on the device. This likely means that it was
+    // discovered via SMDS.
+    kPending = 0,
+
+    // Profile is being installed (i.e., being loaded into the EIUCC).
+    kInstalling = 1,
+
+    // Profile is installed but inactive.
+    kInactive = 2,
+
+    // Profile is installed and active.
+    kActive = 3,
+  };
+
+  // Returns null if the provided value does not have the required dictionary
+  // properties. Should be provided a dictionary created via
+  // ToDictionaryValue().
+  static base::Optional<CellularESimProfile> FromDictionaryValue(
+      const base::Value& value);
+
+  CellularESimProfile(State state,
+                      const std::string& eid,
+                      const std::string& iccid,
+                      const base::string16& name,
+                      const base::string16& nickname,
+                      const base::string16& service_provider,
+                      const std::string& activation_code);
+  CellularESimProfile(const CellularESimProfile&);
+  CellularESimProfile& operator=(const CellularESimProfile&);
+  ~CellularESimProfile();
+
+  State state() const { return state_; }
+  const std::string& eid() const { return eid_; }
+  const std::string& iccid() const { return iccid_; }
+  const base::string16& name() const { return name_; }
+  const base::string16& nickname() const { return nickname_; }
+  const base::string16& service_provider() const { return service_provider_; }
+  const std::string& activation_code() const { return activation_code_; }
+
+  base::Value ToDictionaryValue() const;
+
+  bool operator==(const CellularESimProfile& other) const;
+  bool operator!=(const CellularESimProfile& other) const;
+
+ private:
+  State state_;
+
+  // EID of the Euicc in which this profile is installed or available for
+  // installation.
+  std::string eid_;
+
+  // A 19-20 character long numeric id that uniquely identifies this profile.
+  std::string iccid_;
+
+  // Service provider’s name for this profile. e.g. “Verizon Plan 1”
+  base::string16 name_;
+
+  // A user configurable nickname for this profile. e.g. “My Personal SIM”
+  base::string16 nickname_;
+
+  // Name of the service provider. e.g. “Verizon Wireless”
+  base::string16 service_provider_;
+
+  // An alphanumeric code that can be used to install this profile.
+  std::string activation_code_;
+};
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_NETWORK_CELLULAR_ESIM_PROFILE_H_
diff --git a/chromeos/network/cellular_esim_profile_unittest.cc b/chromeos/network/cellular_esim_profile_unittest.cc
new file mode 100644
index 0000000..408bbef
--- /dev/null
+++ b/chromeos/network/cellular_esim_profile_unittest.cc
@@ -0,0 +1,50 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chromeos/network/cellular_esim_profile.h"
+
+#include "base/optional.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+
+TEST(CellularESimProfileTest, ConvertToAndFromDictionary) {
+  CellularESimProfile profile(
+      CellularESimProfile::State::kPending, "eid", "iccid",
+      base::UTF8ToUTF16("name"), base::UTF8ToUTF16("nickname"),
+      base::UTF8ToUTF16("serviceProvider"), "activationCode");
+
+  base::Value dictionary = profile.ToDictionaryValue();
+  base::Optional<CellularESimProfile> from_dictionary =
+      CellularESimProfile::FromDictionaryValue(dictionary);
+  EXPECT_TRUE(from_dictionary);
+
+  EXPECT_EQ(CellularESimProfile::State::kPending, from_dictionary->state());
+  EXPECT_EQ("eid", from_dictionary->eid());
+  EXPECT_EQ("iccid", from_dictionary->iccid());
+  EXPECT_EQ(base::UTF8ToUTF16("name"), from_dictionary->name());
+  EXPECT_EQ(base::UTF8ToUTF16("nickname"), from_dictionary->nickname());
+  EXPECT_EQ(base::UTF8ToUTF16("serviceProvider"),
+            from_dictionary->service_provider());
+  EXPECT_EQ("activationCode", from_dictionary->activation_code());
+}
+
+TEST(CellularESimProfileTest, InvalidDictionary) {
+  // Try to convert a non-dictionary.
+  base::Value non_dictionary(1337);
+  base::Optional<CellularESimProfile> from_non_dictionary =
+      CellularESimProfile::FromDictionaryValue(non_dictionary);
+  EXPECT_FALSE(from_non_dictionary);
+
+  // Try to convert a dictionary without the required keys.
+  base::Value dictionary(base::Value::Type::DICTIONARY);
+  dictionary.SetPath("sampleKey", base::Value("sampleValue"));
+  base::Optional<CellularESimProfile> from_dictionary =
+      CellularESimProfile::FromDictionaryValue(dictionary);
+  EXPECT_FALSE(from_dictionary);
+}
+
+}  // namespace chromeos
diff --git a/chromeos/network/network_connection_handler_impl.cc b/chromeos/network/network_connection_handler_impl.cc
index 8b8cbc7..0a3aad43 100644
--- a/chromeos/network/network_connection_handler_impl.cc
+++ b/chromeos/network/network_connection_handler_impl.cc
@@ -152,6 +152,12 @@
   return base::Contains(prohibited_technologies, shill::kTypeVPN);
 }
 
+// TODO(b/161092818): Add wireguard type when it is supported in shill.
+bool IsBuiltInVpnType(const std::string& vpn_type) {
+  return vpn_type == shill::kProviderL2tpIpsec ||
+         vpn_type == shill::kProviderOpenVpn;
+}
+
 }  // namespace
 
 NetworkConnectionHandlerImpl::ConnectRequest::ConnectRequest(
@@ -297,7 +303,7 @@
     }
 
     if (NetworkTypePattern::VPN().MatchesType(network->type()) &&
-        IsVpnProhibited()) {
+        IsBuiltInVpnType(network->GetVpnProviderType()) && IsVpnProhibited()) {
       InvokeConnectErrorCallback(service_path, std::move(error_callback),
                                  kErrorBlockedByPolicy);
       return;
diff --git a/chromeos/network/network_connection_handler_impl_unittest.cc b/chromeos/network/network_connection_handler_impl_unittest.cc
index 9f11e841..21d738e 100644
--- a/chromeos/network/network_connection_handler_impl_unittest.cc
+++ b/chromeos/network/network_connection_handler_impl_unittest.cc
@@ -297,11 +297,39 @@
     return helper_.ConfigureService(shill_json_string);
   }
 
+  std::string ConfigureVpnServiceWithProviderType(
+      const std::string& vpn_provider_type) {
+    const std::string kVpnGuid = "vpn_guid";
+    const std::string kShillJsonStringTemplate =
+        R"({"GUID": "$1", "Type": "vpn", "State": "idle",
+            "Provider": {"Type": "$2", "Host": "host"}})";
+
+    const std::string shill_json_string = base::ReplaceStringPlaceholders(
+        kShillJsonStringTemplate, {kVpnGuid, vpn_provider_type},
+        /*offsets=*/nullptr);
+    return ConfigureService(shill_json_string);
+  }
+
   std::string GetServiceStringProperty(const std::string& service_path,
                                        const std::string& key) {
     return helper_.GetServiceStringProperty(service_path, key);
   }
 
+  // Used when testing a code that accesses NetworkHandler::Get() directly (e.g.
+  // when checking if VPN is disabled by policy when attempting to connect to a
+  // VPN network). NetworkStateTestHelper can not be used here. That's because
+  // NetworkStateTestHelper initializes a NetworkStateHandler for testing, but
+  // NetworkHandler::Initialize() constructs its own NetworkStateHandler
+  // instance and NetworkHandler::Get() uses it.
+  // Note: Tests using this method must call NetworkHandler::Shutdown() before
+  // returning.
+  void ProhibitVpnForNetworkHandler() {
+    NetworkHandler::Initialize();
+    NetworkHandler::Get()
+        ->prohibited_technologies_handler()
+        ->AddGloballyProhibitedTechnology(shill::kTypeVPN);
+  }
+
   NetworkStateHandler* network_state_handler() {
     return helper_.network_state_handler();
   }
@@ -591,32 +619,61 @@
 }
 
 TEST_F(NetworkConnectionHandlerImplTest,
-       ConnectToVpnNetworkWhenProhibited_Failure) {
-  // This test tests a code that accesses NetworkHandler::Get() directly (when
-  // checking if VPN is disabled by policy when attempting to connect to a VPN
-  // network), so NetworkStateTestHelper can not be used here. That's because
-  // NetworkStateTestHelper initializes a NetworkStateHandler for testing, but
-  // NetworkHandler::Initialize() constructs its own NetworkStateHandler
-  // instance and NetworkHandler::Get() uses it.
-  NetworkHandler::Initialize();
-  NetworkHandler::Get()
-      ->prohibited_technologies_handler()
-      ->AddGloballyProhibitedTechnology(shill::kTypeVPN);
+       ConnectToL2tpIpsecVpnNetworkWhenProhibited_Failure) {
+  ProhibitVpnForNetworkHandler();
 
-  const std::string kVpnGuid = "vpn_guid";
-  const std::string kShillJsonStringTemplate =
-      R"({"GUID": "$1", "Type": "vpn", "State": "idle",
-            "Provider": {"Type": "l2tpipsec", "Host": "host"}})";
-
-  const std::string shill_json_string =
-      base::ReplaceStringPlaceholders(kShillJsonStringTemplate, {kVpnGuid},
-                                      /*offsets=*/nullptr);
-  const std::string vpn_service_path = ConfigureService(shill_json_string);
+  const std::string vpn_service_path =
+      ConfigureVpnServiceWithProviderType(shill::kProviderL2tpIpsec);
   ASSERT_FALSE(vpn_service_path.empty());
 
   Connect(/*service_path=*/vpn_service_path);
   EXPECT_EQ(NetworkConnectionHandler::kErrorBlockedByPolicy,
             GetResultAndReset());
+
+  NetworkHandler::Shutdown();
+}
+
+TEST_F(NetworkConnectionHandlerImplTest,
+       ConnectToOpenVpnNetworkWhenProhibited_Failure) {
+  ProhibitVpnForNetworkHandler();
+
+  const std::string vpn_service_path =
+      ConfigureVpnServiceWithProviderType(shill::kProviderOpenVpn);
+  ASSERT_FALSE(vpn_service_path.empty());
+
+  Connect(/*service_path=*/vpn_service_path);
+  EXPECT_EQ(NetworkConnectionHandler::kErrorBlockedByPolicy,
+            GetResultAndReset());
+
+  NetworkHandler::Shutdown();
+}
+
+TEST_F(NetworkConnectionHandlerImplTest,
+       ConnectToThirdPartyVpnNetworkWhenProhibited_Success) {
+  ProhibitVpnForNetworkHandler();
+
+  const std::string vpn_service_path =
+      ConfigureVpnServiceWithProviderType(shill::kProviderThirdPartyVpn);
+  ASSERT_FALSE(vpn_service_path.empty());
+
+  Connect(/*service_path=*/vpn_service_path);
+  EXPECT_EQ(kSuccessResult, GetResultAndReset());
+
+  NetworkHandler::Shutdown();
+}
+
+TEST_F(NetworkConnectionHandlerImplTest,
+       ConnectToArcVpnNetworkWhenProhibited_Success) {
+  ProhibitVpnForNetworkHandler();
+
+  const std::string vpn_service_path =
+      ConfigureVpnServiceWithProviderType(shill::kProviderArcVpn);
+  ASSERT_FALSE(vpn_service_path.empty());
+
+  Connect(/*service_path=*/vpn_service_path);
+  EXPECT_EQ(kSuccessResult, GetResultAndReset());
+
+  NetworkHandler::Shutdown();
 }
 
 TEST_F(NetworkConnectionHandlerImplTest,
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt
index f353959..720546f 100644
--- a/chromeos/profiles/orderfile.newest.txt
+++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@
-chromeos-chrome-orderfile-field-89-4384.0-1611574040-benchmark-89.0.4389.16-r1.orderfile.xz
+chromeos-chrome-orderfile-field-90-4384.0-1610968059-benchmark-90.0.4395.3-r1.orderfile.xz
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb
index f7830cf2..48b7d51 100644
--- a/chromeos/strings/chromeos_strings_ar.xtb
+++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -232,7 +232,7 @@
 <translation id="6146993107019042706">يُرجى إدخال كلمة مرور جديدة لإنهاء الإجراء.</translation>
 <translation id="6147514244879357420">PNG</translation>
 <translation id="6165508094623778733">مزيد من المعلومات</translation>
-<translation id="6189418609903030344">تقلّ سعة البطارية عند استخدامها.</translation>
+<translation id="6189418609903030344">تقلّ طاقة البطارية عند استخدامها.</translation>
 <translation id="6191293864534840972">خوادم الأسماء غير صالحة.</translation>
 <translation id="6232017090690406397">البطارية</translation>
 <translation id="6325525973963619867">إخفاق</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index c9989018..3a1fb522 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -21,6 +21,7 @@
 <translation id="1327977588028644528">গেটওয়ে</translation>
 <translation id="1330426557709298164">JPG</translation>
 <translation id="1337912285145772892">স্ক্যান করতে ক্ষেত্রটি ফিট করান</translation>
+<translation id="1387854245479784695">এটি সব কোরকে একসাথে দেখায়</translation>
 <translation id="1397738625398125236">গেটওয়ে পিং করা যেতে পারে</translation>
 <translation id="1398634363027580500">খুব বেশি HTTPS লেটেন্সি</translation>
 <translation id="1413240736185167732">প্রিন্ট করা যায়নি - ফিল্টার কাজ করছে না</translation>
@@ -104,6 +105,7 @@
 <translation id="3527036260304016759">প্রিন্ট করা যায়নি - অজানা সমস্যা</translation>
 <translation id="357889014807611375">মিটার্ড ওয়াই-ফাই</translation>
 <translation id="360565022852130722">দুর্বল WEP 802.1x প্রোটোকল ব্যবহার করে ওয়াই-ফাই নেটওয়ার্ক সুরক্ষিত করা হয়েছে</translation>
+<translation id="3712633734921637892">বর্তমানে সিপিইউ-এর স্পিড ব্যাটারির চার্জ সংরক্ষণ করা বা তাপমাত্রা কম করা পর্যন্ত সীমিত করা হচ্ছে</translation>
 <translation id="3740976234706877572"><ph name="AVERAGE_SCORE" /> ★ (<ph name="AGGREGATED_COUNT" />টি রিভিউ)</translation>
 <translation id="3748026146096797577">সংযুক্ত নয়</translation>
 <translation id="3749289110408117711">ফাইলের নাম</translation>
@@ -229,6 +231,7 @@
 <translation id="6146993107019042706">সম্পূর্ণ করতে, আপনার নতুন পাসওয়ার্ড লিখুন</translation>
 <translation id="6147514244879357420">PNG</translation>
 <translation id="6165508094623778733">আরও জানুন</translation>
+<translation id="6189418609903030344">ব্যবহার করতে করতে ব্যাটারির ক্ষমতা কমে আসতে থাকে</translation>
 <translation id="6191293864534840972">ডোমেন নেম সার্ভারের ফর্ম্যাট ঠিক নেই</translation>
 <translation id="6232017090690406397">ব্যাটারি: %</translation>
 <translation id="6325525973963619867">ব্যর্থ</translation>
@@ -326,6 +329,7 @@
 <translation id="877985182522063539">A4</translation>
 <translation id="8798099450830957504">ডিফল্ট</translation>
 <translation id="8798441408945964110">পরিষেবা প্রদানকারীর নাম</translation>
+<translation id="880791622116642296">এর থেকে জানতে পারা যায় যে আপনার ব্যাটারি কতবার পুরো চার্জ দেওয়া হয়েছে</translation>
 <translation id="8814190375133053267">ওয়াই-ফাই</translation>
 <translation id="8845001906332463065">সাহায্য পান</translation>
 <translation id="8881098542468797602">টেস্ট সফল হয়েছে</translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb
index e3435aae1..1d20ac6 100644
--- a/chromeos/strings/chromeos_strings_eu.xtb
+++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -232,7 +232,7 @@
 <translation id="6146993107019042706">Amaitzeko, idatzi pasahitz berria</translation>
 <translation id="6147514244879357420">PNG</translation>
 <translation id="6165508094623778733">Lortu informazio gehiago</translation>
-<translation id="6189418609903030344">Erabili ahala, ahalmena galtzen joaten da bateria</translation>
+<translation id="6189418609903030344">Bateria erabili ahala, ahalmena galtzen doa</translation>
 <translation id="6191293864534840972">Gaizki eratuta daude izenen zerbitzariak</translation>
 <translation id="6232017090690406397">Bateria</translation>
 <translation id="6325525973963619867">Huts egin du</translation>
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb
index 59606d4..29ba8a0 100644
--- a/chromeos/strings/chromeos_strings_fr-CA.xtb
+++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -21,6 +21,7 @@
 <translation id="1327977588028644528">Passerelle</translation>
 <translation id="1330426557709298164">JPG</translation>
 <translation id="1337912285145772892">Ajuster à la zone de numérisation</translation>
+<translation id="1387854245479784695">Il s'agit d'une agrégation de tous les cœurs</translation>
 <translation id="1397738625398125236">Ping de la passerelle</translation>
 <translation id="1398634363027580500">Latence HTTPS très élevée</translation>
 <translation id="1413240736185167732">Échec : problème de filtre</translation>
@@ -104,6 +105,7 @@
 <translation id="3527036260304016759">Échec : erreur inconnue</translation>
 <translation id="357889014807611375">réseau Wi-Fi mesuré</translation>
 <translation id="360565022852130722">Le réseau Wi-Fi est sécurisé par un protocole faible : WEP 802.1x</translation>
+<translation id="3712633734921637892">La vitesse du processeur est actuellement limitée afin d'économiser la pile ou de faire baisser la température</translation>
 <translation id="3740976234706877572"><ph name="AVERAGE_SCORE" /> ★ (<ph name="AGGREGATED_COUNT" /> avis)</translation>
 <translation id="3748026146096797577">Non connecté</translation>
 <translation id="3749289110408117711">Nom du fichier</translation>
@@ -230,6 +232,7 @@
 <translation id="6146993107019042706">Pour terminer cette opération, entrez votre nouveau mot de passe</translation>
 <translation id="6147514244879357420">PNG</translation>
 <translation id="6165508094623778733">En savoir plus</translation>
+<translation id="6189418609903030344">La capacité des piles décline avec l'usage</translation>
 <translation id="6191293864534840972">Le format des serveurs de nom est incorrect</translation>
 <translation id="6232017090690406397">Pile</translation>
 <translation id="6325525973963619867">Échec</translation>
@@ -327,6 +330,7 @@
 <translation id="877985182522063539">A4</translation>
 <translation id="8798099450830957504">Par défaut</translation>
 <translation id="8798441408945964110">Nom du fournisseur</translation>
+<translation id="880791622116642296">Nombre de cycles de recharge complets effectués par la pile de votre appareil</translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="8845001906332463065">Obtenir de l'aide</translation>
 <translation id="8881098542468797602">Test réussi</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb
index 89e2af51..60345d99 100644
--- a/chromeos/strings/chromeos_strings_kk.xtb
+++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -231,7 +231,7 @@
 <translation id="6146993107019042706">Аяқтау үшін жаңа құпия сөзді енгізіңіз.</translation>
 <translation id="6147514244879357420">PNG</translation>
 <translation id="6165508094623778733">Толығырақ</translation>
-<translation id="6189418609903030344">Пайдаланған сайын, батарея заряды отыра береді.</translation>
+<translation id="6189418609903030344">Пайдаланған сайын, батарея сыйымдылығы азая береді.</translation>
 <translation id="6191293864534840972">Атау серверлері форматы дұрыс емес.</translation>
 <translation id="6232017090690406397">Батарея</translation>
 <translation id="6325525973963619867">Қате шықты</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb
index 4e0844cf..08c4f40 100644
--- a/chromeos/strings/chromeos_strings_km.xtb
+++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -105,7 +105,7 @@
 <translation id="3527036260304016759">មិនបានសម្រេច - មានបញ្ហា​ដែលមិនស្គាល់</translation>
 <translation id="357889014807611375">Wi-Fi តាមកម្រិត</translation>
 <translation id="360565022852130722">បណ្ដាញ WiFi មានសុវត្ថិភាពជាមួយ WEP 802.1x ប្រូតូកូលខ្សោយ</translation>
-<translation id="3712633734921637892">បច្ចុប្បន្ន ល្បឿន CPU ត្រូវបាន​កំណត់​ដែនកម្រិត ដើម្បី​រក្សាថ្ម ឬ​កាត់បន្ថយ​សីតុណ្ហភាព</translation>
+<translation id="3712633734921637892">បច្ចុប្បន្ន ល្បឿន CPU ត្រូវបាន​ដាក់កម្រិត ដើម្បី​រក្សាថ្ម ឬ​កាត់បន្ថយ​សីតុណ្ហភាព</translation>
 <translation id="3740976234706877572"><ph name="AVERAGE_SCORE" /> ★ (ការវាយតម្លៃចំនួន <ph name="AGGREGATED_COUNT" />)</translation>
 <translation id="3748026146096797577">មិនបានភ្ជាប់ទេ</translation>
 <translation id="3749289110408117711">ឈ្មោះឯកសារ</translation>
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb
index 81915f8..0d8e726 100644
--- a/chromeos/strings/chromeos_strings_mr.xtb
+++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -21,6 +21,7 @@
 <translation id="1327977588028644528">गेटवे</translation>
 <translation id="1330426557709298164">JPG</translation>
 <translation id="1337912285145772892">स्कॅन क्षेत्रावर फिट करा</translation>
+<translation id="1387854245479784695">हे सर्व कोअरचे एकत्रीकरण आहे</translation>
 <translation id="1397738625398125236">गेटवेला पिंग करता येते</translation>
 <translation id="1398634363027580500">अत्युच्च HTTPS लेटन्सी</translation>
 <translation id="1413240736185167732">अयशस्वी झाले - फिल्टर अयशस्वी झाले</translation>
@@ -104,6 +105,7 @@
 <translation id="3527036260304016759">अयशस्वी झाले - अज्ञात एरर</translation>
 <translation id="357889014807611375">मर्यादित वाय-फाय</translation>
 <translation id="360565022852130722">वायफाय नेटवर्क कमकुवत प्रोटोकॉल WEP 802.1x सह सुरक्षित केले गेले आहे</translation>
+<translation id="3712633734921637892">बॅटरीची क्षमता वाढवण्यासाठी किंवा तापमान कमी करण्यासाठी सीपीयूचा वेग सध्या मर्यादित केला आहे</translation>
 <translation id="3740976234706877572"><ph name="AVERAGE_SCORE" /> ★ (<ph name="AGGREGATED_COUNT" /> परीक्षणे)</translation>
 <translation id="3748026146096797577">कनेक्टेड नाही</translation>
 <translation id="3749289110408117711">फाइल नाव</translation>
@@ -229,6 +231,7 @@
 <translation id="6146993107019042706">पूर्ण करण्यासाठी, तुमचा नवीन पासवर्ड एंटर करा</translation>
 <translation id="6147514244879357420">PNG</translation>
 <translation id="6165508094623778733">अधिक जाणून घ्या</translation>
+<translation id="6189418609903030344">वापरानुसार बॅटरीची क्षमता कमी होत जाते</translation>
 <translation id="6191293864534840972">समस्या असलेले नेम सर्व्हर</translation>
 <translation id="6232017090690406397">बॅटरी</translation>
 <translation id="6325525973963619867">अयशस्वी</translation>
@@ -326,6 +329,7 @@
 <translation id="877985182522063539">A4</translation>
 <translation id="8798099450830957504">डीफॉल्ट</translation>
 <translation id="8798441408945964110">प्रदात्याचे नाव</translation>
+<translation id="880791622116642296">तुमची बॅटरी किती वेळा पूर्ण चार्ज झाली ते या चार्जिंग सायकलवरून कळते</translation>
 <translation id="8814190375133053267">वाय-फाय</translation>
 <translation id="8845001906332463065">मदत मिळवा</translation>
 <translation id="8881098542468797602">चाचणी यशस्वी झाली</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb
index d0f113fa..1c16309 100644
--- a/chromeos/strings/chromeos_strings_nl.xtb
+++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -10,10 +10,10 @@
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1175697296044146566">Deze <ph name="DEVICE_TYPE" /> wordt beheerd door <ph name="MANAGER" />.</translation>
 <translation id="1195447618553298278">Onbekende fout</translation>
-<translation id="1204296502688602597">DNS-wachttijd</translation>
+<translation id="1204296502688602597">DNS-latentie</translation>
 <translation id="123124571410524056">Vermoedelijke portal</translation>
 <translation id="1238191093934674082">Open VPN</translation>
-<translation id="1238612778414822719">HTTPS-wachttijd</translation>
+<translation id="1238612778414822719">HTTPS-latentie</translation>
 <translation id="1270369111467284986">Vermoedelijke captive portal</translation>
 <translation id="1290331692326790741">Zwak signaal</translation>
 <translation id="1314565355471455267">Android VPN</translation>
@@ -23,7 +23,7 @@
 <translation id="1337912285145772892">Aanpassen aan scangebied</translation>
 <translation id="1387854245479784695">Dit is het totaal voor alle kernen</translation>
 <translation id="1397738625398125236">Gateway kan worden gepingd</translation>
-<translation id="1398634363027580500">Zeer lange HTTPS-wachttijd</translation>
+<translation id="1398634363027580500">Zeer lange HTTPS-latentie</translation>
 <translation id="1413240736185167732">Mislukt - Filter mislukt</translation>
 <translation id="1416836038590872660">EAP-MD5</translation>
 <translation id="1468664791493211953">Aanbiedingen</translation>
@@ -91,7 +91,7 @@
 <translation id="3199982728237701504">Documentfeeder (dubbelzijdig)</translation>
 <translation id="3246869037381808805">Afdruktaken ouder dan 1 dag worden verwijderd</translation>
 <translation id="3268178239013324452">Mislukt - Klep geopend</translation>
-<translation id="3310640316857623290">DNS-wachttijd aanzienlijk langer dan toelaatbare drempel</translation>
+<translation id="3310640316857623290">DNS-latentie aanzienlijk langer dan toelaatbare drempel</translation>
 <translation id="3328783797891415197">Test actief</translation>
 <translation id="3368922792935385530">Verbonden</translation>
 <translation id="3369013195428705271">Weet je zeker dat je je hele afdrukgeschiedenis wilt verwijderen? Je actieve afdruktaken worden niet verwijderd.</translation>
@@ -282,7 +282,7 @@
 <translation id="7561454561030345039">Deze actie wordt beheerd door je beheerder</translation>
 <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation>
 <translation id="7620771111601174153">Meer informatie in het Helpcentrum</translation>
-<translation id="7648838807254605802">Lage HTTPS-wachttijd</translation>
+<translation id="7648838807254605802">Lage HTTPS-latentie</translation>
 <translation id="7658239707568436148">Annuleren</translation>
 <translation id="7690294790491645610">Nieuw wachtwoord bevestigen</translation>
 <translation id="7701040980221191251">Geen</translation>
@@ -316,14 +316,14 @@
 <translation id="8398927464629426868">De snelheid waarmee het apparaat op dit moment wordt opgeladen of ontladen</translation>
 <translation id="8461329675984532579">Naam thuisprovider</translation>
 <translation id="8475690821716466388">Wifi-netwerk is beveiligd met het zwakke protocol WEP PSK</translation>
-<translation id="8477551185774834963">DNS-wachttijd is iets langer dan de toelaatbare drempel</translation>
+<translation id="8477551185774834963">DNS-latentie is iets langer dan de toelaatbare drempel</translation>
 <translation id="8483248364096924578">IP-adres</translation>
 <translation id="8503813439785031346">Gebruikersnaam</translation>
 <translation id="8576249514688522074">Niet geïnitialiseerd</translation>
 <translation id="8620617069779373398">Roamingstatus</translation>
 <translation id="8675354002693747642">Eerder gedeelde sleutel</translation>
 <translation id="871560550817059752">Mislukt - Geen inkt meer</translation>
-<translation id="8723108084122415655">Niet-standaard netwerk overschrijdt drempel voor wachttijd</translation>
+<translation id="8723108084122415655">Niet-standaard netwerk overschrijdt drempel voor latentie</translation>
 <translation id="8726019395068607495">Gestopt: klep geopend</translation>
 <translation id="8730621377337864115">Klaar</translation>
 <translation id="8747900814994928677">Wijziging bevestigen</translation>
@@ -335,7 +335,7 @@
 <translation id="8845001906332463065">Hulp nodig?</translation>
 <translation id="8881098542468797602">Test geslaagd</translation>
 <translation id="8898840733695078011">Signaalsterkte</translation>
-<translation id="8910721771319628100">Standaardnetwerk overschrijdt drempel voor wachttijd</translation>
+<translation id="8910721771319628100">Standaardnetwerk overschrijdt drempel voor latentie</translation>
 <translation id="8919837981463578619">Mislukt - Lade ontbreekt</translation>
 <translation id="8928727111548978589">Mislukt - Geen papier meer</translation>
 <translation id="8930622219860340959">Draadloos</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb
index e80b3bf6..c07e9d8 100644
--- a/chromeos/strings/chromeos_strings_or.xtb
+++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -330,7 +330,7 @@
 <translation id="877985182522063539">A4</translation>
 <translation id="8798099450830957504">ଡିଫଲ୍ଟ</translation>
 <translation id="8798441408945964110">ପ୍ରଦାତାଙ୍କ ନାମ</translation>
-<translation id="880791622116642296">ଏହା ହେଉଛି ଆପଣଙ୍କ ବ୍ୟାଟେରୀ କେତେ ଥର ଏକ ସମ୍ପୂର୍ଣ୍ଣ ଚାର୍ଜିଂ ସାଇକଲରେ ଗତି କରିଛି</translation>
+<translation id="880791622116642296">ଏହା ଆପଣଙ୍କ ବ୍ୟାଟେରୀ କେତେ ଥର ସମ୍ପୂର୍ଣ୍ଣ ରୂପେ ଚାର୍ଜ ହୋଇଛି ତାହା ଦର୍ଶାଏ</translation>
 <translation id="8814190375133053267">ୱାଇ-ଫାଇ</translation>
 <translation id="8845001906332463065">ସାହାଯ୍ୟ ପାଆନ୍ତୁ</translation>
 <translation id="8881098542468797602">ଟେଷ୍ଟ ସଫଳ ହୋଇଛି</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index aa985242..0875f50 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -330,7 +330,7 @@
 <translation id="877985182522063539">A4</translation>
 <translation id="8798099450830957504">Predvolené</translation>
 <translation id="8798441408945964110">Názov poskytovateľa</translation>
-<translation id="880791622116642296">Toto číslo vyjadruje, koľkokrát prešla vaša batéria úplným cyklom nabíjania.</translation>
+<translation id="880791622116642296">Toto číslo vyjadruje, koľkokrát prešla vaša batéria úplným cyklom nabíjania</translation>
 <translation id="8814190375133053267">Wi‑Fi</translation>
 <translation id="8845001906332463065">Získať pomoc</translation>
 <translation id="8881098542468797602">Test bol úspešný</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb
index 06f03d6..e6d924e 100644
--- a/chromeos/strings/chromeos_strings_th.xtb
+++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -21,6 +21,7 @@
 <translation id="1327977588028644528">เกตเวย์</translation>
 <translation id="1330426557709298164">JPG</translation>
 <translation id="1337912285145772892">พอดีกับพื้นที่สแกน</translation>
+<translation id="1387854245479784695">นี่เป็นการรวม Core ทั้งหมด</translation>
 <translation id="1397738625398125236">ปิงเกตเวย์ได้</translation>
 <translation id="1398634363027580500">เวลาในการตอบสนองของ HTTPS สูงมาก</translation>
 <translation id="1413240736185167732">ไม่สำเร็จ - ตัวกรองล้มเหลว</translation>
@@ -104,6 +105,7 @@
 <translation id="3527036260304016759">ไม่สำเร็จ - ข้อผิดพลาดที่ไม่รู้จัก</translation>
 <translation id="357889014807611375">Wi-Fi ที่มีการวัดปริมาณอินเทอร์เน็ต</translation>
 <translation id="360565022852130722">เครือข่าย WiFi มีการรักษาความปลอดภัยด้วยโปรโตคอล WEP 802.1x ที่ไม่รัดกุม</translation>
+<translation id="3712633734921637892">จำกัดความเร็ว CPU อยู่ในขณะนี้เพื่อประหยัดแบตเตอรี่หรือลดอุณหภูมิ</translation>
 <translation id="3740976234706877572"><ph name="AVERAGE_SCORE" /> ★ (<ph name="AGGREGATED_COUNT" /> รีวิว)</translation>
 <translation id="3748026146096797577">ไม่ได้เชื่อมต่อ</translation>
 <translation id="3749289110408117711">ชื่อไฟล์</translation>
@@ -230,6 +232,7 @@
 <translation id="6146993107019042706">ป้อนรหัสผ่านใหม่เพื่อเปลี่ยนรหัสผ่านให้เสร็จ</translation>
 <translation id="6147514244879357420">PNG</translation>
 <translation id="6165508094623778733">ดูข้อมูลเพิ่มเติม</translation>
+<translation id="6189418609903030344">ความจุแบตเตอรี่จะลดลงเมื่อใช้ไปเรื่อยๆ</translation>
 <translation id="6191293864534840972">เนมเซิร์ฟเวอร์มีรูปแบบไม่ถูกต้อง</translation>
 <translation id="6232017090690406397">แบตเตอรี่</translation>
 <translation id="6325525973963619867">ล้มเหลว</translation>
@@ -327,6 +330,7 @@
 <translation id="877985182522063539">A4</translation>
 <translation id="8798099450830957504">ค่าเริ่มต้น</translation>
 <translation id="8798441408945964110">ชื่อผู้ให้บริการ</translation>
+<translation id="880791622116642296">นี่คือจำนวนครั้งที่ชาร์จแบตเตอรี่จนเต็ม</translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="8845001906332463065">ขอความช่วยเหลือ</translation>
 <translation id="8881098542468797602">การทดสอบสำเร็จ</translation>
diff --git a/chromeos/strings/chromeos_strings_uz.xtb b/chromeos/strings/chromeos_strings_uz.xtb
index ea519ba..dde4485 100644
--- a/chromeos/strings/chromeos_strings_uz.xtb
+++ b/chromeos/strings/chromeos_strings_uz.xtb
@@ -105,7 +105,7 @@
 <translation id="3527036260304016759">Bajarilmadi - Notanish xato</translation>
 <translation id="357889014807611375">Cheklangan trafikli Wi-Fi</translation>
 <translation id="360565022852130722">WiFi tarmoq zaif WEP 802.1x protokoli bilan himoyalangan</translation>
-<translation id="3712633734921637892">Batareyani tejash yoki haroratni tushurish maqsadida protsessor tezligi cheklangan</translation>
+<translation id="3712633734921637892">Batareyani tejash yoki haroratni tushurish maqsadida CPU (markaziy protsessor) tezligi cheklangan</translation>
 <translation id="3740976234706877572"><ph name="AVERAGE_SCORE" /> ★ (<ph name="AGGREGATED_COUNT" /> ta sharh)</translation>
 <translation id="3748026146096797577">Ulanilmagan</translation>
 <translation id="3749289110408117711">Fayl nomi</translation>
@@ -263,6 +263,7 @@
 <translation id="6977381486153291903">Mikrodastur versiyasi</translation>
 <translation id="7028979494427204405">Bu qurilma va uning foydalanuvchilari harakatlari, ochilgan sahifalar, parollar va emaillar <ph name="MANAGER" /> domenida boshqariladi.</translation>
 <translation id="7040230719604914234">Operator</translation>
+<translation id="7059230779847288458">Quvvat olmoqda (<ph name="TIME_VALUE" /> qoldi)</translation>
 <translation id="708426984172631313">TOʻXTATILDI</translation>
 <translation id="7143207342074048698">Ulanmoqda</translation>
 <translation id="714876143603641390">LAN aloqasi</translation>
@@ -281,6 +282,7 @@
 <translation id="7502658306369382406">IPv6 manzil</translation>
 <translation id="7561454561030345039">Bu sozlama administrator tomonidan boshqariladi</translation>
 <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation>
+<translation id="7595982850646262331"><ph name="TIME_VALUE" /> qoldi</translation>
 <translation id="7620771111601174153">Yordam markazi orqali batafsil</translation>
 <translation id="7648838807254605802">HTTPS kechikishi yuqori</translation>
 <translation id="7658239707568436148">Bekor qilish</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb
index d273c68..9b052e4 100644
--- a/chromeos/strings/chromeos_strings_zh-CN.xtb
+++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -21,6 +21,7 @@
 <translation id="1327977588028644528">网关</translation>
 <translation id="1330426557709298164">JPG</translation>
 <translation id="1337912285145772892">适合扫描区域</translation>
+<translation id="1387854245479784695">此指标是所有核心的汇总数据</translation>
 <translation id="1397738625398125236">可以对网关执行 ping 操作</translation>
 <translation id="1398634363027580500">HTTPS 延迟非常高</translation>
 <translation id="1413240736185167732">失败 - 过滤器出问题了</translation>
@@ -104,6 +105,7 @@
 <translation id="3527036260304016759">失败 - 不明错误</translation>
 <translation id="357889014807611375">按流量计费的 Wi-Fi</translation>
 <translation id="360565022852130722">Wi-Fi 网络采用了防护能力较弱的 WEP 802.1x 协议</translation>
+<translation id="3712633734921637892">目前 CPU 速度受限,这是为了节省电池电量或降低温度</translation>
 <translation id="3740976234706877572"><ph name="AVERAGE_SCORE" /> ★(<ph name="AGGREGATED_COUNT" /> 条评价)</translation>
 <translation id="3748026146096797577">未建立连接</translation>
 <translation id="3749289110408117711">文件名</translation>
@@ -230,6 +232,7 @@
 <translation id="6146993107019042706">要完成更改,请输入您的新密码</translation>
 <translation id="6147514244879357420">PNG</translation>
 <translation id="6165508094623778733">了解详情</translation>
+<translation id="6189418609903030344">电池容量会随使用时长的增加而减少</translation>
 <translation id="6191293864534840972">域名服务器格式不正确</translation>
 <translation id="6232017090690406397">电池</translation>
 <translation id="6325525973963619867">失败</translation>
@@ -327,6 +330,7 @@
 <translation id="877985182522063539">A4</translation>
 <translation id="8798099450830957504">默认</translation>
 <translation id="8798441408945964110">提供商名称</translation>
+<translation id="880791622116642296">这是电池已经历的完整充电循环次数</translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="8845001906332463065">获取帮助</translation>
 <translation id="8881098542468797602">测试成功</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb
index f68b5a2..35588cc0 100644
--- a/chromeos/strings/chromeos_strings_zh-HK.xtb
+++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -330,7 +330,7 @@
 <translation id="877985182522063539">A4</translation>
 <translation id="8798099450830957504">預設</translation>
 <translation id="8798441408945964110">供應商名稱</translation>
-<translation id="880791622116642296">這是電池經過的完整充電循環次數</translation>
+<translation id="880791622116642296">這是電池經過完整充電循環的次數</translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="8845001906332463065">取得說明</translation>
 <translation id="8881098542468797602">已通過測試</translation>
diff --git a/components/BUILD.gn b/components/BUILD.gn
index 5d9e535..b95d086 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -185,6 +185,8 @@
     "//components/webdata_services:unit_tests",
   ]
 
+  data_deps = [ "//testing/buildbot/filters:components_unittests_filters" ]
+
   if (toolkit_views) {
     deps += [
       "//components/media_message_center:unit_tests",
@@ -335,7 +337,7 @@
       ]
     }
 
-    data_deps = [
+    data_deps += [
       ":components_tests_pak",
       "//third_party/mesa_headers",
       "//ui/resources:ui_test_pak_data",
diff --git a/components/account_manager_core/account_manager_facade.h b/components/account_manager_core/account_manager_facade.h
index 6044cc42..81f6b4a 100644
--- a/components/account_manager_core/account_manager_facade.h
+++ b/components/account_manager_core/account_manager_facade.h
@@ -103,6 +103,11 @@
   // Unregisters an observer that was registered using AddObserver.
   virtual void RemoveObserver(Observer* observer) = 0;
 
+  // Gets the list of accounts in Account Manager. If the remote side doesn't
+  // support this call, an empty list of accounts will be returned.
+  virtual void GetAccounts(
+      base::OnceCallback<void(const std::vector<Account>&)> callback) = 0;
+
   // Launches account addition dialog and calls the `callback` with the result.
   // If `result` is `kSuccess`, the added account will be passed to the
   // callback. Otherwise `account` will be set to `base::nullopt`.
diff --git a/components/account_manager_core/account_manager_facade_impl.cc b/components/account_manager_core/account_manager_facade_impl.cc
index bb674fa..a7e0e827 100644
--- a/components/account_manager_core/account_manager_facade_impl.cc
+++ b/components/account_manager_core/account_manager_facade_impl.cc
@@ -14,8 +14,26 @@
 namespace {
 
 // Interface versions in //chromeos/crosapi/mojom/account_manager.mojom:
-// MinVersion of crosapi::mojom::AccountManager::AddObserver
-constexpr uint32_t kMinVersionWithObserver = 1;
+// MinVersion of crosapi::mojom::AccountManager::GetAccounts
+constexpr uint32_t kMinVersionWithGetAccounts = 2;
+
+void UnmarshalAccounts(
+    base::OnceCallback<void(const std::vector<account_manager::Account>&)>
+        callback,
+    std::vector<crosapi::mojom::AccountPtr> mojo_accounts) {
+  std::vector<account_manager::Account> accounts;
+  for (const auto& mojo_account : mojo_accounts) {
+    base::Optional<account_manager::Account> maybe_account =
+        account_manager::FromMojoAccount(mojo_account);
+    if (!maybe_account) {
+      // Skip accounts we couldn't unmarshal. No logging, as it would produce
+      // a lot of noise.
+      continue;
+    }
+    accounts.emplace_back(std::move(maybe_account.value()));
+  }
+  std::move(callback).Run(std::move(accounts));
+}
 
 }  // namespace
 
@@ -24,15 +42,16 @@
     uint32_t remote_version,
     base::OnceClosure init_finished)
     : remote_version_(remote_version),
-      account_manager_remote_(std::move(account_manager_remote)),
-      init_finished_(std::move(init_finished)) {
-  DCHECK(init_finished_);
+      account_manager_remote_(std::move(account_manager_remote)) {
+  DCHECK(init_finished);
+  initialization_callbacks_.emplace_back(std::move(init_finished));
 
-  if (!account_manager_remote_ || remote_version_ < kMinVersionWithObserver) {
+  if (!account_manager_remote_ ||
+      remote_version_ < kMinVersionWithGetAccounts) {
     LOG(WARNING) << "Found remote at: " << remote_version_
-                 << ", expected: " << kMinVersionWithObserver
+                 << ", expected: " << kMinVersionWithGetAccounts
                  << ". Account consistency will be disabled";
-    std::move(init_finished_).Run();
+    FinishInitSequenceIfNotAlreadyFinished();
     return;
   }
   account_manager_remote_->AddObserver(
@@ -43,7 +62,7 @@
 AccountManagerFacadeImpl::~AccountManagerFacadeImpl() = default;
 
 bool AccountManagerFacadeImpl::IsInitialized() {
-  return is_initialized_;
+  return is_remote_initialized_;
 }
 
 void AccountManagerFacadeImpl::AddObserver(Observer* observer) {
@@ -54,6 +73,20 @@
   observer_list_.RemoveObserver(observer);
 }
 
+void AccountManagerFacadeImpl::GetAccounts(
+    base::OnceCallback<void(const std::vector<account_manager::Account>&)>
+        callback) {
+  if (!account_manager_remote_ ||
+      remote_version_ < kMinVersionWithGetAccounts) {
+    // Remote side doesn't support GetAccounts, return an empty list.
+    std::move(callback).Run({});
+    return;
+  }
+  RunAfterInitializationSequence(
+      base::BindOnce(&AccountManagerFacadeImpl::GetAccountsInternal,
+                     weak_factory_.GetWeakPtr(), std::move(callback)));
+}
+
 void AccountManagerFacadeImpl::ShowAddAccountDialog(
     const AccountAdditionSource& source,
     base::OnceCallback<void(const AccountAdditionResult& result)> callback) {
@@ -66,7 +99,6 @@
   // TODO(crbug.com/1140469): implement this.
 }
 
-
 void AccountManagerFacadeImpl::OnReceiverReceived(
     mojo::PendingReceiver<AccountManagerObserver> receiver) {
   receiver_ =
@@ -77,16 +109,21 @@
   account_manager_remote_->IsInitialized(base::BindOnce(
       &AccountManagerFacadeImpl::OnInitialized, weak_factory_.GetWeakPtr()));
 }
+
 void AccountManagerFacadeImpl::OnInitialized(bool is_initialized) {
   if (is_initialized)
-    is_initialized_ = true;
+    is_remote_initialized_ = true;
   // else: We will receive a notification in |OnTokenUpserted|.
-  std::move(init_finished_).Run();
+  FinishInitSequenceIfNotAlreadyFinished();
 }
 
 void AccountManagerFacadeImpl::OnTokenUpserted(
     crosapi::mojom::AccountPtr account) {
-  is_initialized_ = true;
+  is_remote_initialized_ = true;
+  // |OnTokenUpserted| may be invoked before |OnInitialized|. Invoking
+  // initialization sequence callbacks before observers makes sure observers
+  // aren't confused by the call order.
+  FinishInitSequenceIfNotAlreadyFinished();
 
   base::Optional<account_manager::Account> maybe_account =
       account_manager::FromMojoAccount(account);
@@ -113,3 +150,29 @@
     observer.OnAccountRemoved(maybe_account->key);
   }
 }
+
+void AccountManagerFacadeImpl::GetAccountsInternal(
+    base::OnceCallback<void(const std::vector<account_manager::Account>&)>
+        callback) {
+  account_manager_remote_->GetAccounts(
+      base::BindOnce(&UnmarshalAccounts, std::move(callback)));
+}
+
+void AccountManagerFacadeImpl::FinishInitSequenceIfNotAlreadyFinished() {
+  if (is_initialization_sequence_finished_)
+    return;
+  is_initialization_sequence_finished_ = true;
+  for (auto& cb : initialization_callbacks_) {
+    std::move(cb).Run();
+  }
+  initialization_callbacks_.clear();
+}
+
+void AccountManagerFacadeImpl::RunAfterInitializationSequence(
+    base::OnceClosure closure) {
+  if (!is_initialization_sequence_finished_) {
+    initialization_callbacks_.emplace_back(std::move(closure));
+  } else {
+    std::move(closure).Run();
+  }
+}
diff --git a/components/account_manager_core/account_manager_facade_impl.h b/components/account_manager_core/account_manager_facade_impl.h
index 2924c79..bd06726 100644
--- a/components/account_manager_core/account_manager_facade_impl.h
+++ b/components/account_manager_core/account_manager_facade_impl.h
@@ -38,6 +38,9 @@
   bool IsInitialized() override;
   void AddObserver(Observer* observer) override;
   void RemoveObserver(Observer* observer) override;
+  void GetAccounts(
+      base::OnceCallback<void(const std::vector<account_manager::Account>&)>
+          callback) override;
   void ShowAddAccountDialog(
       const AccountAdditionSource& source,
       base::OnceCallback<void(const AccountAdditionResult& result)> callback)
@@ -54,13 +57,36 @@
       mojo::PendingReceiver<AccountManagerObserver> receiver);
   void OnInitialized(bool is_initialized);
 
+  void GetAccountsInternal(
+      base::OnceCallback<void(const std::vector<account_manager::Account>&)>
+          callback);
+
   // Mojo API version on the remote (Ash) side.
   const uint32_t remote_version_;
+
+  // The initialization sequence for |AccountManagerFacadeImpl| consists of:
+  // 1. Adding an observer to the remote.
+  // 2. Querying the remote initialization status.
+  //
+  // Remote-querying methods like |GetAccounts| won't actually produce a remote
+  // call until the initialization sequence is finished (instead, they will be
+  // queued in |initialization_callbacks_|).
+  //
+  // |FinishInitSequenceIfNotAlreadyFinished| invokes callbacks from
+  // |initialization_callbacks_| and marks the initialization as finished.
+  void FinishInitSequenceIfNotAlreadyFinished();
+  // |closure| will be invoked after the initialization sequence is finished.
+  // See |FinishInitSequenceIfNotAlreadyFinished| for details.
+  void RunAfterInitializationSequence(base::OnceClosure closure);
+
+  bool is_remote_initialized_ = false;
+  bool is_initialization_sequence_finished_ = false;
+  std::vector<base::OnceClosure> initialization_callbacks_;
+
   mojo::Remote<crosapi::mojom::AccountManager> account_manager_remote_;
-  base::OnceClosure init_finished_;
-  bool is_initialized_ = false;
   std::unique_ptr<mojo::Receiver<crosapi::mojom::AccountManagerObserver>>
       receiver_;
+
   base::ObserverList<Observer> observer_list_;
 
   base::WeakPtrFactory<AccountManagerFacadeImpl> weak_factory_{this};
diff --git a/components/account_manager_core/account_manager_facade_impl_unittest.cc b/components/account_manager_core/account_manager_facade_impl_unittest.cc
index c0467c7..25ac2e6 100644
--- a/components/account_manager_core/account_manager_facade_impl_unittest.cc
+++ b/components/account_manager_core/account_manager_facade_impl_unittest.cc
@@ -6,7 +6,9 @@
 
 #include <limits>
 
+#include "base/test/bind.h"
 #include "base/test/gmock_callback_support.h"
+#include "base/test/mock_callback.h"
 #include "base/test/task_environment.h"
 #include "chromeos/crosapi/mojom/account_manager.mojom.h"
 #include "components/account_manager_core/account.h"
@@ -42,6 +44,14 @@
     observers_.Add(std::move(observer));
   }
 
+  void GetAccounts(GetAccountsCallback callback) override {
+    std::vector<crosapi::mojom::AccountPtr> mojo_accounts;
+    std::transform(std::begin(accounts_), std::end(accounts_),
+                   std::back_inserter(mojo_accounts),
+                   &account_manager::ToMojoAccount);
+    std::move(callback).Run(std::move(mojo_accounts));
+  }
+
   mojo::Remote<crosapi::mojom::AccountManager> CreateRemote() {
     mojo::Remote<crosapi::mojom::AccountManager> remote;
     receivers_.Add(this, remote.BindNewPipeAndPassReceiver());
@@ -61,8 +71,13 @@
     }
   }
 
+  void SetAccounts(const std::vector<account_manager::Account>& accounts) {
+    accounts_ = accounts;
+  }
+
  private:
   bool is_initialized_{false};
+  std::vector<account_manager::Account> accounts_;
   mojo::ReceiverSet<crosapi::mojom::AccountManager> receivers_;
   mojo::RemoteSet<crosapi::mojom::AccountManagerObserver> observers_;
 };
@@ -84,7 +99,21 @@
               (override));
 };
 
+MATCHER_P(AccountEq, expected_account, "") {
+  return testing::ExplainMatchResult(
+             testing::Field(&account_manager::Account::key,
+                            testing::Eq(expected_account.key)),
+             arg, result_listener) &&
+         testing::ExplainMatchResult(
+             testing::Field(&account_manager::Account::raw_email,
+                            testing::StrEq(expected_account.raw_email)),
+             arg, result_listener);
+}
+
+using base::MockOnceCallback;
+
 constexpr char kTestAccountEmail[] = "test@gmail.com";
+constexpr char kAnotherTestAccountEmail[] = "another_test@gmail.com";
 
 }  // namespace
 
@@ -177,3 +206,69 @@
   account_manager().NotifyOnAccountRemovedObservers(account);
   run_loop.Run();
 }
+
+TEST_F(AccountManagerFacadeImplTest,
+       GetAccountsReturnsEmptyListOfAccountsWhenAccountManagerAshIsEmpty) {
+  std::unique_ptr<AccountManagerFacadeImpl> account_manager_facade =
+      CreateFacade();
+  account_manager().SetAccounts({});
+
+  MockOnceCallback<void(const std::vector<account_manager::Account>&)> callback;
+  base::RunLoop run_loop;
+  EXPECT_CALL(callback, Run(testing::IsEmpty()))
+      .WillOnce(base::test::RunClosure(run_loop.QuitClosure()));
+  account_manager_facade->GetAccounts(callback.Get());
+  run_loop.Run();
+}
+
+TEST_F(AccountManagerFacadeImplTest, GetAccountsCorrectlyMarshalsTwoAccounts) {
+  std::unique_ptr<AccountManagerFacadeImpl> account_manager_facade =
+      CreateFacade();
+  account_manager::Account account1 =
+      account_manager::CreateTestGaiaAccount(kTestAccountEmail);
+  account_manager::Account account2 =
+      account_manager::CreateTestGaiaAccount(kAnotherTestAccountEmail);
+  account_manager().SetAccounts({account1, account2});
+
+  MockOnceCallback<void(const std::vector<account_manager::Account>&)> callback;
+  base::RunLoop run_loop;
+  EXPECT_CALL(callback, Run(testing::ElementsAre(AccountEq(account1),
+                                                 AccountEq(account2))))
+      .WillOnce(base::test::RunClosure(run_loop.QuitClosure()));
+  account_manager_facade->GetAccounts(callback.Get());
+  run_loop.Run();
+}
+
+TEST_F(AccountManagerFacadeImplTest,
+       GetAccountsIsSafeToCallBeforeAccountManagerFacadeIsNotInitialized) {
+  account_manager::Account account =
+      account_manager::CreateTestGaiaAccount(kTestAccountEmail);
+  account_manager().SetAccounts({account});
+
+  // |CreateFacade| waits for the AccountManagerFacadeImpl's initialization
+  // sequence to be finished. To avoid this, create it directly here.
+  auto account_manager_facade = std::make_unique<AccountManagerFacadeImpl>(
+      account_manager().CreateRemote(),
+      /* remote_version= */ std::numeric_limits<uint32_t>::max());
+
+  MockOnceCallback<void(const std::vector<account_manager::Account>&)> callback;
+  base::RunLoop run_loop;
+  EXPECT_CALL(callback, Run(testing::ElementsAre(AccountEq(account))))
+      .WillOnce(base::test::RunClosure(run_loop.QuitClosure()));
+  account_manager_facade->GetAccounts(callback.Get());
+  run_loop.Run();
+}
+
+TEST_F(AccountManagerFacadeImplTest,
+       GetAccountsReturnsEmptyListOfAccountsWhenRemoteIsNull) {
+  auto account_manager_facade = std::make_unique<AccountManagerFacadeImpl>(
+      mojo::Remote<crosapi::mojom::AccountManager>(),
+      /* remote_version= */ std::numeric_limits<uint32_t>::max());
+
+  MockOnceCallback<void(const std::vector<account_manager::Account>&)> callback;
+  base::RunLoop run_loop;
+  EXPECT_CALL(callback, Run(testing::IsEmpty()))
+      .WillOnce(base::test::RunClosure(run_loop.QuitClosure()));
+  account_manager_facade->GetAccounts(callback.Get());
+  run_loop.Run();
+}
diff --git a/components/autofill/core/browser/autofill_field.cc b/components/autofill/core/browser/autofill_field.cc
index 4cb31b5..6c285ce7 100644
--- a/components/autofill/core/browser/autofill_field.cc
+++ b/components/autofill/core/browser/autofill_field.cc
@@ -21,7 +21,9 @@
     : field_signature_(field_signature) {}
 
 AutofillField::AutofillField(const FormFieldData& field)
-    : FormFieldData(field), parseable_name_(field.name) {
+    : FormFieldData(field),
+      parseable_name_(field.name),
+      parseable_label_(field.label) {
   field_signature_ =
       CalculateFieldSignatureByNameAndType(name, form_control_type);
 }
@@ -101,14 +103,6 @@
 }
 
 AutofillType AutofillField::ComputedType() const {
-  // If the corresponding feature is enabled, server predictions that are an
-  // override are granted precedence unconditionally.
-  if (base::FeatureList::IsEnabled(
-          features::kAutofillServerTypeTakesPrecedence) &&
-      server_type_prediction_is_override_ && server_type_ != NO_SERVER_DATA) {
-    return AutofillType(server_type_);
-  }
-
   // If autocomplete=tel/tel-* and server confirms it really is a phone field,
   // we always user the server prediction as html types are not very reliable.
   if ((GroupTypeOfHtmlFieldType(html_type_, html_mode_) == PHONE_BILLING ||
@@ -187,6 +181,14 @@
 }
 
 AutofillType AutofillField::Type() const {
+  // If the corresponding feature is enabled, server predictions that are an
+  // override are granted precedence unconditionally.
+  if (base::FeatureList::IsEnabled(
+          features::kAutofillServerTypeTakesPrecedence) &&
+      server_type_prediction_is_override_ && server_type_ != NO_SERVER_DATA) {
+    return AutofillType(server_type_);
+  }
+
   if (overall_type_.GetStorableType() != NO_SERVER_DATA) {
     return overall_type_;
   }
diff --git a/components/autofill/core/browser/data_model/contact_info.cc b/components/autofill/core/browser/data_model/contact_info.cc
index bd31bdca..1536a96 100644
--- a/components/autofill/core/browser/data_model/contact_info.cc
+++ b/components/autofill/core/browser/data_model/contact_info.cc
@@ -25,16 +25,6 @@
 
 using structured_address::VerificationStatus;
 
-namespace {
-
-// TODO(crbug.com/1103421): Clean legacy implementation once structured names
-// are fully launched.
-bool StructuredAddressesEnabled() {
-  return base::FeatureList::IsEnabled(
-      features::kAutofillEnableSupportForMoreStructureInNames);
-}
-}  // namespace
-
 NameInfo::NameInfo() = default;
 
 NameInfo::NameInfo(const NameInfo& info) {
@@ -49,7 +39,7 @@
 
   // TODO(crbug.com/1103421): Clean legacy implementation once structured names
   // are fully launched.
-  if (StructuredAddressesEnabled()) {
+  if (structured_address::StructuredNamesEnabled()) {
     name_ = info.name_;
   } else {
     given_ = info.given_;
@@ -69,14 +59,14 @@
 }
 
 bool NameInfo::IsStructuredNameMergeable(const NameInfo& newer) const {
-  if (!StructuredAddressesEnabled())
+  if (!structured_address::StructuredNamesEnabled())
     NOTREACHED();
 
   return name_.IsMergeableWithComponent(newer.GetStructuredName());
 }
 
 bool NameInfo::FinalizeAfterImport(bool profile_is_verified) {
-  if (StructuredAddressesEnabled()) {
+  if (structured_address::StructuredNamesEnabled()) {
     name_.MigrateLegacyStructure(profile_is_verified);
     return name_.CompleteFullTree();
   }
@@ -89,7 +79,7 @@
 
   // TODO(crbug.com/1103421): Clean legacy implementation once structured names
   // are fully launched.
-  if (StructuredAddressesEnabled())
+  if (structured_address::StructuredNamesEnabled())
     return name_ == other.name_;
 
   return given_ == other.given_ && middle_ == other.middle_ &&
@@ -101,7 +91,7 @@
 
   // TODO(crbug.com/1103421): Clean legacy implementation once structured names
   // are fully launched.
-  if (StructuredAddressesEnabled()) {
+  if (structured_address::StructuredNamesEnabled()) {
     // TODO(crbug.com/1113617): Honorifics are temporally disabled.
     if (type == NAME_HONORIFIC_PREFIX)
       return base::string16();
@@ -134,7 +124,7 @@
   DCHECK_EQ(NAME, AutofillType(type).group());
   // TODO(crbug.com/1103421): Clean legacy implementation once structured names
   // are fully launched.
-  if (StructuredAddressesEnabled()) {
+  if (structured_address::StructuredNamesEnabled()) {
     // TODO(crbug.com/1113617): Honorifics are temporally disabled.
     if (type == NAME_HONORIFIC_PREFIX)
       return;
@@ -174,7 +164,7 @@
 void NameInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
   // TODO(crbug.com/1103421): Clean legacy implementation once structured names
   // are fully launched.
-  if (StructuredAddressesEnabled()) {
+  if (structured_address::StructuredNamesEnabled()) {
     name_.GetSupportedTypes(supported_types);
   } else {
     supported_types->insert(NAME_FIRST);
@@ -189,7 +179,7 @@
                                      const std::string& app_locale) const {
   // TODO(crbug.com/1103421): Clean legacy implementation once structured names
   // are fully launched.
-  if (!StructuredAddressesEnabled()) {
+  if (!structured_address::StructuredNamesEnabled()) {
     if (type.GetStorableType() == NAME_FULL)
       return FullName();
   }
@@ -202,7 +192,7 @@
                                                  VerificationStatus status) {
   // TODO(crbug.com/1103421): Clean legacy implementation once structured names
   // are fully launched.
-  if (StructuredAddressesEnabled()) {
+  if (structured_address::StructuredNamesEnabled()) {
     if (type.GetStorableType() == NAME_FULL) {
       // If the set string is token equivalent to the old one, the value can
       // just be updated, otherwise create a new name record and complete it in
@@ -233,7 +223,7 @@
     ServerFieldType type) const {
   // TODO(crbug.com/1103421): Clean legacy implementation once structured
   // names are fully launched.
-  if (StructuredAddressesEnabled())
+  if (structured_address::StructuredNamesEnabled())
     return name_.GetVerificationStatusForType(type);
   return VerificationStatus::kNoStatus;
 }
@@ -241,7 +231,7 @@
 base::string16 NameInfo::FullName() const {
   // TODO(crbug.com/1103421): Clean legacy implementation once structured
   // names are fully launched.
-  if (StructuredAddressesEnabled())
+  if (structured_address::StructuredNamesEnabled())
     NOTREACHED();
   if (!full_.empty())
     return full_;
@@ -252,7 +242,7 @@
 base::string16 NameInfo::MiddleInitial() const {
   // TODO(crbug.com/1103421): Clean legacy implementation once structured
   // names are fully launched.
-  if (StructuredAddressesEnabled())
+  if (structured_address::StructuredNamesEnabled())
     NOTREACHED();
   return middle_.empty() ? base::string16() : middle_.substr(0U, 1U);
 }
@@ -260,7 +250,7 @@
 void NameInfo::SetFullName(const base::string16& full) {
   // TODO(crbug.com/1103421): Clean legacy implementation once structured
   // names are fully launched.
-  if (StructuredAddressesEnabled())
+  if (structured_address::StructuredNamesEnabled())
     NOTREACHED();
   full_ = full;
   data_util::NameParts parts = data_util::SplitName(full);
diff --git a/components/autofill/core/browser/form_parsing/form_field.cc b/components/autofill/core/browser/form_parsing/form_field.cc
index 16b45ac..696b422 100644
--- a/components/autofill/core/browser/form_parsing/form_field.cc
+++ b/components/autofill/core/browser/form_parsing/form_field.cc
@@ -342,16 +342,25 @@
   base::StringPiece16 value;
   base::string16 match;
 
+  // TODO(crbug/1165780): Remove once shared labels are launched.
+  const base::string16& label =
+      base::FeatureList::IsEnabled(
+          features::kAutofillEnableSupportForParsingWithSharedLabels)
+          ? field->parseable_label()
+          : field->label;
+
+  const base::string16& name = field->parseable_name();
+
   if ((match_field_attributes & MATCH_LABEL) &&
-      MatchesPattern(field->label, pattern, &match)) {
+      MatchesPattern(label, pattern, &match)) {
     found_match = true;
     match_type_string = "Match in label";
-    value = field->label;
+    value = label;
   } else if ((match_field_attributes & MATCH_NAME) &&
-             MatchesPattern(field->parseable_name(), pattern, &match)) {
+             MatchesPattern(name, pattern, &match)) {
     found_match = true;
     match_type_string = "Match in name";
-    value = field->parseable_name();
+    value = name;
   }
 
   if (found_match && logging.log_manager) {
diff --git a/components/autofill/core/browser/form_parsing/form_field.h b/components/autofill/core/browser/form_parsing/form_field.h
index 38589e53..904c373 100644
--- a/components/autofill/core/browser/form_parsing/form_field.h
+++ b/components/autofill/core/browser/form_parsing/form_field.h
@@ -151,6 +151,7 @@
 
  private:
   FRIEND_TEST_ALL_PREFIXES(FormFieldTest, Match);
+  FRIEND_TEST_ALL_PREFIXES(FormFieldTest, TestParseableLabels);
 
   // Function pointer type for the parsing function that should be passed to the
   // ParseFormFieldsPass() helper function.
diff --git a/components/autofill/core/browser/form_parsing/form_field_unittest.cc b/components/autofill/core/browser/form_parsing/form_field_unittest.cc
index 3e1c8ee..1d41fde 100644
--- a/components/autofill/core/browser/form_parsing/form_field_unittest.cc
+++ b/components/autofill/core/browser/form_parsing/form_field_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "components/autofill/core/browser/autofill_field.h"
 #include "components/autofill/core/browser/form_parsing/form_field.h"
+#include "components/autofill/core/browser/form_structure.h"
 #include "components/autofill/core/common/autofill_features.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -23,6 +24,13 @@
   static uint64_t id_counter_ = 0;
   return FieldRendererId(++id_counter_);
 }
+
+// Sets both the field label and parseable label to |label|.
+void SetFieldLabels(AutofillField* field, const std::string& label) {
+  field->label = base::UTF8ToUTF16(label);
+  field->set_parseable_label(base::UTF8ToUTF16(label));
+}
+
 }  // namespace
 
 TEST(FormFieldTest, Match) {
@@ -32,69 +40,69 @@
   EXPECT_TRUE(FormField::Match(&field, base::string16(), MATCH_LABEL));
 
   // Empty pattern matches non-empty string.
-  field.label = ASCIIToUTF16("a");
+  SetFieldLabels(&field, "a");
   EXPECT_TRUE(FormField::Match(&field, base::string16(), MATCH_LABEL));
 
   // Strictly empty pattern matches empty string.
-  field.label = base::string16();
+  SetFieldLabels(&field, "");
   EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("^$"), MATCH_LABEL));
 
   // Strictly empty pattern does not match non-empty string.
-  field.label = ASCIIToUTF16("a");
+  SetFieldLabels(&field, "a");
   EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^$"), MATCH_LABEL));
 
   // Non-empty pattern doesn't match empty string.
-  field.label = base::string16();
+  SetFieldLabels(&field, "");
   EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("a"), MATCH_LABEL));
 
   // Beginning of line.
-  field.label = ASCIIToUTF16("head_tail");
+  SetFieldLabels(&field, "head_tail");
   EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("^head"), MATCH_LABEL));
   EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^tail"), MATCH_LABEL));
 
   // End of line.
-  field.label = ASCIIToUTF16("head_tail");
+  SetFieldLabels(&field, "head_tail");
   EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("head$"), MATCH_LABEL));
   EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("tail$"), MATCH_LABEL));
 
   // Exact.
-  field.label = ASCIIToUTF16("head_tail");
+  SetFieldLabels(&field, "head_tail");
   EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^head$"), MATCH_LABEL));
   EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("^tail$"), MATCH_LABEL));
   EXPECT_TRUE(
       FormField::Match(&field, ASCIIToUTF16("^head_tail$"), MATCH_LABEL));
 
   // Escaped dots.
-  field.label = ASCIIToUTF16("m.i.");
+  SetFieldLabels(&field, "m.i.");
   // Note: This pattern is misleading as the "." characters are wild cards.
   EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m.i."), MATCH_LABEL));
   EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m\\.i\\."), MATCH_LABEL));
-  field.label = ASCIIToUTF16("mXiX");
+  SetFieldLabels(&field, "mXiX");
   EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("m.i."), MATCH_LABEL));
   EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("m\\.i\\."), MATCH_LABEL));
 
   // Repetition.
-  field.label = ASCIIToUTF16("headtail");
+  SetFieldLabels(&field, "headtail");
   EXPECT_TRUE(
       FormField::Match(&field, ASCIIToUTF16("head.*tail"), MATCH_LABEL));
-  field.label = ASCIIToUTF16("headXtail");
+  SetFieldLabels(&field, "headXtail");
   EXPECT_TRUE(
       FormField::Match(&field, ASCIIToUTF16("head.*tail"), MATCH_LABEL));
-  field.label = ASCIIToUTF16("headXXXtail");
+  SetFieldLabels(&field, "headXXXtail");
   EXPECT_TRUE(
       FormField::Match(&field, ASCIIToUTF16("head.*tail"), MATCH_LABEL));
-  field.label = ASCIIToUTF16("headtail");
+  SetFieldLabels(&field, "headtail");
   EXPECT_FALSE(
       FormField::Match(&field, ASCIIToUTF16("head.+tail"), MATCH_LABEL));
-  field.label = ASCIIToUTF16("headXtail");
+  SetFieldLabels(&field, "headXtail");
   EXPECT_TRUE(
       FormField::Match(&field, ASCIIToUTF16("head.+tail"), MATCH_LABEL));
-  field.label = ASCIIToUTF16("headXXXtail");
+  SetFieldLabels(&field, "headXXXtail");
   EXPECT_TRUE(
       FormField::Match(&field, ASCIIToUTF16("head.+tail"), MATCH_LABEL));
 
   // Alternation.
-  field.label = ASCIIToUTF16("head_tail");
+  SetFieldLabels(&field, "head_tail");
   EXPECT_TRUE(
       FormField::Match(&field, ASCIIToUTF16("head|other"), MATCH_LABEL));
   EXPECT_TRUE(
@@ -102,11 +110,11 @@
   EXPECT_FALSE(FormField::Match(&field, ASCIIToUTF16("bad|good"), MATCH_LABEL));
 
   // Case sensitivity.
-  field.label = ASCIIToUTF16("xxxHeAd_tAiLxxx");
+  SetFieldLabels(&field, "xxxHeAd_tAiLxxx");
   EXPECT_TRUE(FormField::Match(&field, ASCIIToUTF16("head_tail"), MATCH_LABEL));
 
   // Word boundaries.
-  field.label = ASCIIToUTF16("contains word:");
+  SetFieldLabels(&field, "contains word:");
   EXPECT_TRUE(
       FormField::Match(&field, ASCIIToUTF16("\\bword\\b"), MATCH_LABEL));
   EXPECT_FALSE(
@@ -204,4 +212,28 @@
   }
 }
 
+// Test that the parseable label is used when the feature is enabled.
+TEST(FormFieldTest, TestParseableLabels) {
+  FormFieldData field_data;
+  field_data.form_control_type = "text";
+
+  field_data.label = ASCIIToUTF16("not a parseable label");
+  field_data.unique_renderer_id = MakeFieldRendererId();
+  auto autofill_field = std::make_unique<AutofillField>(field_data);
+  autofill_field->set_parseable_label(ASCIIToUTF16("First Name"));
+  {
+    base::test::ScopedFeatureList feature_list;
+    feature_list.InitAndEnableFeature(
+        features::kAutofillEnableSupportForParsingWithSharedLabels);
+    EXPECT_TRUE(FormField::Match(autofill_field.get(),
+                                 ASCIIToUTF16("First Name"), MATCH_LABEL));
+  }
+  {
+    base::test::ScopedFeatureList feature_list;
+    feature_list.InitAndDisableFeature(
+        features::kAutofillEnableSupportForParsingWithSharedLabels);
+    EXPECT_FALSE(FormField::Match(autofill_field.get(),
+                                  ASCIIToUTF16("First Name"), MATCH_LABEL));
+  }
+}
 }  // namespace autofill
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc
index b81752f..3aff3f1 100644
--- a/components/autofill/core/browser/form_structure.cc
+++ b/components/autofill/core/browser/form_structure.cc
@@ -2414,8 +2414,12 @@
   // field names.
   ExtractParseableFieldNames();
 
-  // Extracts the |parsable_label_| for each field.
-  ExtractParseableFieldLabels();
+  // TODO(crbug/1165780): Remove once shared labels are launched.
+  if (base::FeatureList::IsEnabled(
+          features::kAutofillEnableSupportForParsingWithSharedLabels)) {
+    // Extracts the |parsable_label_| for each field.
+    ExtractParseableFieldLabels();
+  }
 }
 
 void FormStructure::ExtractParseableFieldLabels() {
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc
index c0e0aac..e55b969 100644
--- a/components/autofill/core/browser/form_structure_unittest.cc
+++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -5302,6 +5302,14 @@
     // Validate that the server prediction won for the first field.
     EXPECT_EQ(form.field(0)->Type().GetStorableType(), NAME_FIRST);
     EXPECT_EQ(form.field(1)->Type().GetStorableType(), NAME_FULL);
+
+    // Validate that the server override cannot be altered.
+    form.field(0)->SetTypeTo(AutofillType(NAME_FULL));
+    EXPECT_EQ(form.field(0)->Type().GetStorableType(), NAME_FIRST);
+
+    // Validate that that the non-override can be altered.
+    form.field(1)->SetTypeTo(AutofillType(NAME_FIRST));
+    EXPECT_EQ(form.field(1)->Type().GetStorableType(), NAME_FIRST);
   }
 }
 
diff --git a/components/autofill/core/browser/proto/api_v1.proto b/components/autofill/core/browser/proto/api_v1.proto
index bcd25a10..f0b2cf17 100644
--- a/components/autofill/core/browser/proto/api_v1.proto
+++ b/components/autofill/core/browser/proto/api_v1.proto
@@ -72,7 +72,7 @@
         // The predicted field type.
         optional int32 type = 1;
         // Indicates if the prediction is an override.
-        optional bool is_override = 2 [default = false];
+        optional bool override = 2 [default = false];
       }
       // Signature identifying the field that is the same as in the request.
       optional fixed32 field_signature = 1;
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc
index 5a91ee0b..f8c64ed0 100644
--- a/components/autofill/core/common/autofill_features.cc
+++ b/components/autofill/core/common/autofill_features.cc
@@ -54,6 +54,12 @@
 const base::Feature kAutofillCreateDataForTest{
     "AutofillCreateDataForTest", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Controls if the heuristic field parsing utilizes shared labels.
+// TODO(crbug/1165780): Remove once shared labels are launched.
+const base::Feature kAutofillEnableSupportForParsingWithSharedLabels{
+    "AutofillEnableSupportForParsingWithSharedLabels",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Kill switch for Autofill filling.
 const base::Feature kAutofillDisableFilling{"AutofillDisableFilling",
                                             base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h
index dfeef4c..17a9f4f4 100644
--- a/components/autofill/core/common/autofill_features.h
+++ b/components/autofill/core/common/autofill_features.h
@@ -42,6 +42,7 @@
     kAutofillEnablePasswordInfoBarAccountIndicationFooter;
 extern const base::Feature kAutofillEnableSupportForApartmentNumbers;
 extern const base::Feature kAutofillEnableLabelPrecedenceForTurkishAddresses;
+extern const base::Feature kAutofillEnableSupportForParsingWithSharedLabels;
 extern const base::Feature kAutofillEnableSupportForMoreStructureInNames;
 extern const base::Feature kAutofillEnableSupportForMoreStructureInAddresses;
 extern const base::Feature kAutofillEnableSupportForMergingSubsetNames;
diff --git a/components/component_updater/component_updater_switches.cc b/components/component_updater/component_updater_switches.cc
index dc9de60..66bf46f 100644
--- a/components/component_updater/component_updater_switches.cc
+++ b/components/component_updater/component_updater_switches.cc
@@ -10,4 +10,9 @@
 // for the browser process.
 const char kComponentUpdater[] = "component-updater";
 
+// Optional testing override of the Trust Tokens key commitment component's
+// path.
+const char kComponentUpdaterTrustTokensComponentPath[] =
+    "component-updater-trust-tokens-component-path";
+
 }  // namespace switches
diff --git a/components/component_updater/component_updater_switches.h b/components/component_updater/component_updater_switches.h
index 52f3bd5..655f0bb 100644
--- a/components/component_updater/component_updater_switches.h
+++ b/components/component_updater/component_updater_switches.h
@@ -10,6 +10,7 @@
 // All switches in alphabetical order. The switches should be documented
 // alongside the definition of their values in the .cc file.
 extern const char kComponentUpdater[];
+extern const char kComponentUpdaterTrustTokensComponentPath[];
 
 }  // namespace switches
 
diff --git a/components/content_settings/browser/ui/cookie_controls_controller.cc b/components/content_settings/browser/ui/cookie_controls_controller.cc
index 79482df5..ba68ae1 100644
--- a/components/content_settings/browser/ui/cookie_controls_controller.cc
+++ b/components/content_settings/browser/ui/cookie_controls_controller.cc
@@ -107,6 +107,11 @@
   }
 }
 
+bool CookieControlsController::FirstPartyCookiesBlocked() {
+  const GURL& url = GetWebContents()->GetURL();
+  return !cookie_settings_->IsCookieAccessAllowed(url, url, base::nullopt);
+}
+
 int CookieControlsController::GetAllowedCookieCount() {
   auto* pscs =
       content_settings::PageSpecificContentSettings::GetForCurrentDocument(
diff --git a/components/content_settings/browser/ui/cookie_controls_controller.h b/components/content_settings/browser/ui/cookie_controls_controller.h
index d38b8b3..2f949319 100644
--- a/components/content_settings/browser/ui/cookie_controls_controller.h
+++ b/components/content_settings/browser/ui/cookie_controls_controller.h
@@ -44,6 +44,9 @@
   // blocking.
   void OnCookieBlockingEnabledForSite(bool block_third_party_cookies);
 
+  // Returns whether first-party cookies are blocked.
+  bool FirstPartyCookiesBlocked();
+
   void AddObserver(CookieControlsView* obs);
   void RemoveObserver(CookieControlsView* obs);
 
diff --git a/components/feed/core/proto/v2/wire/capability.proto b/components/feed/core/proto/v2/wire/capability.proto
index 1e62cc9..ecd737fb 100644
--- a/components/feed/core/proto/v2/wire/capability.proto
+++ b/components/feed/core/proto/v2/wire/capability.proto
@@ -30,6 +30,5 @@
   OPEN_IN_TAB = 27;
   DOWNLOAD_LINK = 28;
   LOTTIE_ANIMATIONS = 37;
-  LONG_PRESS_CARD_MENU = 38;
   PREFETCH_METADATA = 43;
 }
diff --git a/components/feed/core/v2/proto_util.cc b/components/feed/core/v2/proto_util.cc
index 5a5a3c9..23ea5dc 100644
--- a/components/feed/core/v2/proto_util.cc
+++ b/components/feed/core/v2/proto_util.cc
@@ -121,8 +121,6 @@
   feed_request.add_client_capability(feedwire::Capability::BASE_UI);
   feed_request.add_client_capability(feedwire::Capability::CARD_MENU);
   feed_request.add_client_capability(feedwire::Capability::LOTTIE_ANIMATIONS);
-  feed_request.add_client_capability(
-      feedwire::Capability::LONG_PRESS_CARD_MENU);
   // Add Share capability if sharing is turned on.
   if (base::FeatureList::IsEnabled(kFeedShare)) {
     feed_request.add_client_capability(feedwire::Capability::SHARE);
diff --git a/components/feed/core/v2/proto_util_unittest.cc b/components/feed/core/v2/proto_util_unittest.cc
index 0050caf..42404ea 100644
--- a/components/feed/core/v2/proto_util_unittest.cc
+++ b/components/feed/core/v2/proto_util_unittest.cc
@@ -59,7 +59,6 @@
       testing::UnorderedElementsAre(
           feedwire::Capability::BASE_UI, feedwire::Capability::REQUEST_SCHEDULE,
           feedwire::Capability::LOTTIE_ANIMATIONS,
-          feedwire::Capability::LONG_PRESS_CARD_MENU,
           feedwire::Capability::OPEN_IN_TAB, feedwire::Capability::CARD_MENU,
           feedwire::Capability::DOWNLOAD_LINK,
           feedwire::Capability::INFINITE_FEED,
@@ -115,7 +114,6 @@
       testing::UnorderedElementsAre(
           feedwire::Capability::BASE_UI, feedwire::Capability::REQUEST_SCHEDULE,
           feedwire::Capability::LOTTIE_ANIMATIONS,
-          feedwire::Capability::LONG_PRESS_CARD_MENU,
           feedwire::Capability::OPEN_IN_TAB, feedwire::Capability::CARD_MENU,
           feedwire::Capability::DOWNLOAD_LINK,
           feedwire::Capability::DISMISS_COMMAND,
diff --git a/components/paint_preview/player/android/javatests/src/org/chromium/components/paintpreview/player/PaintPreviewPlayerTest.java b/components/paint_preview/player/android/javatests/src/org/chromium/components/paintpreview/player/PaintPreviewPlayerTest.java
index 1fed6da..a5995f3 100644
--- a/components/paint_preview/player/android/javatests/src/org/chromium/components/paintpreview/player/PaintPreviewPlayerTest.java
+++ b/components/paint_preview/player/android/javatests/src/org/chromium/components/paintpreview/player/PaintPreviewPlayerTest.java
@@ -148,26 +148,11 @@
 
     @Test
     @MediumTest
-    @DisableIf.Build(message = "Flaky, see crbug.com/1110939 and crbug.com/1169668.",
-            sdk_is_less_than = VERSION_CODES.Q)
-    public void
-    nestedLinkClickTest() throws Exception {
+    public void nestedLinkClickTest() throws Exception {
         initPlayerManager(true);
         final View playerHostView = mPlayerManager.getView();
         assertLinkUrl(playerHostView, 220, 220, TEST_IN_VIEWPORT_LINK_URL);
         assertLinkUrl(playerHostView, 300, 270, TEST_IN_VIEWPORT_LINK_URL);
-
-        UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
-        int deviceHeight = device.getDisplayHeight();
-        int statusBarHeight = statusBarHeight();
-        int navigationBarHeight = navigationBarHeight();
-        int padding = 20;
-        int fromY = deviceHeight - navigationBarHeight - padding;
-        int toY = statusBarHeight + padding;
-        mLinkClickHandler.mUrl = null;
-        device.swipe(300, fromY, 300, toY, 10);
-
-        assertLinkUrl(playerHostView, 200, 1500, TEST_OUT_OF_VIEWPORT_LINK_URL);
     }
 
     @Test
diff --git a/components/policy/android/java/src/org/chromium/components/policy/PolicyCache.java b/components/policy/android/java/src/org/chromium/components/policy/PolicyCache.java
index 52c0efd..7cf2c42 100644
--- a/components/policy/android/java/src/org/chromium/components/policy/PolicyCache.java
+++ b/components/policy/android/java/src/org/chromium/components/policy/PolicyCache.java
@@ -6,6 +6,7 @@
 
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.util.Pair;
 
 import androidx.annotation.VisibleForTesting;
 
@@ -13,7 +14,11 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import org.chromium.base.BuildConfig;
 import org.chromium.base.ContextUtils;
+import org.chromium.base.ThreadUtils;
+
+import java.util.List;
 
 /**
  * Manage policy cache that will be used during browser launch stage.
@@ -25,7 +30,21 @@
     @VisibleForTesting
     static final String POLICY_PREF = "Components.Policy";
 
-    private static SharedPreferences sSharedPreferences;
+    private static PolicyCache sPolicyCache;
+
+    public enum Type {
+        Integer,
+        Boolean,
+        String,
+        List,
+        Dict,
+    }
+
+    private boolean mReadable = true;
+
+    private SharedPreferences mSharedPreferences;
+
+    private ThreadUtils.ThreadChecker mThreadChecker = new ThreadUtils.ThreadChecker();
 
     /**
      * Creates and returns SharedPreferences instance that is used to cache policy
@@ -34,14 +53,30 @@
      * @return The SharedPreferences instance that is used for policy caching. Returns null if
      *         application context is not available.
      */
-    private static SharedPreferences getSharedPreferences() {
-        if (sSharedPreferences == null) {
+    private SharedPreferences getSharedPreferences() {
+        if (BuildConfig.DCHECK_IS_ON) {
+            assert mReadable;
+        }
+        mThreadChecker.assertOnValidThread();
+        if (mSharedPreferences == null) {
             Context context = ContextUtils.getApplicationContext();
             // Policy cache is not accessiable without application context.
             if (context == null) return null;
-            sSharedPreferences = context.getSharedPreferences(POLICY_PREF, Context.MODE_PRIVATE);
+            mSharedPreferences = context.getSharedPreferences(POLICY_PREF, Context.MODE_PRIVATE);
         }
-        return sSharedPreferences;
+        return mSharedPreferences;
+    }
+
+    private SharedPreferences.Editor getSharedPreferencesEditor() {
+        mThreadChecker.assertOnValidThread();
+        return ContextUtils.getApplicationContext()
+                .getSharedPreferences(POLICY_PREF, Context.MODE_PRIVATE)
+                .edit();
+    }
+
+    public static PolicyCache get() {
+        if (sPolicyCache == null) sPolicyCache = new PolicyCache();
+        return sPolicyCache;
     }
 
     /**
@@ -49,11 +84,11 @@
      * @return The value of cached integer policy, null if there is no valid
      * cached policy.
      */
-    public static Integer getIntValue(String policy) {
-        SharedPreferences sSharedPreferences = getSharedPreferences();
-        if (sSharedPreferences == null) return null;
-        if (!sSharedPreferences.contains(policy)) return null;
-        return sSharedPreferences.getInt(policy, 0);
+    public Integer getIntValue(String policy) {
+        SharedPreferences sharedPreferences = getSharedPreferences();
+        if (sharedPreferences == null) return null;
+        if (!sharedPreferences.contains(policy)) return null;
+        return sharedPreferences.getInt(policy, 0);
     }
 
     /**
@@ -61,11 +96,11 @@
      * @return The value of cached boolean policy, null if there is no valid
      * cached policy.
      */
-    public static Boolean getBooleanValue(String policy) {
-        SharedPreferences sSharedPreferences = getSharedPreferences();
-        if (sSharedPreferences == null) return null;
-        if (!sSharedPreferences.contains(policy)) return null;
-        return sSharedPreferences.getBoolean(policy, false);
+    public Boolean getBooleanValue(String policy) {
+        SharedPreferences sharedPreferences = getSharedPreferences();
+        if (sharedPreferences == null) return null;
+        if (!sharedPreferences.contains(policy)) return null;
+        return sharedPreferences.getBoolean(policy, false);
     }
 
     /**
@@ -73,11 +108,11 @@
      * @return The value of cached string policy, null if there is no valid
      * cached policy.
      */
-    public static String getStringValue(String policy) {
-        SharedPreferences sSharedPreferences = getSharedPreferences();
-        if (sSharedPreferences == null) return null;
-        if (!sSharedPreferences.contains(policy)) return null;
-        return sSharedPreferences.getString(policy, null);
+    public String getStringValue(String policy) {
+        SharedPreferences sharedPreferences = getSharedPreferences();
+        if (sharedPreferences == null) return null;
+        if (!sharedPreferences.contains(policy)) return null;
+        return sharedPreferences.getString(policy, null);
     }
 
     /**
@@ -85,12 +120,12 @@
      * @return The value of cached list policy, null if there is no valid
      * cached policy.
      */
-    public static JSONArray getListValue(String policy) {
-        SharedPreferences sSharedPreferences = getSharedPreferences();
-        if (sSharedPreferences == null) return null;
-        if (!sSharedPreferences.contains(policy)) return null;
+    public JSONArray getListValue(String policy) {
+        SharedPreferences sharedPreferences = getSharedPreferences();
+        if (sharedPreferences == null) return null;
+        if (!sharedPreferences.contains(policy)) return null;
         try {
-            return new JSONArray(sSharedPreferences.getString(policy, null));
+            return new JSONArray(sharedPreferences.getString(policy, null));
         } catch (JSONException e) {
             return null;
         }
@@ -101,19 +136,90 @@
      * @return The value of cached dictionary policy, null if there is no valid
      * cached policy.
      */
-    public static JSONObject getDictValue(String policy) {
-        SharedPreferences sSharedPreferences = getSharedPreferences();
-        if (sSharedPreferences == null) return null;
-        if (!sSharedPreferences.contains(policy)) return null;
+    public JSONObject getDictValue(String policy) {
+        SharedPreferences sharedPreferences = getSharedPreferences();
+        if (sharedPreferences == null) return null;
+        if (!sharedPreferences.contains(policy)) return null;
         try {
-            return new JSONObject(sSharedPreferences.getString(policy, null));
+            return new JSONObject(sharedPreferences.getString(policy, null));
         } catch (JSONException e) {
             return null;
         }
     }
 
+    public boolean isReadable() {
+        return mReadable;
+    }
+
+    /**
+     * @param policyMap The latest policy value bundle.
+     * @param policyNames The list of policies that needs to be cached if available.
+     * Caches the policies that are available in both |policyNames| and
+     * |policyMap|. It also disables {@link PolicyCache} reading.
+     */
+    public void cachePolicies(PolicyMap policyMap, List<Pair<String, Type>> policyNames) {
+        // TODO(zmin): support policy level while caching policy.
+        SharedPreferences.Editor sharedPreferencesEditor = getSharedPreferencesEditor();
+
+        sharedPreferencesEditor.clear();
+
+        for (Pair<String, Type> policy : policyNames) {
+            String policyName = policy.first;
+            switch (policy.second) {
+                case Integer: {
+                    Integer value = policyMap.getIntValue(policyName);
+                    if (value != null) {
+                        sharedPreferencesEditor.putInt(policyName, value.intValue());
+                    }
+                    break;
+                }
+                case Boolean: {
+                    Boolean value = policyMap.getBooleanValue(policyName);
+                    if (value != null) {
+                        sharedPreferencesEditor.putBoolean(policyName, value.booleanValue());
+                    }
+                    break;
+                }
+                case String: {
+                    String value = policyMap.getStringValue(policyName);
+                    if (value != null) {
+                        sharedPreferencesEditor.putString(policyName, value);
+                    }
+                    break;
+                }
+                // List and Dict policy values are stored in the native library
+                // as base::Value and converted to JSON string to passed through
+                // the JNI. It's stored to the SharedPreferences as String and
+                // will be converted to JSON object when being read.
+                case List: {
+                    String value = policyMap.getListValueAsString(policyName);
+                    if (value != null) {
+                        sharedPreferencesEditor.putString(policyName, value);
+                    }
+                    break;
+                }
+                case Dict: {
+                    String value = policyMap.getDictValueAsString(policyName);
+                    if (value != null) {
+                        sharedPreferencesEditor.putString(policyName, value);
+                    }
+                    break;
+                }
+            }
+        }
+        sharedPreferencesEditor.apply();
+
+        // Policy Service is up and there is no need to get policy from here anymore.
+        enableWriteOnlyMode();
+    }
+
+    private void enableWriteOnlyMode() {
+        mSharedPreferences = null;
+        mReadable = false;
+    }
+
     @VisibleForTesting
-    static void resetSharedPreferencesForTests() {
-        sSharedPreferences = null;
+    static void resetForTesting() {
+        sPolicyCache = null;
     }
 }
diff --git a/components/policy/android/junit/src/org/chromium/components/policy/PolicyCacheTest.java b/components/policy/android/junit/src/org/chromium/components/policy/PolicyCacheTest.java
index 72f264a8..b3e46acf 100644
--- a/components/policy/android/junit/src/org/chromium/components/policy/PolicyCacheTest.java
+++ b/components/policy/android/junit/src/org/chromium/components/policy/PolicyCacheTest.java
@@ -4,8 +4,13 @@
 
 package org.chromium.components.policy;
 
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.util.Pair;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -15,24 +20,54 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.annotation.Config;
 
+import org.chromium.base.BuildConfig;
+import org.chromium.base.CollectionUtil;
 import org.chromium.base.ContextUtils;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
 /** Robolectric test for PolicyCache.  */
 @RunWith(BaseRobolectricTestRunner.class)
 @Config(manifest = Config.NONE)
 public final class PolicyCacheTest {
     private static final String POLICY_NAME = "policy-name";
+    private static final String POLICY_NAME_2 = "policy-name-2";
+    private static final String POLICY_NAME_3 = "policy-name-3";
+    private static final String POLICY_NAME_4 = "policy-name-4";
+    private static final String POLICY_NAME_5 = "policy-name-5";
 
     private SharedPreferences mSharedPreferences;
 
+    private PolicyCache mPolicyCache;
+
+    @Mock
+    private PolicyMap mPolicyMap;
+
     @Before
     public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        PolicyCache.resetForTesting();
+        mPolicyCache = PolicyCache.get();
         mSharedPreferences = ContextUtils.getApplicationContext().getSharedPreferences(
                 PolicyCache.POLICY_PREF, Context.MODE_PRIVATE);
-        PolicyCache.resetSharedPreferencesForTests();
+
+        initPolicyMap();
+    }
+
+    private void initPolicyMap() {
+        when(mPolicyMap.getIntValue(anyString())).thenReturn(null);
+        when(mPolicyMap.getBooleanValue(anyString())).thenReturn(null);
+        when(mPolicyMap.getStringValue(anyString())).thenReturn(null);
+        when(mPolicyMap.getListValueAsString(anyString())).thenReturn(null);
+        when(mPolicyMap.getDictValueAsString(anyString())).thenReturn(null);
     }
 
     @After
@@ -40,35 +75,35 @@
 
     @Test
     public void testGetInt() {
-        Assert.assertNull(PolicyCache.getIntValue(POLICY_NAME));
+        Assert.assertNull(mPolicyCache.getIntValue(POLICY_NAME));
         int expectedPolicyValue = 42;
         mSharedPreferences.edit().putInt(POLICY_NAME, expectedPolicyValue).apply();
-        Assert.assertEquals(expectedPolicyValue, PolicyCache.getIntValue(POLICY_NAME).intValue());
+        Assert.assertEquals(expectedPolicyValue, mPolicyCache.getIntValue(POLICY_NAME).intValue());
     }
 
     @Test
     public void testGetBoolean() {
-        Assert.assertNull(PolicyCache.getBooleanValue(POLICY_NAME));
+        Assert.assertNull(mPolicyCache.getBooleanValue(POLICY_NAME));
         boolean expectedPolicyValue = true;
         mSharedPreferences.edit().putBoolean(POLICY_NAME, expectedPolicyValue).apply();
         Assert.assertEquals(
-                expectedPolicyValue, PolicyCache.getBooleanValue(POLICY_NAME).booleanValue());
+                expectedPolicyValue, mPolicyCache.getBooleanValue(POLICY_NAME).booleanValue());
     }
 
     @Test
     public void testGetString() {
-        Assert.assertNull(PolicyCache.getStringValue(POLICY_NAME));
+        Assert.assertNull(mPolicyCache.getStringValue(POLICY_NAME));
         String expectedPolicyValue = "test-value";
         mSharedPreferences.edit().putString(POLICY_NAME, expectedPolicyValue).apply();
-        Assert.assertEquals(expectedPolicyValue, PolicyCache.getStringValue(POLICY_NAME));
+        Assert.assertEquals(expectedPolicyValue, mPolicyCache.getStringValue(POLICY_NAME));
     }
 
     @Test
     public void testGetList() throws JSONException {
-        Assert.assertNull(PolicyCache.getListValue(POLICY_NAME));
+        Assert.assertNull(mPolicyCache.getListValue(POLICY_NAME));
         String policyValue = "[42, \"test\", true]";
         mSharedPreferences.edit().putString(POLICY_NAME, policyValue).apply();
-        JSONArray actualPolicyValue = PolicyCache.getListValue(POLICY_NAME);
+        JSONArray actualPolicyValue = mPolicyCache.getListValue(POLICY_NAME);
         Assert.assertNotNull(actualPolicyValue);
         Assert.assertEquals(3, actualPolicyValue.length());
         Assert.assertEquals(42, actualPolicyValue.getInt(0));
@@ -80,15 +115,15 @@
     public void testGetInvalidList() throws JSONException {
         String policyValue = "[42, \"test\"";
         mSharedPreferences.edit().putString(POLICY_NAME, policyValue).apply();
-        Assert.assertNull(PolicyCache.getListValue(POLICY_NAME));
+        Assert.assertNull(mPolicyCache.getListValue(POLICY_NAME));
     }
 
     @Test
     public void testGetDict() throws JSONException {
-        Assert.assertNull(PolicyCache.getDictValue(POLICY_NAME));
+        Assert.assertNull(mPolicyCache.getDictValue(POLICY_NAME));
         String policyValue = "{\"key1\":\"value1\", \"key2\":{\"a\":1, \"b\":2}}";
         mSharedPreferences.edit().putString(POLICY_NAME, policyValue).apply();
-        JSONObject actualPolicyValue = PolicyCache.getDictValue(POLICY_NAME);
+        JSONObject actualPolicyValue = mPolicyCache.getDictValue(POLICY_NAME);
         Assert.assertNotNull(actualPolicyValue);
         Assert.assertEquals(2, actualPolicyValue.length());
         Assert.assertEquals("value1", actualPolicyValue.getString("key1"));
@@ -98,9 +133,136 @@
 
     @Test
     public void testGetInvalidDict() throws JSONException {
-        Assert.assertNull(PolicyCache.getDictValue(POLICY_NAME));
+        Assert.assertNull(mPolicyCache.getDictValue(POLICY_NAME));
         String policyValue = "{\"key1\":\"value1\", \"key2\":{\"a\":1, \"b\":2}";
         mSharedPreferences.edit().putString(POLICY_NAME, policyValue).apply();
-        Assert.assertNull(PolicyCache.getListValue(POLICY_NAME));
+        Assert.assertNull(mPolicyCache.getListValue(POLICY_NAME));
+    }
+
+    @Test
+    public void testCachePolicies() {
+        cachePolicies(CollectionUtil.newHashMap(
+                Pair.create(POLICY_NAME, Pair.create(PolicyCache.Type.Integer, 1)),
+                Pair.create(POLICY_NAME_2, Pair.create(PolicyCache.Type.Boolean, true)),
+                Pair.create(POLICY_NAME_3, Pair.create(PolicyCache.Type.String, "2")),
+                Pair.create(POLICY_NAME_4, Pair.create(PolicyCache.Type.List, "[1]")),
+                Pair.create(POLICY_NAME_5, Pair.create(PolicyCache.Type.Dict, "{1:2}"))));
+
+        Assert.assertEquals(1, mSharedPreferences.getInt(POLICY_NAME, 0));
+        Assert.assertEquals(true, mSharedPreferences.getBoolean(POLICY_NAME_2, false));
+        Assert.assertEquals("2", mSharedPreferences.getString(POLICY_NAME_3, null));
+        Assert.assertEquals("[1]", mSharedPreferences.getString(POLICY_NAME_4, null));
+        Assert.assertEquals("{1:2}", mSharedPreferences.getString(POLICY_NAME_5, null));
+    }
+
+    @Test
+    public void testCacheUpdated() {
+        cachePolicies(CollectionUtil.newHashMap(
+                Pair.create(POLICY_NAME, Pair.create(PolicyCache.Type.Integer, 1))));
+        cachePolicies(CollectionUtil.newHashMap(
+                Pair.create(POLICY_NAME_2, Pair.create(PolicyCache.Type.Boolean, true))));
+
+        Assert.assertFalse(mSharedPreferences.contains(POLICY_NAME));
+        Assert.assertEquals(true, mSharedPreferences.getBoolean(POLICY_NAME_2, false));
+    }
+
+    @Test
+    public void testNotCachingUnnecessaryPolicy() {
+        when(mPolicyMap.getIntValue(eq(POLICY_NAME))).thenReturn(1);
+        when(mPolicyMap.getBooleanValue(eq(POLICY_NAME_2))).thenReturn(true);
+
+        mPolicyCache.cachePolicies(
+                mPolicyMap, Arrays.asList(Pair.create(POLICY_NAME_2, PolicyCache.Type.Boolean)));
+
+        Assert.assertFalse(mSharedPreferences.contains(POLICY_NAME));
+        Assert.assertEquals(true, mSharedPreferences.getBoolean(POLICY_NAME_2, false));
+    }
+
+    @Test
+    public void testNotCachingUnavailablePolicy() {
+        when(mPolicyMap.getBooleanValue(eq(POLICY_NAME_2))).thenReturn(true);
+
+        mPolicyCache.cachePolicies(mPolicyMap,
+                Arrays.asList(Pair.create(POLICY_NAME, PolicyCache.Type.Integer),
+                        Pair.create(POLICY_NAME_2, PolicyCache.Type.Boolean)));
+
+        Assert.assertFalse(mSharedPreferences.contains(POLICY_NAME));
+        Assert.assertEquals(true, mSharedPreferences.getBoolean(POLICY_NAME_2, false));
+    }
+
+    @Test
+    public void testWriteOnlyAfterCacheUpdate() {
+        mSharedPreferences.edit()
+                .putInt(POLICY_NAME, 1)
+                .putBoolean(POLICY_NAME_2, true)
+                .putString(POLICY_NAME_3, "a")
+                .putString(POLICY_NAME_4, "[1]")
+                .putString(POLICY_NAME_5, "{1:2}")
+                .apply();
+        Assert.assertTrue(mPolicyCache.isReadable());
+
+        cachePolicies(CollectionUtil.newHashMap(
+                Pair.create(POLICY_NAME, Pair.create(PolicyCache.Type.Integer, 1)),
+                Pair.create(POLICY_NAME_2, Pair.create(PolicyCache.Type.Boolean, true)),
+                Pair.create(POLICY_NAME_3, Pair.create(PolicyCache.Type.String, "2")),
+                Pair.create(POLICY_NAME_4, Pair.create(PolicyCache.Type.List, "[1]")),
+                Pair.create(POLICY_NAME_5, Pair.create(PolicyCache.Type.Dict, "{1:2}"))));
+
+        Assert.assertFalse(mPolicyCache.isReadable());
+        if (BuildConfig.DCHECK_IS_ON) {
+            assertAssertionError(() -> mPolicyCache.getIntValue(POLICY_NAME));
+            assertAssertionError(() -> mPolicyCache.getBooleanValue(POLICY_NAME_2));
+            assertAssertionError(() -> mPolicyCache.getStringValue(POLICY_NAME_3));
+            assertAssertionError(() -> mPolicyCache.getListValue(POLICY_NAME_4));
+            assertAssertionError(() -> mPolicyCache.getDictValue(POLICY_NAME_5));
+        }
+    }
+
+    /**
+     * @param policies A Map for policies that needs to be cached. Each policy
+     *                 name is mapped to a pair of policy type and policy value.
+     * Setting up {@link #mPolicyCache} mock and call {@link PolicyCache#cachePolicies}.
+     */
+    private void cachePolicies(Map<String, Pair<PolicyCache.Type, Object>> policies) {
+        List<Pair<String, PolicyCache.Type>> cachedPolicies = new ArrayList();
+        CollectionUtil.forEach(policies, entry -> {
+            String policyName = entry.getKey();
+            PolicyCache.Type policyType = entry.getValue().first;
+            Object policyValue = entry.getValue().second;
+            switch (policyType) {
+                case Integer:
+                    when(mPolicyMap.getIntValue(eq(policyName))).thenReturn((Integer) policyValue);
+                    break;
+                case Boolean:
+                    when(mPolicyMap.getBooleanValue(eq(policyName)))
+                            .thenReturn((Boolean) policyValue);
+                    break;
+                case String:
+                    when(mPolicyMap.getStringValue(eq(policyName)))
+                            .thenReturn((String) policyValue);
+                    break;
+                case List:
+                    when(mPolicyMap.getListValueAsString(eq(policyName)))
+                            .thenReturn((String) policyValue);
+                    break;
+                case Dict:
+                    when(mPolicyMap.getDictValueAsString(eq(policyName)))
+                            .thenReturn((String) policyValue);
+                    break;
+            }
+            cachedPolicies.add(Pair.create(policyName, policyType));
+        });
+        mPolicyCache.cachePolicies(mPolicyMap, cachedPolicies);
+    }
+
+    private void assertAssertionError(Runnable runnable) {
+        AssertionError assertionError = null;
+        try {
+            runnable.run();
+        } catch (AssertionError e) {
+            assertionError = e;
+        }
+
+        Assert.assertNotNull("AssertionError not thrown", assertionError);
     }
 }
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 68c2ad8..2a41f32 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -4442,7 +4442,9 @@
       'tags': [],
       'desc': '''Setting the policy to Enabled or leaving it unset will allow <ph name="BASIC_AUTH">Basic</ph> authentication challenges received over non-secure HTTP.
 
-      Setting the policy to Disabled forbids non-secure HTTP requests from using the <ph name="BASIC_AUTH">Basic</ph> authentication scheme; only secure HTTPS is allowed.''',
+      Setting the policy to Disabled forbids non-secure HTTP requests from using the <ph name="BASIC_AUTH">Basic</ph> authentication scheme; only secure HTTPS is allowed.
+
+      This policy setting is ignored (and <ph name="BASIC_AUTH">Basic</ph> is always forbidden) if the <ph name="AUTH_SCHEMES_POLICY_NAME">AuthSchemes</ph> policy is set and does not include <ph name="BASIC_AUTH">Basic</ph>.''',
     },
     {
       'name': 'AuthServerWhitelist',
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 3ab10d2..e60d3c5 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -2059,13 +2059,13 @@
 <translation id="377044054160169374">Application de l'intervention en cas d'expérience abusive</translation>
 <translation id="3778689139323007309">Procéder à des vérifications de la révocation des certificats de serveur qui sont validés et signés par des certificats CA installés localement</translation>
 <translation id="3780152581321609624">Inclure un port non standard dans le SPN Kerberos</translation>
-<translation id="378495749480642482">Configure si les sites auxquels l'utilisateur accède sont autorisés à créer des sessions de réalité augmentée immersive avec <ph name="WEBXR_API_NAME" />.
+<translation id="378495749480642482">Définit si les sites auxquels l'utilisateur accède sont autorisés à créer des sessions de réalité augmentée immersive avec <ph name="WEBXR_API_NAME" />.
 
-      Si cette règle n'est pas configurée ou qu'elle est activée, <ph name="WEBXR_API_NAME" /> accepte <ph name="WEBXR_AR_SESSION_ENUM_VALUE" /> lors de la création de sessions. Ceci permet aux utilisateurs d'accéder aux expériences de réalité augmentée.
+      Si cette règle n'est pas configurée ou qu'elle est activée, <ph name="WEBXR_API_NAME" /> accepte <ph name="WEBXR_AR_SESSION_ENUM_VALUE" /> lors de la création de sessions. Cela permet aux utilisateurs d'accéder aux expériences de réalité augmentée.
 
       Si cette règle est désactivée, <ph name="WEBXR_API_NAME" /> refuse les demandes de création de sessions avec le mode défini sur <ph name="WEBXR_AR_SESSION_ENUM_VALUE" />. Les sessions <ph name="WEBXR_AR_SESSION_ENUM_VALUE" /> (le cas échéant) ne prendront pas fin.
 
-      Pour en savoir plus sur les sessions <ph name="WEBXR_AR_SESSION_ENUM_VALUE" />, veuillez consulter la spécification<ph name="WEBXR_AR_MODULE_API_NAME" />.</translation>
+      Pour en savoir plus sur les sessions <ph name="WEBXR_AR_SESSION_ENUM_VALUE" />, veuillez consulter la spécification <ph name="WEBXR_AR_MODULE_API_NAME" />.</translation>
 <translation id="3788662722837364290">Paramètres de gestion de l'alimentation en cas d'inactivité de l'utilisateur</translation>
 <translation id="3790085888761753785">Si ce paramètre est activé, les utilisateurs seront autorisés à se connecter à leur compte avec Smart Lock. Ce paramètre est plus permissif que le comportement normal de Smart Lock qui permet seulement aux utilisateurs de déverrouiller leur écran.
 
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index c23c6d65..6c2ff85e 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -1407,7 +1407,7 @@
 
       Per informazioni dettagliate sui pattern URL validi, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
 <translation id="2976429807269247880">Impostazioni del comportamento per i cookie <ph name="ATTRIBUTE_SAMESITE_NAME" /> precedenti</translation>
-<translation id="2981998788751314539">Consenti di proseguire dalla pagina di avviso SSL in pagine specifiche</translation>
+<translation id="2981998788751314539">Consenti di proseguire dalla pagina di avviso SSL su pagine specifiche</translation>
 <translation id="2985927503455169394">Usa la modalità predefinita dell'esperienza di onboarding dell'assistente</translation>
 <translation id="2987155890997901449">Attiva ARC</translation>
 <translation id="2987227569419001736">Controlla l'utilizzo dell'API Web Bluetooth</translation>
@@ -4171,7 +4171,7 @@
 <translation id="686079137349561371">Microsoft Windows 7 o versioni successive</translation>
 <translation id="6877233375929006871">Se il criterio viene configurato, puoi impostare un elenco di pattern URL che specificano i siti in cui gli utenti possono fare clic nelle pagine di avviso mostrate in <ph name="PRODUCT_NAME" /> quando visitano siti che presentano errori SSL. Gli utenti non potranno fare clic nelle pagine di avviso SSL su siti non presenti in questo elenco.
 
-      Se il criterio <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> è impostato su Disattivato, questo criterio non ha effetto.
+      Se <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> è impostato su Disattivato, questo criterio non ha effetto.
 
       Se il criterio non viene configurato, <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> si applica per tutti i siti.
 
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 9b24f48..c442e24 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -1395,6 +1395,7 @@
 
       ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ URL ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns</translation>
 <translation id="2976429807269247880">การตั้งค่าลักษณะการทำงานของคุกกี้ <ph name="ATTRIBUTE_SAMESITE_NAME" /> เดิม</translation>
+<translation id="2981998788751314539">อนุญาตให้ดำเนินการจากหน้าคำเตือน SSL ในบางหน้า</translation>
 <translation id="2985927503455169394">ใช้โหมดเริ่มต้นของการเริ่มต้นใช้งาน Assistant</translation>
 <translation id="2987155890997901449">เปิดใช้ ARC</translation>
 <translation id="2987227569419001736">ควบคุมการใช้ Web Bluetooth API</translation>
@@ -4141,6 +4142,13 @@
       ระบุการแจ้งว่าไม่เหมาะสมที่ควรนำไปใช้กับ <ph name="PRODUCT_NAME" /> เมื่อเริ่มใช้งาน ระบบจะใช้การแจ้งที่ระบุนี้ในหน้าจอการเข้าสู่ระบบเท่านั้น การแจ้งว่าไม่เหมาะสมที่ตั้งผ่านนโยบายนี้จะไม่เผยแพร่ในเซสชันผู้ใช้</translation>
 <translation id="685769593149966548">บังคับใช้โหมดที่จำกัดเข้มงวดใน YouTube</translation>
 <translation id="686079137349561371">Microsoft Windows 7 ขึ้นไป</translation>
+<translation id="6877233375929006871">การตั้งค่านโยบายนี้จะทำให้คุณสร้างรายการรูปแบบ URL ได้ ซึ่งจะระบุเว็บไซต์ที่ผู้ใช้สามารถคลิกผ่านหน้าคำเตือนที่ <ph name="PRODUCT_NAME" /> แสดงขึ้นเมื่อผู้ใช้ไปยังเว็บไซต์ที่มีข้อผิดพลาด SSL ผู้ใช้จะไม่สามารถคลิกผ่านหน้าคำเตือน SSL บนเว็บไซต์ที่ไม่อยู่ในรายการนี้
+
+      หากปิดใช้ <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> นโยบายนี้จะไม่ดำเนินการใดๆ
+
+      การไม่ตั้งค่านโยบายหมายความว่า <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> จะมีผลกับทุกเว็บไซต์
+
+      ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ <ph name="URL_LABEL" /> ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns <ph name="WILDCARD_VALUE" /> ไม่ใช่ค่าที่ยอมรับสำหรับนโยบายนี้</translation>
 <translation id="68818134518270542">การตั้งค่านโยบายจะระบุแอปที่ผู้ใช้เปิดเป็นแอปจดโน้ตในหน้าจอล็อกของ <ph name="PRODUCT_OS_NAME" /> ได้
 
       หากแอปที่ต้องการอยู่ในหน้าจอล็อก องค์ประกอบ UI สำหรับการเปิดแอปจดโน้ตที่ต้องการจะปรากฏขึ้นในหน้าจอ เมื่อเปิดแล้ว แอปจะสร้างหน้าต่างทับหน้าจอล็อกและสร้างโน้ตในบริบทนี้ได้ แอปจะนำเข้าโน้ตที่สร้างไว้ไปยังเซสชันหลักของผู้ใช้ได้เมื่อเซสชันนั้นไม่ได้ล็อก แอปที่ใช้ได้ในหน้าจอล็อกต้องเป็นแอปจดโน้ตของ <ph name="PRODUCT_NAME" /> เท่านั้น
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 10112084..4113a8d 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -1326,6 +1326,7 @@
 <translation id="2886969306951284125">如果 Android 应用已开启,并且此政策设为 True,已注册的设备将会报告 Android 状态信息。
 
       如果此政策已停用或未设置,已注册的设备将不会报告 Android 状态信息</translation>
+<translation id="288923520817177650">允许创建 <ph name="WEBXR_API_NAME_SHORT" /> 的<ph name="WEBXR_AR_SESSION_ENUM_VALUE" />会话</translation>
 <translation id="2890645751406497668">自动授权这些网站通过给定的供应商 ID 和产品 ID 连接到 USB 设备。</translation>
 <translation id="2893546967669465276">将系统日志发送到管理服务器</translation>
 <translation id="2899002520262095963">Android 应用可以使用通过此政策设置的网络配置和 CA 证书,但无法访问某些配置选项。</translation>
@@ -1388,6 +1389,7 @@
 
       要详细了解有效网址格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation>
 <translation id="2976429807269247880">旧版 <ph name="ATTRIBUTE_SAMESITE_NAME" /> Cookie 行为设置</translation>
+<translation id="2981998788751314539">允许从特定网页上的 SSL 警告页面继续操作</translation>
 <translation id="2985927503455169394">使用 Google 助理新手入门体验的默认模式</translation>
 <translation id="2987155890997901449">启用 ARC</translation>
 <translation id="2987227569419001736">控制对 Web Bluetooth API 的使用</translation>
@@ -2020,6 +2022,13 @@
 <translation id="377044054160169374">针对误导性体验的强制干预政策</translation>
 <translation id="3778689139323007309">对于已成功通过验证且已由安装在本地的 CA 证书签名的服务器证书,一律执行撤消检查</translation>
 <translation id="3780152581321609624">在 Kerberos SPN 中加入非标准端口</translation>
+<translation id="378495749480642482">此政策旨在配置是否允许用户所导航到的网站使用 <ph name="WEBXR_API_NAME" /> 创建沉浸式增强现实会话。
+
+      如果此政策未设置或已启用,<ph name="WEBXR_API_NAME" /> 将会在会话创建过程中接受<ph name="WEBXR_AR_SESSION_ENUM_VALUE" />,从而允许用户进入增强现实体验。
+
+      如果此政策已停用,<ph name="WEBXR_API_NAME" /> 将会拒绝针对<ph name="WEBXR_AR_SESSION_ENUM_VALUE" />模式会话的创建请求,但已在进行的<ph name="WEBXR_AR_SESSION_ENUM_VALUE" />会话(若有)不会被终止。
+
+      如需详细了解<ph name="WEBXR_AR_SESSION_ENUM_VALUE" />会话,请查看 <ph name="WEBXR_AR_MODULE_API_NAME" />规范。</translation>
 <translation id="3788662722837364290">设备闲置时的电源管理设置</translation>
 <translation id="3790085888761753785">如果此设置处于启用状态,用户将能够使用 Smart Lock 登录他们的帐号。一般情况下 Smart Lock 只允许用户解锁屏幕,相较之下,这是限制性更低的设置。
 
@@ -4127,6 +4136,13 @@
       指定要在 <ph name="PRODUCT_NAME" /> 启动时向其应用的实验性设置。指定的实验性设置仅会应用于登录屏幕。通过此政策设定的实验性设置不会反映在用户会话中。</translation>
 <translation id="685769593149966548">强制启用 YouTube“严格”受限模式</translation>
 <translation id="686079137349561371">Microsoft Windows 7 或更高版本</translation>
+<translation id="6877233375929006871">通过设置此政策,您可以创建一个网址格式列表,从而指定在哪些含 SSL 错误的网站上用户可点击 <ph name="PRODUCT_NAME" /> 显示的警告页面以继续浏览相应网站。如果用户访问的网站不在此列表中,他们将无法点击该网站上的 SSL 警告页面继续浏览。
+
+      如果 <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> 已停用,此政策不会起到任何作用。
+
+      如果您未设置此政策,系统会将 <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> 应用于所有网站。
+
+      如需详细了解有效的<ph name="URL_LABEL" />格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。<ph name="WILDCARD_VALUE" /> 不是此政策可接受的值。</translation>
 <translation id="68818134518270542">通过设置此政策,您可以指定用户能在 <ph name="PRODUCT_OS_NAME" />锁定屏幕中将哪些应用作为笔记应用开启。
 
       如果首选的应用已添加到锁定屏幕中,屏幕上将会显示用于启动首选笔记应用的界面元素。启动后,该应用便可在锁定屏幕之上创建窗口,并在此情境中创建笔记。当主要用户会话解锁时,该应用便可将所创建的笔记导入此会话中。目前,锁定屏幕上仅支持 <ph name="PRODUCT_NAME" /> 笔记应用。
@@ -4194,6 +4210,7 @@
       如果您启用了此政策,逗号分隔列表中指定的每个来源都将在自己的进程中运行。以子网域形式指定的来源也会被隔离;例如,指定 https://example.com/ 也会导致 https://foo.example.com/ 被隔离(作为 https://example.com/ 网站的一部分)。
       如果您未配置或停用了此政策,系统将为登录屏幕使用平台默认的网站隔离设置。
       </translation>
+<translation id="6947587367703216074">禁止创建 <ph name="WEBXR_API_NAME_SHORT" /> 的<ph name="WEBXR_AR_SESSION_ENUM_VALUE" />会话</translation>
 <translation id="6949867264289339206">通过设置此政策,您可为绑定到设备的企业打印机提供配置。其格式与 <ph name="PRINTERS_POLICY_NAME" /> 字典一样,不过每台打印机都还对应一个额外的必填字段“id”或“guid”,以用于将相应打印机加入许可名单/拒绝名单。该文件不得超过 5MB,且必须采用 JSON 格式。一个包含大约 21000 台打印机的文件在编码后的大小是 5MB。相应的加密哈希值可帮助您验证下载内容的完整性。系统会下载、缓存该文件。当相应网址或哈希值发生变化时,系统会重新下载该文件。<ph name="PRODUCT_OS_NAME" />会下载该文件以获取打印机配置,并会根据 <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />、<ph name="DEVICE_PRINTERS_ALLOWLIST_POLICY_NAME" /> 和 <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" /> 向用户提供可用的打印机。
 
       此政策:
diff --git a/components/policy_strings.grdp b/components/policy_strings.grdp
index 648b37c..17ca93b1 100644
--- a/components/policy_strings.grdp
+++ b/components/policy_strings.grdp
@@ -591,7 +591,7 @@
   </message>
 
   <!-- Strings for Data Leak Prevention -->
-  <message name="IDS_POLICY_DLP_CLIPBOARD_BLOCKED_ON_PASTE" desc="A toast informing the user that paste is blocked.">
+  <message name="IDS_POLICY_DLP_CLIPBOARD_BLOCKED_ON_PASTE" desc="A notification informing the user that paste is blocked.">
     Pasting from <ph name="ORIGIN_NAME">$1<ex>corp.google.com</ex></ph> to this location is blocked by administrator policy
   </message>
   <message name="IDS_POLICY_DLP_CLIPBOARD_BLOCKED_ON_COPY_VM" desc="A toast informing the user that sharing clipboard data to VMs is blocked.">
@@ -603,7 +603,7 @@
   <message name="IDS_POLICY_DLP_CLIPBOARD_BLOCK_DISMISS_BUTTON" desc="Dismiss dialog button label for disabled paste notification.">
     Got it
   </message>
-  <message name="IDS_POLICY_DLP_CLIPBOARD_WARN_ON_PASTE" desc="A toast informing the user that paste is blocked.">
+  <message name="IDS_POLICY_DLP_CLIPBOARD_WARN_ON_PASTE" desc="A notification warning the user that paste is not recommended.">
     Pasting from <ph name="ORIGIN_NAME">$1<ex>corp.google.com</ex></ph> to this location is not recommended by administrator policy
   </message>
   <message name="IDS_POLICY_DLP_CLIPBOARD_WARN_PROCEED_BUTTON" desc="Proceed dialog button label for warning before paste.">
diff --git a/components/signin/public/identity_manager/identity_manager.cc b/components/signin/public/identity_manager/identity_manager.cc
index c31a065..5b474c29 100644
--- a/components/signin/public/identity_manager/identity_manager.cc
+++ b/components/signin/public/identity_manager/identity_manager.cc
@@ -478,8 +478,18 @@
 
 void IdentityManager::OnPrimaryAccountChanged(
     const PrimaryAccountChangeEvent& event_details) {
-  for (auto& observer : observer_list_)
+  CoreAccountId event_primary_account_id =
+      event_details.GetCurrentState().primary_account.account_id;
+  DCHECK_EQ(event_primary_account_id,
+            GetPrimaryAccountId(event_details.GetCurrentState().consent_level));
+  for (auto& observer : observer_list_) {
     observer.OnPrimaryAccountChanged(event_details);
+    // Ensure that |observer| did not change the primary account as otherwise
+    // |event_details| would not longer be correct.
+    DCHECK_EQ(
+        event_primary_account_id,
+        GetPrimaryAccountId(event_details.GetCurrentState().consent_level));
+  }
 
 #if defined(OS_ANDROID)
   if (java_identity_manager_) {
@@ -489,13 +499,6 @@
         ConvertToJavaPrimaryAccountChangeEvent(env, event_details));
   }
 #endif
-
-  if (event_details.GetEventTypeFor(ConsentLevel::kSync) ==
-      PrimaryAccountChangeEvent::Type::kCleared) {
-    for (auto& observer : observer_list_) {
-      observer.AfterSyncPrimaryAccountCleared();
-    }
-  }
 }
 
 void IdentityManager::OnRefreshTokenAvailable(const CoreAccountId& account_id) {
diff --git a/components/signin/public/identity_manager/identity_manager.h b/components/signin/public/identity_manager/identity_manager.h
index 50a9d7c3..d65c2b0 100644
--- a/components/signin/public/identity_manager/identity_manager.h
+++ b/components/signin/public/identity_manager/identity_manager.h
@@ -77,17 +77,13 @@
 
     // Called when there is a change in the primary account or in the consent
     // level for the primary account.
+    //
+    // Note: Observers are not allowed to change the primary account directly
+    // from this methood as that would lead to |event_details| not being correct
+    // for the future observers.
     virtual void OnPrimaryAccountChanged(
         const PrimaryAccountChangeEvent& event_details) {}
 
-    // TODO(crbug.com/1046746): Move to |SigninClient|.
-    // Called After notifying all the observers of |OnPrimaryAccountChanged|
-    // if the sync primary account was cleared.
-    //
-    // Note: This function is only intended to be used by the signin code.
-    // General observers should use |OnPrimaryAccountChanged|.
-    virtual void AfterSyncPrimaryAccountCleared() {}
-
     // Called when a new refresh token is associated with |account_info|.
     // NOTE: On a signin event, the ordering of this callback wrt the
     // OnPrimaryAccountSet() callback is undefined. If you as a client are
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 41a239e..233fdfe 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -178,7 +178,7 @@
 <translation id="1559572115229829303">‏&lt;p&gt;تعذر إنشاء اتصال خاص بـ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> نظرًا لأن تاريخ ووقت جهازك (<ph name="DATE_AND_TIME" />) غير صحيحين.&lt;/p&gt;
 
           &lt;p&gt;يُرجى تعديل التاريخ والوقت من القسم &lt;strong&gt;عام&lt;/strong&gt; في تطبيق &lt;strong&gt;الإعدادات&lt;/strong&gt; .&lt;/p&gt;</translation>
-<translation id="1567040042588613346">تعمل هذه السياسة على النحو المنشود، غير أنّ القيمة نفسها مُحدّدة في مكان آخر ومن ثمَّ تم إبطالها بموجب هذه السياسة.</translation>
+<translation id="1567040042588613346">تعمل هذه السياسة على النحو المنشود، غير أنّ القيمة نفسها مُحدّدة في مكان آخر ومن ثمَّ تم استبدالها بموجب هذه السياسة.</translation>
 <translation id="1569487616857761740">إدخال تاريخ انتهاء الصلاحية</translation>
 <translation id="1581080074034554886">‏رمز التحقق من البطاقة (CVC)</translation>
 <translation id="1583429793053364125">حدث خطأ ما أثناء عرض صفحة الويب هذه.</translation>
@@ -737,7 +737,7 @@
 <translation id="3807873520724684969">تم حظر المحتوى الضار.</translation>
 <translation id="3808375843007691220">تحذير: الميزات التجريبية في انتظارك!</translation>
 <translation id="3810973564298564668">إدارة محرّكات البحث</translation>
-<translation id="3816482573645936981">القيمة (التي تم إبطالها)</translation>
+<translation id="3816482573645936981">القيمة (التي تم استبدالها)</translation>
 <translation id="382518646247711829">إذا كنت تستخدم خادمًا وكيلاً...</translation>
 <translation id="3827112369919217609">صيغة مطلقة</translation>
 <translation id="3828924085048779000">غير مسموح باستخدام عبارة مرور فارغة.</translation>
@@ -932,7 +932,7 @@
 <translation id="4579056131138995126">شخصي (مغلف)</translation>
 <translation id="4582204425268416675">إزالة البطاقة</translation>
 <translation id="4587425331216688090">‏هل تريد إزالة العنوان من Chrome؟</translation>
-<translation id="459089498662672729">لصق المحتوى من <ph name="ORIGIN_NAME" /> إلى هذا المكان هو إجراء لا تنصح به سياسة المشرف.</translation>
+<translation id="459089498662672729">لصق المحتوى من <ph name="ORIGIN_NAME" /> إلى هذا المكان هو إجراء لا تسمح به سياسة المشرف.</translation>
 <translation id="4592951414987517459">يتم ترميز اتصالك بالنطاق <ph name="DOMAIN" /> باستخدام مجموعة ترميز حديثة.</translation>
 <translation id="4594403342090139922">تراجع عن الحذ&amp;ف</translation>
 <translation id="4597348597567598915">الحجم 8</translation>
@@ -1513,7 +1513,7 @@
 <translation id="6950684638814147129">‏حدث خطأ أثناء تحليل قيمة JSON: <ph name="ERROR" /></translation>
 <translation id="695140971690006676">إعادة ضبط الكل</translation>
 <translation id="6957887021205513506">يبدو أن شهادة الخادم مزيفة.</translation>
-<translation id="6963520811470373926">تُبطل القيمة الأخرى</translation>
+<translation id="6963520811470373926">يتم استبدال القيمة الأخرى</translation>
 <translation id="6964255747740675745">‏تعذّر تحليل ضبط الشبكة (JSON غير صالح).</translation>
 <translation id="6965382102122355670">حسنًا</translation>
 <translation id="6965978654500191972">جهاز</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 19a988fd..3364b7e 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -178,6 +178,7 @@
 <translation id="1559572115229829303">&lt;p&gt;<ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> এ একটি ব্যক্তিগত সংযোগ স্থাপন করা যায়নি কারণ আপনার ডিভাইসের তারিখ এবং সময় (<ph name="DATE_AND_TIME" />) সঠিক নয়৷&lt;/p&gt;
 
 &lt;p&gt;দয়া করে &lt;strong&gt;সেটিংস&lt;/strong&gt; অ্যাপ্লিকেশানের &lt;strong&gt;সাধারণ&lt;/strong&gt; বিভাগ থেকে তারিখ এবং সময় সংশোধন করুন৷&lt;/p&gt;</translation>
+<translation id="1567040042588613346">এই নীতি আশানুরূপ কাজ করছে। আসলে অন্য একটি জায়গাতে একই ধরনের মান সেট করা হয়েছে এবং সেই মানের জায়গাতে এই নীতি প্রয়োগ করা হয়।</translation>
 <translation id="1569487616857761740">মেয়াদ শেষ হওয়ার তারিখ লিখুন</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">এই ওয়েবপৃষ্ঠাটি দেখানোর সময় কোনো সমস্যা হয়েছে।</translation>
@@ -314,6 +315,7 @@
 <translation id="2114841414352855701">এড়িয়ে যাওয়া হয়েছে কারণ এটি <ph name="POLICY_NAME" />-দ্বারা ওভাররাইড করা হয়েছিল৷</translation>
 <translation id="2119505898009119320">এই সংস্থাকে ইস্যু করা হয়েছিল: <ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />]</translation>
 <translation id="2119867082804433120">নিচে ডানদিকে পাঞ্চ করুন</translation>
+<translation id="2122719317867821810">এই নীতি আশানুরূপ কাজ করছে। আসলে অন্য একটি জায়গাতে এমন মান সেট করা হয়েছে যা একে অপরের সাথে ম্যাচ করে না এবং সেই মানকে এই নীতির মাধ্যমে ওভাররাইড করে দেওয়া হয়।</translation>
 <translation id="2126374524350484896">PDF প্রোডিউসার:</translation>
 <translation id="2129079103035905234">মোশন সেন্সর</translation>
 <translation id="2130448033692577677">DnsOverHttpsMode নীতি সেট না থাকার কারণে আপনার নির্দিষ্ট করা টেমপ্লেট হয়তো ব্যবহার করা যাবে না।</translation>
@@ -582,6 +584,7 @@
 <translation id="3229041911291329567">আপনার ডিভাইস এবং ব্রাউজারের ভার্সন সম্বন্ধীয় তথ্য</translation>
 <translation id="323107829343500871"><ph name="CREDIT_CARD" />-এর CVC লিখুন</translation>
 <translation id="3234666976984236645">এই সাইটে সবসময় গুরুত্বপূর্ণ কন্টেন্ট শনাক্ত করুন</translation>
+<translation id="3266793032086590337">মান (ম্যাচ করছে না)</translation>
 <translation id="3270847123878663523">&amp;পুনর্বিন্যাসকে পূর্বাবস্থায় ফেরান</translation>
 <translation id="3274521967729236597">Pa-Kai</translation>
 <translation id="3282497668470633863">কার্ডে থাকা নাম যোগ করুন</translation>
@@ -735,6 +738,7 @@
 <translation id="3807873520724684969">ক্ষতিকর কন্টেন্ট ব্লক করা হয়েছে।</translation>
 <translation id="3808375843007691220">সতর্কতা: পরীক্ষামূলক বৈশিষ্ট্যটি চালু আছে!</translation>
 <translation id="3810973564298564668">পরিচালনা</translation>
+<translation id="3816482573645936981">মান (পুরনো মানের জায়গাতে নতুন মান প্রয়োগ করা হয়েছে)</translation>
 <translation id="382518646247711829">যদি আপনি একটি প্রক্সি সার্ভার ব্যবহার করেন...</translation>
 <translation id="3827112369919217609">অ্যাবসোলিউট</translation>
 <translation id="3828924085048779000">ফাঁকা পাসফ্রেজের অনুমতি নেই৷</translation>
@@ -929,6 +933,7 @@
 <translation id="4579056131138995126">Personal (Envelope)</translation>
 <translation id="4582204425268416675">কার্ডটি সরিয়ে দিন</translation>
 <translation id="4587425331216688090">Chrome থেকে ঠিকানা সরাবেন?</translation>
+<translation id="459089498662672729">অ্যাডমিনিস্ট্রেটর নীতির সাজেশন অনুযায়ী, <ph name="ORIGIN_NAME" /> থেকে টেক্সট এই লোকেশনে পেস্ট করা যাবে না</translation>
 <translation id="4592951414987517459">একটি আধুনিক সাইফার স্যুট ব্যবহার করে <ph name="DOMAIN" />-এ আপনার সংযোগ এনক্রিপ্ট করা হয়েছে।</translation>
 <translation id="4594403342090139922">&amp;মুছে ফেলাকে পূর্বাবস্থায় ফেরান</translation>
 <translation id="4597348597567598915">সাইজ ৮</translation>
@@ -1091,6 +1096,7 @@
 <translation id="519422657042045905">ব্যাখ্যা নেই</translation>
 <translation id="5201306358585911203">এই পৃষ্ঠার এম্বেডেড করা একটি পৃষ্ঠায় এটি দেখানো হচ্ছে</translation>
 <translation id="5205222826937269299">নাম প্রয়োজন</translation>
+<translation id="5208899478506185232"><ph name="TOP_ORIGIN" />-এর জন্য আপনার কোড হল <ph name="ONE_TIME_CODE" /> (<ph name="EMBEDDED_ORIGIN" />-এর মাধ্যমে)</translation>
 <translation id="5209518306177824490">SHA-1 আঙুলের ছাপ</translation>
 <translation id="5215116848420601511">Google Pay ব্যবহার করে এমন পেমেন্টের পদ্ধতি এবং ঠিকানা</translation>
 <translation id="5215363486134917902">Folio-Sp</translation>
@@ -1220,6 +1226,7 @@
 <translation id="5689199277474810259">JSON এ রপ্তানি করুন</translation>
 <translation id="5689516760719285838">লোকেশন</translation>
 <translation id="569000877158168851">DnsOverHttpsTemplates মান প্রাসঙ্গিক নয় এবং DnsOverHttpsMode নীতি হয় <ph name="SECURE_DNS_MODE_AUTOMATIC" /> অথবা <ph name="SECURE_DNS_MODE_SECURE" />-এ সেট না করা পর্যন্ত ব্যবহার করা যাবে না।</translation>
+<translation id="5695542892312572833">আপনার কেনাকাটা যাচাই করা ও তা সম্পূর্ণ করার জন্য Windows Hello-এর সেন্সর ব্যবহার করতে চান?</translation>
 <translation id="5701381305118179107">কেন্দ্র</translation>
 <translation id="570530837424789914">পরিচালনা করুন...</translation>
 <translation id="57094364128775171">শক্তিশালী পাসওয়ার্ড সাজেস্ট করুন…</translation>
@@ -1410,6 +1417,7 @@
 <translation id="6447842834002726250">কুকিজ</translation>
 <translation id="6451458296329894277">ফর্ম পুনঃজমা নিশ্চিত করুন</translation>
 <translation id="6457206614190510200">স্যাডল স্টিচ</translation>
+<translation id="6458606150257356946">যেভাবেই হোক এটি পেস্ট করুন</translation>
 <translation id="6465306955648956876">পাসওয়ার্ড পরিচালনা করুন...</translation>
 <translation id="6468485451923838994">হরফগুলি</translation>
 <translation id="647261751007945333">ডিভাইস নীতিগুলি</translation>
@@ -1505,6 +1513,7 @@
 <translation id="6950684638814147129">JSON মান পার্স করার সময় সমস্যা: <ph name="ERROR" /></translation>
 <translation id="695140971690006676">সব রিসেট করুন</translation>
 <translation id="6957887021205513506">সার্ভারটির সার্টিফিকেটটি একটি জাল হিসাবে উপস্থিত হয়েছে৷</translation>
+<translation id="6963520811470373926">পুরনো মানের জায়গাতে নতুন মান প্রয়োগ করা</translation>
 <translation id="6964255747740675745">নেটওয়ার্ক কনফিগারেশন পার্স করা যায়নি (ভুল JSON)।</translation>
 <translation id="6965382102122355670">ঠিক আছে</translation>
 <translation id="6965978654500191972">ডিভাইস</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 3181569..d4d413c 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -178,7 +178,7 @@
 <translation id="1559572115229829303">&lt;p&gt;Ezin da ezarri <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> domeinurako konexio pribatua, gailuaren data eta ordua (<ph name="DATE_AND_TIME" />) okerrak direlako.&lt;/p&gt;
 
           &lt;p&gt;Doitu data eta ordua &lt;strong&gt;Ezarpenak&lt;/strong&gt; aplikazioko &lt;strong&gt;Orokorra&lt;/strong&gt; atalean.&lt;/p&gt;</translation>
-<translation id="1567040042588613346">Gidalerroak espero bezala funtzionatzen du, baina beste nonbait balio bera dago ezarrita, eta gidalerro honek hura ordezten du.</translation>
+<translation id="1567040042588613346">Gidalerroak espero bezala funtzionatzen du, baina balio bera beste nonbait dago ezarrita, eta gidalerro honek hura ordezten du.</translation>
 <translation id="1569487616857761740">Adierazi iraungitze-data</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">Arazoren bat izan da web-orria bistaratzean.</translation>
@@ -310,7 +310,7 @@
 <translation id="2114841414352855701">Ez ikusi egin zaio <ph name="POLICY_NAME" /> gidalerroak gainidatzi duelako.</translation>
 <translation id="2119505898009119320">Honi jaulkia: <ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />]</translation>
 <translation id="2119867082804433120">Zulo bat behean, eskuinetara</translation>
-<translation id="2122719317867821810">Gidalerroak espero bezala funtzionatzen du, baina gatazka sortzen duen balioa beste nonbait dago ezarrita, eta gidalerro honek hura ordezten du.</translation>
+<translation id="2122719317867821810">Gidalerroak espero bezala funtzionatzen du, baina gatazka sortzen duen balio bat beste nonbait dago ezarrita, eta gidalerro honek hura ordezten du.</translation>
 <translation id="2126374524350484896">PDFaren egilea:</translation>
 <translation id="2129079103035905234">Mugimendu-sentsoreak</translation>
 <translation id="2130448033692577677">Baliteke zehaztu dituzun txantiloiak ez aplikatzea, DnsOverHttpsMode gidalerroa ez delako ezarri.</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index 85bcd064..0c0550b4 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -178,6 +178,7 @@
 <translation id="1559572115229829303">&lt;p&gt;Impossible d'établir une connexion privée à <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, car la date et l'heure de votre appareil (<ph name="DATE_AND_TIME" />) sont incorrects.&lt;/p&gt;
 
           &lt;p&gt;Veuillez régler la date et l'heure depuis la section &lt;strong&gt;Général&lt;/strong&gt; de l'application &lt;strong&gt;Paramètres&lt;/strong&gt;.&lt;/p&gt;</translation>
+<translation id="1567040042588613346">Cette politique fonctionne comme prévu, mais notez que la même valeur a été définie ailleurs et que cette politique la remplace.</translation>
 <translation id="1569487616857761740">Entrez la date d'expiration</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">Une erreur s'est produite lors de l'affichage de cette page Web.</translation>
@@ -309,6 +310,7 @@
 <translation id="2114841414352855701">Politique sans effet, car remplacée par <ph name="POLICY_NAME" />.</translation>
 <translation id="2119505898009119320">Délivré à : <ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />]</translation>
 <translation id="2119867082804433120">Perforation en bas à droite</translation>
+<translation id="2122719317867821810">Cette politique fonctionne comme prévu, mais notez qu'une valeur conflictuelle a été définie ailleurs et que cette politique la remplace.</translation>
 <translation id="2126374524350484896">Outil de conversion en PDF :</translation>
 <translation id="2129079103035905234">Capteurs de mouvements</translation>
 <translation id="2130448033692577677">Les modèles que vous avez indiqués pourraient ne pas être appliqués si la politique DnsOverHttpsMode n'est pas définie.</translation>
@@ -575,6 +577,7 @@
 <translation id="3229041911291329567">Renseignements sur la version de votre appareil et de votre navigateur</translation>
 <translation id="323107829343500871">Entrez le code de vérification de carte (CVC) pour <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">Toujours détecter le contenu important sur ce site</translation>
+<translation id="3266793032086590337">Valeur (conflit)</translation>
 <translation id="3270847123878663523">&amp;Annuler la réorganisation</translation>
 <translation id="3274521967729236597">Pa Kai</translation>
 <translation id="3282497668470633863">Ajouter le nom sur la carte</translation>
@@ -728,6 +731,7 @@
 <translation id="3807873520724684969">Contenu nuisible bloqué.</translation>
 <translation id="3808375843007691220">Avertissement : Fonctionnalités expérimentales dans cette page!</translation>
 <translation id="3810973564298564668">Gérer</translation>
+<translation id="3816482573645936981">Valeur (remplacée)</translation>
 <translation id="382518646247711829">Si vous utilisez un serveur mandataire...</translation>
 <translation id="3827112369919217609">Absolu</translation>
 <translation id="3828924085048779000">La phrase de passe est obligatoire.</translation>
@@ -917,6 +921,7 @@
 <translation id="4579056131138995126">Enveloppe personnelle</translation>
 <translation id="4582204425268416675">Supprimer la carte</translation>
 <translation id="4587425331216688090">Supprimer l'adresse de Chrome?</translation>
+<translation id="459089498662672729">Une politique définie par l'administrateur interdit de coller du contenu provenant de <ph name="ORIGIN_NAME" /> à cet endroit</translation>
 <translation id="4592951414987517459">Votre connexion au domaine <ph name="DOMAIN" /> est protégée par une suite de chiffrement récente.</translation>
 <translation id="4594403342090139922">&amp;Annuler la suppression</translation>
 <translation id="4597348597567598915">Taille 8</translation>
@@ -1079,6 +1084,7 @@
 <translation id="519422657042045905">Le mode d'annotation n'est pas accessible</translation>
 <translation id="5201306358585911203">Une page intégrée de cette page indique</translation>
 <translation id="5205222826937269299">Vous devez indiquer un nom</translation>
+<translation id="5208899478506185232"><ph name="ONE_TIME_CODE" /> est votre code pour <ph name="TOP_ORIGIN" /> (par <ph name="EMBEDDED_ORIGIN" />)</translation>
 <translation id="5209518306177824490">Empreinte SHA-1</translation>
 <translation id="5215116848420601511">Modes de paiement et adresses utilisant Google Pay</translation>
 <translation id="5215363486134917902">Folio SP</translation>
@@ -1208,6 +1214,7 @@
 <translation id="5689199277474810259">Exporter au format JSON</translation>
 <translation id="5689516760719285838">Lieu</translation>
 <translation id="569000877158168851">La valeur DnsOverHttpsTemplates n'est pas pertinente et ne sera pas utilisée, à moins que la politique DnsOverHttpsMode soit définie à <ph name="SECURE_DNS_MODE_AUTOMATIC" /> ou à <ph name="SECURE_DNS_MODE_SECURE" />.</translation>
+<translation id="5695542892312572833">Utiliser Windows Hello pour vérifier et finaliser votre achat?</translation>
 <translation id="5701381305118179107">Centrer</translation>
 <translation id="570530837424789914">Gérer...</translation>
 <translation id="57094364128775171">Suggérer un mot de passe fort…</translation>
@@ -1399,6 +1406,7 @@
 <translation id="6447842834002726250">Témoins</translation>
 <translation id="6451458296329894277">Confirmer le nouvel envoi du formulaire</translation>
 <translation id="6457206614190510200">Agrafage à cheval</translation>
+<translation id="6458606150257356946">Coller quand même</translation>
 <translation id="6465306955648956876">Gérer les mots de passe...</translation>
 <translation id="6468485451923838994">Polices</translation>
 <translation id="647261751007945333">Règles relatives aux appareils</translation>
@@ -1494,6 +1502,7 @@
 <translation id="6950684638814147129">Erreur lors de l'analyse de la valeur JSON : <ph name="ERROR" /></translation>
 <translation id="695140971690006676">Tout réinitialiser</translation>
 <translation id="6957887021205513506">Le certificat du serveur semble être contrefait.</translation>
+<translation id="6963520811470373926">Remplacement en cours…</translation>
 <translation id="6964255747740675745">Échec de l'analyse de la configuration du réseau (JSON incorrect).</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6965978654500191972">Appareil</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 55937fef..7ed87c4 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -178,7 +178,7 @@
 <translation id="1559572115229829303">&lt;p&gt;<ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> से निजी कनेक्‍शन जोड़ा नहीं जा सकता क्‍योंकि आपके डिवाइस की तारीख और समय (<ph name="DATE_AND_TIME" />) गलत है.&lt;/p&gt;
 
       &lt;p&gt;कृपया तारीख और समय को &lt;strong&gt;सेटिंग&lt;/strong&gt; ऐप्लिकेशन के &lt;strong&gt;सामान्‍य&lt;/strong&gt; सेक्शन से एडजस्‍ट करें.&lt;/p&gt;</translation>
-<translation id="1567040042588613346">यह नीति उम्मीद के मुताबिक काम कर रही है. हालांकि, किसी दूसरी जगह ऐसा ही मान सेट किया गया है और इस नीति के तहत उसे इसकी जगह लागू कर दिया गया है.</translation>
+<translation id="1567040042588613346">यह नीति उम्मीद के मुताबिक काम कर रही है. हालांकि, किसी दूसरी जगह ऐसा ही मान सेट किया गया है और उसकी जगह इस नीति को लागू कर दिया गया है.</translation>
 <translation id="1569487616857761740">खत्म होने की तारीख डालें</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">इस वेबपेज को दिखाने के दौरान कुछ गड़बड़ी हुई है.</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index f0f301ef..028a194 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -1509,7 +1509,7 @@
 <translation id="6950684638814147129">Errore durante l'analisi del valore JSON: <ph name="ERROR" /></translation>
 <translation id="695140971690006676">Reimposta tutto</translation>
 <translation id="6957887021205513506">Il certificato del server risulta essere un falso.</translation>
-<translation id="6963520811470373926">Sostituzione</translation>
+<translation id="6963520811470373926">In sostituzione</translation>
 <translation id="6964255747740675745">Analisi della configurazione di rete non riuscita (JSON non valido).</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="6965978654500191972">Dispositivo</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index badede22..b910371 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -242,7 +242,7 @@
     כדי להגדיר מאפייני אבטחה ומאפיינים אחרים עבור אתר מסוים.</translation>
 <translation id="1778646502362731194">JIS B0</translation>
 <translation id="1783075131180517613">יש לעדכן את ביטוי הסיסמה של הסנכרון.</translation>
-<translation id="1787142507584202372">כאן מופיעות הכרטיסיות שאתה פותח</translation>
+<translation id="1787142507584202372">כאן מופיעות הכרטיסיות שפתחת</translation>
 <translation id="1791429645902722292">Google Smart Lock</translation>
 <translation id="1798447301915465742">‏<ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ניתן לבצע כמה פעולות, יש להקיש על Tab כדי לעבור ביניהן</translation>
 <translation id="1800473098294731951">B9</translation>
@@ -557,7 +557,7 @@
 <translation id="3154506275960390542">דף זה כולל טופס שעשוי להישלח באופן לא מאובטח. הנתונים ששולחים יהיו גלויים במהלך ההעברה, וקיימת סכנה שמישהו ישנה את הפרטים שהשרת יקבל.</translation>
 <translation id="315504272643575312">החשבון שלך מנוהל על-ידי <ph name="MANAGER" />.</translation>
 <translation id="3157931365184549694">שחזור</translation>
-<translation id="3162559335345991374">‏ייתכן שתידרש להיכנס לדף ההתחברות של רשת ה-Wi-Fi שבה אתה משתמש.</translation>
+<translation id="3162559335345991374">‏ייתכן שרשת ה-Wi-Fi דורשת כניסה לדף ההתחברות שלה.</translation>
 <translation id="3167968892399408617">‏דפים שהצגת בכרטיסיות מצב אנונימי לא יישמרו בהיסטוריית הדפדפן, באחסון קובצי ה-Cookie או בהיסטוריית החיפושים לאחר שכל כרטיסיות המצב האנונימי ייסגרו. קבצים שהורדת או סימניות שיצרת יישמרו.</translation>
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3174168572213147020">אי</translation>
@@ -1757,7 +1757,7 @@
 <translation id="7813600968533626083">‏האם להסיר מ-Chrome הצעות בשביל טפסים?</translation>
 <translation id="781440967107097262">לשתף את הלוח?</translation>
 <translation id="7815407501681723534">נמצאו <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> בנושא '<ph name="SEARCH_STRING" />'</translation>
-<translation id="782886543891417279">‏ייתכן שתידרש להיכנס לדף ההתחברות של רשת ה-Wi-Fi שבה אתה משתמש (<ph name="WIFI_NAME" />).</translation>
+<translation id="782886543891417279">‏ייתכן שרשת ה-Wi-Fi דורשת כניסה לדף ההתחברות שלה. (<ph name="WIFI_NAME" />).</translation>
 <translation id="7836231406687464395">Postfix (Envelope)‎</translation>
 <translation id="7844689747373518809">{COUNT,plural, =0{ללא}=1{אפליקציה אחת (<ph name="EXAMPLE_APP_1" />)}=2{2 אפליקציות (<ph name="EXAMPLE_APP_1" />, <ph name="EXAMPLE_APP_2" />)}many{# אפליקציות (<ph name="EXAMPLE_APP_1" />, <ph name="EXAMPLE_APP_2" /> <ph name="AND_MORE" />)}other{# אפליקציות (<ph name="EXAMPLE_APP_1" />, <ph name="EXAMPLE_APP_2" /> <ph name="AND_MORE" />)}}</translation>
 <translation id="785549533363645510">עם זאת, עדיין אפשר לראות אותך. המעבר למצב גלישה בסתר לא מסתיר את הגלישה שלך מהמעסיק, מספק האינטרנט או מהאתרים שאליהם נכנסת.</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index 2bf4c47e..e1693e79 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -316,7 +316,7 @@
 <translation id="2114841414352855701">មិនបានអើពើ ពីព្រោះវាត្រូវបានបដិសេធដោយ <ph name="POLICY_NAME" />។</translation>
 <translation id="2119505898009119320">បោះផ្សាយជូន៖ <ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />]</translation>
 <translation id="2119867082804433120">ចោះ​ខាងក្រោម​ផ្នែកខាងស្ដាំ</translation>
-<translation id="2122719317867821810">គោលការណ៍នេះ​កំពុងដំណើរការ​ដូចការរំពឹងទុក ប៉ុន្តែ​តម្លៃខុសគ្នា​ត្រូវបានកំណត់​នៅកន្លែងផ្សេង និងត្រូវបាន​លុបពីលើ​ដោយគោលការណ៍នេះ។</translation>
+<translation id="2122719317867821810">គោលការណ៍នេះ​កំពុងដំណើរការ​ដូចការរំពឹងទុក ប៉ុន្តែ​តម្លៃជាន់គ្នា​ត្រូវបានកំណត់​នៅកន្លែងផ្សេង និងត្រូវបាន​លុបពីលើ​ដោយគោលការណ៍នេះ។</translation>
 <translation id="2126374524350484896">កម្មវិធីបំប្លែងជា PDF៖</translation>
 <translation id="2129079103035905234">ឧបករណ៍​ចាប់ចលនា</translation>
 <translation id="2130448033692577677">ទម្រង់គំរូ​ដែលអ្នក​បានបញ្ជាក់​ប្រហែលជា​មិន​អាច​ប្រើ​បានទេ ដោយសារ​មិនបាន​កំណត់​គោលការណ៍ DnsOverHttpsMode។</translation>
@@ -586,7 +586,7 @@
 <translation id="3229041911291329567">ព័ត៌មានកំណែ​អំពីឧបករណ៍ និងកម្មវិធីរុករក​តាមអ៊ីនធឺណិតរបស់អ្នក</translation>
 <translation id="323107829343500871">បញ្ចូល CVC សម្រាប់ <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">តែងតែចាប់យកមាតិកាសំខាន់ជានិច្ចនៅលើគេហទំព័រនេះ</translation>
-<translation id="3266793032086590337">តម្លៃ (ខុសគ្នា)</translation>
+<translation id="3266793032086590337">តម្លៃ (ជាន់គ្នា)</translation>
 <translation id="3270847123878663523">បកក្រោយការតម្រៀបឡើងវិញ</translation>
 <translation id="3274521967729236597">Pa-Kai</translation>
 <translation id="3282497668470633863">បញ្ចូលឈ្មោះលើកាត</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index d6c96b2..ecbb903e 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -177,6 +177,7 @@
 <translation id="1559572115229829303">&lt;p&gt;आपल्या डिव्हाइसची तारीख आणि वेळ (<ph name="DATE_AND_TIME" />) चुकीची असल्यामुळे <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> सह खाजगी कनेक्शन इंस्टॉल केले जाऊ शकत नाही.&lt;/p&gt;
 
       &lt;p&gt;कृपया &lt;strong&gt;सेटिंग्ज&lt;/strong&gt; ॲपच्या &lt;strong&gt;सर्वसाधारण&lt;/strong&gt; विभागातील तारीख आणि वेळ समायोजित करा.&lt;/p&gt;</translation>
+<translation id="1567040042588613346">हे धोरण अपेक्षेनुसार काम करत आहे पण, कुठेतरी समान मूल्य सेट केले आहे आणि हे धोरण ते मूल्य अधिग्रहित करत आहे.</translation>
 <translation id="1569487616857761740">एक्स्पायरीची तारीख एंटर करा</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">हे वेबपेज प्रदर्शित करताना काहीतरी चूक झाली.</translation>
@@ -312,6 +313,7 @@
 <translation id="2114841414352855701">दुर्लक्ष केले कारण ते <ph name="POLICY_NAME" /> कडून अधिलिखित झाले होते.</translation>
 <translation id="2119505898009119320"><ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />] यांना जारी केलेले</translation>
 <translation id="2119867082804433120">पंच बॉटम राइट</translation>
+<translation id="2122719317867821810">हे धोरण अपेक्षेनुसार काम करत आहे पण, कुठेतरी एक परस्परविरोधी मूल्य सेट केले आहे आणि हे धोरण ते मूल्य ओव्हरराइड करत आहे.</translation>
 <translation id="2126374524350484896">पीडीएफ निर्माता:</translation>
 <translation id="2129079103035905234">मोशन सेन्सर</translation>
 <translation id="2130448033692577677">DnsOverHttpsMode धोरण सेट केले नसल्यामुळे तुम्ही नमूद केलेली टेम्पलेट कदाचित लागू केली जाऊ शकत नाहीत.</translation>
@@ -579,6 +581,7 @@
 <translation id="3229041911291329567">तुमच्या डिव्हाइस आणि ब्राउझरविषयी आवृत्ती माहिती</translation>
 <translation id="323107829343500871"><ph name="CREDIT_CARD" /> साठी CVC प्रविष्‍ट करा</translation>
 <translation id="3234666976984236645">नेहमी या साइटवर महत्त्वाचा आशय शोधा</translation>
+<translation id="3266793032086590337">मूल्य (परस्परविरोधी)</translation>
 <translation id="3270847123878663523">&amp;पुनर्क्रमित करा पूर्ववत करा</translation>
 <translation id="3274521967729236597">Pa-Kai</translation>
 <translation id="3282497668470633863">कार्डवर नाव जोडा</translation>
@@ -731,6 +734,7 @@
 <translation id="3807873520724684969">हानिकारक आशय ब्लॉक केला गेला.</translation>
 <translation id="3808375843007691220">चेतावणी: पुढे प्रायोगिक वैशिष्ट्ये आहेत!</translation>
 <translation id="3810973564298564668">व्यवस्थापित करा</translation>
+<translation id="3816482573645936981">मूल्य (अधिग्रहित केलेले)</translation>
 <translation id="382518646247711829">तुम्ही प्रॉक्सी सर्व्हर वापरत असल्यास...</translation>
 <translation id="3827112369919217609">अ‍ॅब्सोल्यूट</translation>
 <translation id="3828924085048779000">रिक्त सांकेतिक पासफ्रेझाची परवानगी नाही.</translation>
@@ -925,6 +929,7 @@
 <translation id="4579056131138995126">Personal (Envelope)</translation>
 <translation id="4582204425268416675">कार्ड काढून टाका</translation>
 <translation id="4587425331216688090">Chrome मधून पत्ता काढून टाकायचा?</translation>
+<translation id="459089498662672729">अ‍ॅडमिनिस्ट्रेटर धोरणाने <ph name="ORIGIN_NAME" /> वरून या स्थानावर पेस्ट करण्याची शिफारस केलेली नाही</translation>
 <translation id="4592951414987517459">तुमचे <ph name="DOMAIN" /> वरील कनेक्शन आधुनिक सायफर सूट वापरून एंक्रिप्ट केलेले आहे.</translation>
 <translation id="4594403342090139922">&amp;हटवा पूर्ववत करा</translation>
 <translation id="4597348597567598915">आकार ८</translation>
@@ -1087,6 +1092,7 @@
 <translation id="519422657042045905">भाष्य उपलब्ध नाही</translation>
 <translation id="5201306358585911203">या पेजवरील एंबेड केलेल्‍या पेजचे म्हणणे हे आहे की</translation>
 <translation id="5205222826937269299">नाव आवश्यक आहे</translation>
+<translation id="5208899478506185232"><ph name="TOP_ORIGIN" /> साठी <ph name="ONE_TIME_CODE" /> हा तुमचा कोड आहे (<ph name="EMBEDDED_ORIGIN" /> द्वारे)</translation>
 <translation id="5209518306177824490">SHA-1 बोटाचा ठसा</translation>
 <translation id="5215116848420601511">Google Pay वापरून पेमेंट पद्धती आणि पत्ते</translation>
 <translation id="5215363486134917902">Folio-Sp</translation>
@@ -1216,6 +1222,7 @@
 <translation id="5689199277474810259">JSON वर एक्सपोर्ट करा</translation>
 <translation id="5689516760719285838">स्थान</translation>
 <translation id="569000877158168851">DnsOverHttpsMode धोरण <ph name="SECURE_DNS_MODE_AUTOMATIC" /> किंवा <ph name="SECURE_DNS_MODE_SECURE" /> वर सेट करेपर्यंत DnsOverHttpsTemplates मूल्य योग्य नाही आणि ते वापरले जाणार नाही.</translation>
+<translation id="5695542892312572833">तुमच्या खरेदीची पडताळणी करण्यासाठी आणि ती पूर्ण करण्यासाठी Windows Hello वापरायचे आहे का?</translation>
 <translation id="5701381305118179107">मध्यभागी</translation>
 <translation id="570530837424789914">व्यवस्थापित करा...</translation>
 <translation id="57094364128775171">क्लिष्ट पासवर्ड सुचवा…</translation>
@@ -1406,6 +1413,7 @@
 <translation id="6447842834002726250">कुकीज</translation>
 <translation id="6451458296329894277">फॉर्म रीसबमिशनची पुष्टी करा</translation>
 <translation id="6457206614190510200">साडल स्टिच</translation>
+<translation id="6458606150257356946">तरीही पेस्ट करा</translation>
 <translation id="6465306955648956876">पासवर्ड व्यवस्थापित करा...</translation>
 <translation id="6468485451923838994">फॉंट</translation>
 <translation id="647261751007945333">डिव्हाइस धोरणे</translation>
@@ -1501,6 +1509,7 @@
 <translation id="6950684638814147129">JSON मूल्य पार्स करताना एरर आली: <ph name="ERROR" /></translation>
 <translation id="695140971690006676">सर्व रीसेट करा</translation>
 <translation id="6957887021205513506">सर्व्हरचे सर्टिफिकेट बनावट असल्याचे दिसून येते.</translation>
+<translation id="6963520811470373926">अधिग्रहित करत आहे</translation>
 <translation id="6964255747740675745">नेटवर्क कॉंफिगरेशन पार्स करता आले नाही (चुकीची JSON).</translation>
 <translation id="6965382102122355670">ठीक आहे</translation>
 <translation id="6965978654500191972">डिव्हाइस</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index b1f4c60e..770012e8 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -917,7 +917,7 @@
 <translation id="4579056131138995126">Personal (obálka)</translation>
 <translation id="4582204425268416675">Odstrániť kartu</translation>
 <translation id="4587425331216688090">Chcete adresu odstrániť z prehliadača Chrome?</translation>
-<translation id="459089498662672729">Pravidlá správcu neodporúčajú prilepenie z umiestnenia <ph name="ORIGIN_NAME" /> do tohto miesta</translation>
+<translation id="459089498662672729">Pravidlá správcu neodporúčajú prilepenie z umiestnenia <ph name="ORIGIN_NAME" /> na toto miesto</translation>
 <translation id="4592951414987517459">Vaše pripojenie k doméne <ph name="DOMAIN" /> je šifrované pomocou modernej šifrovacej súpravy.</translation>
 <translation id="4594403342090139922">&amp;Vrátiť späť odstránenie</translation>
 <translation id="4597348597567598915">Veľkosť 8</translation>
@@ -1080,7 +1080,7 @@
 <translation id="519422657042045905">Anotácia nie je k dispozícii</translation>
 <translation id="5201306358585911203">Vložená stránka na tejto stránke hovorí</translation>
 <translation id="5205222826937269299">Meno je povinný údaj</translation>
-<translation id="5208899478506185232"><ph name="ONE_TIME_CODE" /> toto je váš kód pre položku <ph name="TOP_ORIGIN" /> (prostredníctvom <ph name="EMBEDDED_ORIGIN" />)</translation>
+<translation id="5208899478506185232"><ph name="ONE_TIME_CODE" /> je váš kód pre položku <ph name="TOP_ORIGIN" /> (prostredníctvom <ph name="EMBEDDED_ORIGIN" />)</translation>
 <translation id="5209518306177824490">Odtlačok SHA-1</translation>
 <translation id="5215116848420601511">Spôsoby platby a adresy pomocou Google Pay</translation>
 <translation id="5215363486134917902">Folio-Sp</translation>
@@ -1516,7 +1516,7 @@
 <translation id="7004583254764674281">Potvrdzujte karty rýchlejšie pomocou služby Windows Hello</translation>
 <translation id="7006930604109697472">Aj tak odoslať</translation>
 <translation id="7012363358306927923">China UnionPay</translation>
-<translation id="7014741021609395734">Úroveň priblíženia alebo oddialenia</translation>
+<translation id="7014741021609395734">Úroveň lupy</translation>
 <translation id="7016992613359344582">Tieto poplatky môžu byť jednorazové alebo opakované a nemusia byť predvídateľné.</translation>
 <translation id="7029809446516969842">Heslá</translation>
 <translation id="7031646650991750659">Ktoré aplikácie Google Play máte nainštalované.</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 8557783..19e1d77c 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -314,7 +314,7 @@
 <translation id="2114841414352855701"><ph name="POLICY_NAME" /> ஆல் கொள்கை மேலெழுதப்பட்டுள்ளதால் புறக்கணிக்கப்பட்டது.</translation>
 <translation id="2119505898009119320">வழங்கப்பட்ட நிறுவனம்: <ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />]</translation>
 <translation id="2119867082804433120">பஞ்ச் பாட்டம் ரைட்</translation>
-<translation id="2122719317867821810">இந்தக் கொள்கை எதிர்பார்த்த வகையில் வேலை செய்கிறது. ஆனால் முரண்படும் மதிப்பு ஒன்று வேறு எங்கோ அமைக்கப்பட்டுள்ளதோடு இந்தக் கொள்கையின் மூலம் மீறிச் செயல்படுகிறது.</translation>
+<translation id="2122719317867821810">இந்தக் கொள்கை எதிர்பார்த்த வகையில் வேலை செய்கிறது. ஆனால் முரண்படும் மதிப்பு ஒன்று வேறு எங்கோ அமைக்கப்பட்டுள்ளதோடு இந்தக் கொள்கை அந்த மதிப்பை மீறிச் செயல்படுகிறது.</translation>
 <translation id="2126374524350484896">PDF தயாரிப்பாளர்:</translation>
 <translation id="2129079103035905234">மோஷன் சென்சார்கள்</translation>
 <translation id="2130448033692577677">DnsOverHttpsMode கொள்கை அமைக்கப்படாததால் நீங்கள் குறிப்பிட்ட டெம்ப்ளேட்கள் பொருந்தாமல் போகக்கூடும்.</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 8a46a84..5ebd1b3a 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -178,6 +178,7 @@
 <translation id="1559572115229829303">&lt;p&gt;ไม่สามารถสร้างการเชื่อมต่อส่วนตัวไปที่ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> เนื่องจากวันที่และเวลา (<ph name="DATE_AND_TIME" />) ในอุปกรณ์ไม่ถูกต้อง&lt;/p&gt;
 
       &lt;p&gt;โปรดปรับวันที่และเวลาจากหัวข้อ&lt;strong&gt;ทั่วไป&lt;/strong&gt;ในแอป&lt;strong&gt;การตั้งค่า&lt;/strong&gt;&lt;/p&gt;</translation>
+<translation id="1567040042588613346">นโยบายนี้ทำงานตามที่ควรจะเป็นแต่มีการตั้งค่าเดียวกันไว้ที่อื่นและถูกแทนที่โดยนโยบายนี้</translation>
 <translation id="1569487616857761740">ป้อนวันที่หมดอายุ</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">มีสิ่งผิดปกติเกิดขึ้นในขณะที่แสดงหน้าเว็บนี้</translation>
@@ -309,6 +310,7 @@
 <translation id="2114841414352855701">ไม่สนใจเพราะถูกแทนที่โดย <ph name="POLICY_NAME" /></translation>
 <translation id="2119505898009119320">ออกให้แก่: <ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />]</translation>
 <translation id="2119867082804433120">เจาะรูด้านขวาล่าง</translation>
+<translation id="2122719317867821810">นโยบายนี้ทำงานตามที่ควรจะเป็นแต่มีการตั้งค่าที่ขัดแย้งกันไว้ที่อื่นและถูกลบล้างโดยนโยบายนี้</translation>
 <translation id="2126374524350484896">โปรแกรมสร้าง PDF:</translation>
 <translation id="2129079103035905234">เซ็นเซอร์ตรวจจับความเคลื่อนไหว</translation>
 <translation id="2130448033692577677">เทมเพลตที่คุณระบุอาจใช้ไม่ได้เนื่องจากไม่มีการตั้งค่านโยบาย DnsOverHttpsMode ไว้</translation>
@@ -575,6 +577,7 @@
 <translation id="3229041911291329567">ข้อมูลเวอร์ชันเกี่ยวกับอุปกรณ์และเบราว์เซอร์</translation>
 <translation id="323107829343500871">ป้อน CVC สำหรับ <ph name="CREDIT_CARD" /></translation>
 <translation id="3234666976984236645">ตรวจหาเนื้อหาที่สำคัญบนไซต์นี้เสมอ</translation>
+<translation id="3266793032086590337">ค่า (มีความขัดแย้ง)</translation>
 <translation id="3270847123878663523">&amp;เลิกทำการจัดลำดับใหม่</translation>
 <translation id="3274521967729236597">Pa-Kai</translation>
 <translation id="3282497668470633863">เพิ่มชื่อบนบัตร</translation>
@@ -727,6 +730,7 @@
 <translation id="3807873520724684969">บล็อกเนื้อหาอันตรายแล้ว</translation>
 <translation id="3808375843007691220">คำเตือน: จากนี้ไปจะเป็นฟีเจอร์ทดลอง!</translation>
 <translation id="3810973564298564668">จัดการ</translation>
+<translation id="3816482573645936981">ค่า (ถูกแทนที่)</translation>
 <translation id="382518646247711829">หากคุณใช้พร็อกซีเซิร์ฟเวอร์...</translation>
 <translation id="3827112369919217609">Absolute</translation>
 <translation id="3828924085048779000">ข้อความรหัสผ่านต้องไม่เว้นว่างไว้</translation>
@@ -916,6 +920,7 @@
 <translation id="4579056131138995126">Personal (ซองจดหมาย)</translation>
 <translation id="4582204425268416675">นำบัตรออก</translation>
 <translation id="4587425331216688090">นำที่อยู่ออกจาก Chrome ไหม</translation>
+<translation id="459089498662672729">นโยบายของผู้ดูแลระบบไม่แนะนำการวางจาก <ph name="ORIGIN_NAME" /> ลงในตำแหน่งนี้</translation>
 <translation id="4592951414987517459">มีการเข้ารหัสการเชื่อมต่อของคุณกับ <ph name="DOMAIN" /> ด้วยชุดการเข้ารหัสที่ทันสมัย</translation>
 <translation id="4594403342090139922">&amp;เลิกทำการนำออก</translation>
 <translation id="4597348597567598915">ขนาด 8</translation>
@@ -1078,6 +1083,7 @@
 <translation id="519422657042045905">โหมดคำอธิบายประกอบไม่พร้อมใช้งาน</translation>
 <translation id="5201306358585911203">หน้าที่ฝังไว้ในหน้าเว็บนี้บอกว่า</translation>
 <translation id="5205222826937269299">ต้องระบุชื่อ</translation>
+<translation id="5208899478506185232"><ph name="ONE_TIME_CODE" /> คือรหัสสำหรับ <ph name="TOP_ORIGIN" /> (ผ่าน <ph name="EMBEDDED_ORIGIN" />)</translation>
 <translation id="5209518306177824490">ลายนิ้วมือ SHA-1</translation>
 <translation id="5215116848420601511">วิธีการชำระเงินและที่อยู่จาก Google Pay</translation>
 <translation id="5215363486134917902">Folio-Sp</translation>
@@ -1207,6 +1213,7 @@
 <translation id="5689199277474810259">ส่งออกไปยัง JSON</translation>
 <translation id="5689516760719285838">ตำแหน่ง</translation>
 <translation id="569000877158168851">ค่า DnsOverHttpsTemplates ไม่เกี่ยวข้องและจะไม่มีการนำไปใช้ นอกเสียจากจะมีการตั้งค่านโยบาย DnsOverHttpsMode เป็น <ph name="SECURE_DNS_MODE_AUTOMATIC" /> หรือ <ph name="SECURE_DNS_MODE_SECURE" /></translation>
+<translation id="5695542892312572833">ใช้ Windows Hello เพื่อยืนยันและทำการซื้อให้เสร็จใช่ไหม</translation>
 <translation id="5701381305118179107">กึ่งกลาง</translation>
 <translation id="570530837424789914">จัดการ...</translation>
 <translation id="57094364128775171">แนะนำรหัสผ่านที่รัดกุม…</translation>
@@ -1398,6 +1405,7 @@
 <translation id="6447842834002726250">คุกกี้</translation>
 <translation id="6451458296329894277">ยืนยันการส่งแบบฟอร์มอีกครั้ง</translation>
 <translation id="6457206614190510200">เย็บด้วยลวดเย็บกระดาษที่สัน</translation>
+<translation id="6458606150257356946">วางเลย</translation>
 <translation id="6465306955648956876">จัดการรหัสผ่าน...</translation>
 <translation id="6468485451923838994">แบบอักษร</translation>
 <translation id="647261751007945333">นโยบายอุปกรณ์</translation>
@@ -1493,6 +1501,7 @@
 <translation id="6950684638814147129">เกิดข้อผิดพลาดขณะแยกวิเคราะห์ค่า JSON: <ph name="ERROR" /></translation>
 <translation id="695140971690006676">รีเซ็ตทั้งหมด</translation>
 <translation id="6957887021205513506">ใบรับรองของเซิร์ฟเวอร์น่าจะเป็นของปลอม</translation>
+<translation id="6963520811470373926">กำลังแทนที่</translation>
 <translation id="6964255747740675745">แยกวิเคราะห์การกำหนดค่าเครือข่ายไม่ได้ (JSON ไม่ถูกต้อง)</translation>
 <translation id="6965382102122355670">ตกลง</translation>
 <translation id="6965978654500191972">อุปกรณ์</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 71f269d9..bed5f98 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -178,6 +178,7 @@
 <translation id="1559572115229829303">&lt;p&gt;您设备的日期和时间(<ph name="DATE_AND_TIME" />)不正确,因此无法与 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 建立私密连接。&lt;/p&gt;
 
       &lt;p&gt;请在&lt;strong&gt;设置&lt;/strong&gt;应用的&lt;strong&gt;通用&lt;/strong&gt;部分调整日期和时间。&lt;/p&gt;</translation>
+<translation id="1567040042588613346">此政策正在正常运作,但与别处设置的值相同且已覆盖该值。</translation>
 <translation id="1569487616857761740">输入失效日期</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">显示此网页时出了点问题。</translation>
@@ -309,6 +310,7 @@
 <translation id="2114841414352855701">由于已被 <ph name="POLICY_NAME" /> 替换,该政策已忽略。</translation>
 <translation id="2119505898009119320">颁发对象:<ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />]</translation>
 <translation id="2119867082804433120">打孔(右下角)</translation>
+<translation id="2122719317867821810">此政策正在正常运作,但与别处设置的值冲突且已覆盖该值。</translation>
 <translation id="2126374524350484896">PDF 制作工具:</translation>
 <translation id="2129079103035905234">移动传感器</translation>
 <translation id="2130448033692577677">您指定的模板未必会被应用,因为 DnsOverHttpsMode 政策未设置。</translation>
@@ -573,6 +575,7 @@
 <translation id="3229041911291329567">与您的设备和浏览器相关的版本信息</translation>
 <translation id="323107829343500871">输入“<ph name="CREDIT_CARD" />”的银行卡验证码 (CVC)</translation>
 <translation id="3234666976984236645">始终检测此网站上的重要内容</translation>
+<translation id="3266793032086590337">值(冲突)</translation>
 <translation id="3270847123878663523">撤消顺序调整(&amp;U)</translation>
 <translation id="3274521967729236597">Pa-Kai</translation>
 <translation id="3282497668470633863">添加持卡人姓名</translation>
@@ -724,6 +727,7 @@
 <translation id="3807873520724684969">有害内容已被拦截。</translation>
 <translation id="3808375843007691220">警告:您所要使用的是实验性功能!</translation>
 <translation id="3810973564298564668">管理</translation>
+<translation id="3816482573645936981">值(已被取代)</translation>
 <translation id="382518646247711829">如果您使用代理服务器…</translation>
 <translation id="3827112369919217609">绝对</translation>
 <translation id="3828924085048779000">密码输入字段不能留空。</translation>
@@ -764,7 +768,7 @@
 <translation id="4014128326099193693">{COUNT,plural, =1{包含 {COUNT} 页内容的 PDF 文档}other{包含 {COUNT} 页内容的 PDF 文档}}</translation>
 <translation id="4023431997072828269">由于系统正在使用不安全的连接提交此表单,他人将能看到您的信息。</translation>
 <translation id="4030383055268325496">撤消添加(&amp;U)</translation>
-<translation id="4056223980640387499">棕色调</translation>
+<translation id="4056223980640387499">棕褐色调</translation>
 <translation id="4058922952496707368">“<ph name="SUBKEY" />”键:<ph name="ERROR" /></translation>
 <translation id="4067263367174615723">C1 (Envelope)</translation>
 <translation id="4067947977115446013">添加有效地址</translation>
@@ -913,6 +917,7 @@
 <translation id="4579056131138995126">Personal (Envelope)</translation>
 <translation id="4582204425268416675">移除卡</translation>
 <translation id="4587425331216688090">从 Chrome 中移除地址?</translation>
+<translation id="459089498662672729">管理员政策不建议将 <ph name="ORIGIN_NAME" /> 上的内容粘贴到此位置</translation>
 <translation id="4592951414987517459">您与 <ph name="DOMAIN" /> 之间的连接采用新型加密套件进行了加密。</translation>
 <translation id="4594403342090139922">撤消删除(&amp;U)</translation>
 <translation id="4597348597567598915">大小:8</translation>
@@ -1075,6 +1080,7 @@
 <translation id="519422657042045905">注释不可用</translation>
 <translation id="5201306358585911203">此网页上的嵌入式页面显示</translation>
 <translation id="5205222826937269299">需要提供名称</translation>
+<translation id="5208899478506185232">您的 <ph name="TOP_ORIGIN" /> 验证码是 <ph name="ONE_TIME_CODE" />(通过 <ph name="EMBEDDED_ORIGIN" /> 发送)</translation>
 <translation id="5209518306177824490">SHA-1 指纹</translation>
 <translation id="5215116848420601511">Google Pay 中存储的付款方式和地址信息</translation>
 <translation id="5215363486134917902">Folio-Sp</translation>
@@ -1204,6 +1210,7 @@
 <translation id="5689199277474810259">导出为 JSON 格式</translation>
 <translation id="5689516760719285838">位置信息</translation>
 <translation id="569000877158168851">DnsOverHttpsTemplates 值不相关,因此不会被使用,除非 DnsOverHttpsMode 政策设为“<ph name="SECURE_DNS_MODE_AUTOMATIC" />”或“<ph name="SECURE_DNS_MODE_SECURE" />”。</translation>
+<translation id="5695542892312572833">使用 Windows Hello 验证并完成您的购买交易?</translation>
 <translation id="5701381305118179107">居中</translation>
 <translation id="570530837424789914">管理…</translation>
 <translation id="57094364128775171">建议安全系数高的密码…</translation>
@@ -1394,6 +1401,7 @@
 <translation id="6447842834002726250">Cookie</translation>
 <translation id="6451458296329894277">确认重新提交表单</translation>
 <translation id="6457206614190510200">鞍式装订</translation>
+<translation id="6458606150257356946">仍然粘贴</translation>
 <translation id="6465306955648956876">管理密码…</translation>
 <translation id="6468485451923838994">字体</translation>
 <translation id="647261751007945333">设备政策</translation>
@@ -1489,6 +1497,7 @@
 <translation id="6950684638814147129">解析 JSON 值时出错:<ph name="ERROR" /></translation>
 <translation id="695140971690006676">全部重置</translation>
 <translation id="6957887021205513506">该服务器的证书似乎是伪造的。</translation>
+<translation id="6963520811470373926">正在取代</translation>
 <translation id="6964255747740675745">未能解析网络配置(JSON 无效)。</translation>
 <translation id="6965382102122355670">确定</translation>
 <translation id="6965978654500191972">设备</translation>
diff --git a/components/test/data/autofill/heuristics/input/177_reichelt.html b/components/test/data/autofill/heuristics/input/177_reichelt.html
new file mode 100644
index 0000000..a6f0b738
--- /dev/null
+++ b/components/test/data/autofill/heuristics/input/177_reichelt.html
@@ -0,0 +1,28 @@
+<form>
+    <label > </label>
+    <input >
+      <label >Kundenstatus: </label>
+        <label>Anrede: </label>
+        <input type="text">
+        <label>Vorname: </label>
+        <input type="text">
+        <label>Nachname: </label>
+        <input type="text">
+        <label>&nbsp; </label>
+        <input type="text">
+        <label>&nbsp; </label>
+        <input type="text">
+        <label>Straße mit Hausnummer:</label>
+        <input type="text">
+        <label>Postleitzahl/Ort:</label>
+        <input type="text">
+        <input type="text">
+        <label>Land:*</label>
+        <input type="text">
+        <label>E-Mail: </label>
+        <input  type="email">
+        <label>Telefon: </label>
+        <input  type="text">
+        <label>Fax: </label>
+        <input type="text">
+</form>
diff --git a/components/test/data/autofill/heuristics/output/177_reichelt.out b/components/test/data/autofill/heuristics/output/177_reichelt.out
new file mode 100644
index 0000000..9120b5ef
--- /dev/null
+++ b/components/test/data/autofill/heuristics/output/177_reichelt.out
@@ -0,0 +1,13 @@
+UNKNOWN_TYPE |  |  |  | _1-default
+NAME_HONORIFIC_PREFIX |  | Anrede: |  | _1-default
+NAME_FIRST |  | Vorname: |  | _1-default
+NAME_LAST |  | Nachname: |  | _1-default
+UNKNOWN_TYPE |  |  |  | _1-default
+UNKNOWN_TYPE |  |  |  | _1-default
+ADDRESS_HOME_LINE1 |  | Straße mit Hausnummer: |  | _1-default
+ADDRESS_HOME_ZIP |  | Postleitzahl/Ort: |  | _1-default
+ADDRESS_HOME_CITY |  |  |  | _1-default
+ADDRESS_HOME_COUNTRY |  | Land:* |  | _1-default
+EMAIL_ADDRESS |  | E-Mail: |  | _1-default
+PHONE_HOME_WHOLE_NUMBER |  | Telefon: |  | _1-default
+UNKNOWN_TYPE |  | Fax: |  | _1-default
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 1d4686b9..43856c5 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -1312,6 +1312,11 @@
 }
 
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest,
+                       AccessibilityAriaTouchPassthrough) {
+  RunAriaTest(FILE_PATH_LITERAL("aria-touchpassthrough.html"));
+}
+
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest,
                        DISABLED_AccessibilityAriaTextboxWithSelection) {
   RunAriaTest(FILE_PATH_LITERAL("aria-textbox-with-selection.html"));
 }
diff --git a/content/browser/appcache/appcache_host_unittest.cc b/content/browser/appcache/appcache_host_unittest.cc
index cf2d045b..6ee5c60 100644
--- a/content/browser/appcache/appcache_host_unittest.cc
+++ b/content/browser/appcache/appcache_host_unittest.cc
@@ -133,10 +133,11 @@
                               const url::Origin& origin,
                               blink::mojom::StorageType type,
                               bool enabled) override {}
-    void GetUsageAndQuota(base::SequencedTaskRunner* original_task_runner,
-                          const url::Origin& origin,
-                          blink::mojom::StorageType type,
-                          UsageAndQuotaCallback callback) override {}
+    void GetUsageAndQuota(
+        const url::Origin& origin,
+        blink::mojom::StorageType type,
+        scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
+        UsageAndQuotaCallback callback) override {}
 
     void NotifyOriginInUse(const url::Origin& origin) override {
       inuse_[origin] += 1;
diff --git a/content/browser/appcache/appcache_storage_impl.cc b/content/browser/appcache/appcache_storage_impl.cc
index 3ed9df3..c23ed1dc 100644
--- a/content/browser/appcache/appcache_storage_impl.cc
+++ b/content/browser/appcache/appcache_storage_impl.cc
@@ -671,8 +671,8 @@
   // We have to ask the quota manager for the value.
   storage_->pending_quota_queries_.insert(this);
   storage_->service()->quota_manager_proxy()->GetUsageAndQuota(
-      base::ThreadTaskRunnerHandle::Get().get(), group_record_.origin,
-      blink::mojom::StorageType::kTemporary,
+      group_record_.origin, blink::mojom::StorageType::kTemporary,
+      base::ThreadTaskRunnerHandle::Get(),
       base::BindOnce(&StoreGroupAndCacheTask::OnQuotaCallback, this));
 }
 
diff --git a/content/browser/appcache/appcache_storage_impl_unittest.cc b/content/browser/appcache/appcache_storage_impl_unittest.cc
index c4beb44..75431cd 100644
--- a/content/browser/appcache/appcache_storage_impl_unittest.cc
+++ b/content/browser/appcache/appcache_storage_impl_unittest.cc
@@ -212,13 +212,14 @@
                               const url::Origin& origin,
                               StorageType type,
                               bool enabled) override {}
-    void GetUsageAndQuota(base::SequencedTaskRunner* original_task_runner,
-                          const url::Origin& origin,
-                          StorageType type,
-                          UsageAndQuotaCallback callback) override {
+    void GetUsageAndQuota(
+        const url::Origin& origin,
+        blink::mojom::StorageType type,
+        scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
+        UsageAndQuotaCallback callback) override {
       EXPECT_EQ(StorageType::kTemporary, type);
       if (async_) {
-        original_task_runner->PostTask(
+        callback_task_runner->PostTask(
             FROM_HERE,
             base::BindOnce(std::move(callback),
                            blink::mojom::QuotaStatusCode::kOk, 0, kMockQuota));
diff --git a/content/browser/background_fetch/background_fetch_test_data_manager.cc b/content/browser/background_fetch/background_fetch_test_data_manager.cc
index ef67300..d032de7b 100644
--- a/content/browser/background_fetch/background_fetch_test_data_manager.cc
+++ b/content/browser/background_fetch/background_fetch_test_data_manager.cc
@@ -42,13 +42,21 @@
       storage::QuotaClientType client_type,
       const std::vector<blink::mojom::StorageType>& storage_types) override {}
 
-  void GetUsageAndQuota(base::SequencedTaskRunner* original_task_runner,
-                        const url::Origin& origin,
-                        blink::mojom::StorageType type,
-                        UsageAndQuotaCallback callback) override {
-    DCHECK(original_task_runner);
-    std::move(callback).Run(blink::mojom::QuotaStatusCode::kOk, /* usage= */ 0,
-                            kBackgroundFetchMaxQuotaBytes);
+  void GetUsageAndQuota(
+      const url::Origin& origin,
+      blink::mojom::StorageType type,
+      scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
+      UsageAndQuotaCallback callback) override {
+    DCHECK(callback_task_runner);
+
+    // While this DCHECK is true, the PostTask() below isn't strictly necessary.
+    // The callback could be Run() directly.
+    DCHECK(callback_task_runner->RunsTasksInCurrentSequence());
+
+    callback_task_runner->PostTask(
+        FROM_HERE,
+        base::BindOnce(std::move(callback), blink::mojom::QuotaStatusCode::kOk,
+                       /* usage= */ 0, kBackgroundFetchMaxQuotaBytes));
   }
 
  protected:
diff --git a/content/browser/background_fetch/storage/database_task.cc b/content/browser/background_fetch/storage/database_task.cc
index b7f3bf5..99e61809 100644
--- a/content/browser/background_fetch/storage/database_task.cc
+++ b/content/browser/background_fetch/storage/database_task.cc
@@ -87,8 +87,8 @@
   DCHECK(quota_manager_proxy());
   DCHECK_GT(size, 0);
   quota_manager_proxy()->GetUsageAndQuota(
-      base::ThreadTaskRunnerHandle::Get().get(), origin,
-      blink::mojom::StorageType::kTemporary,
+      origin, blink::mojom::StorageType::kTemporary,
+      base::ThreadTaskRunnerHandle::Get(),
       base::BindOnce(&DidGetUsageAndQuota, std::move(callback), size));
 }
 
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc
index 00d52ce..aba99de 100644
--- a/content/browser/browser_interface_binders.cc
+++ b/content/browser/browser_interface_binders.cc
@@ -836,7 +836,7 @@
   // production embedder (such as in tests).
   map->Add<blink::mojom::InsecureInputService>(base::BindRepeating(
       &EmptyBinderForFrame<blink::mojom::InsecureInputService>));
-  if (base::FeatureList::IsEnabled(blink::features::kPrerender2)) {
+  if (blink::features::IsPrerender2Enabled()) {
     map->Add<blink::mojom::PrerenderProcessor>(base::BindRepeating(
         &RenderFrameHostImpl::BindPrerenderProcessor, base::Unretained(host)));
   } else {
diff --git a/content/browser/browser_interface_broker_impl.h b/content/browser/browser_interface_broker_impl.h
index 38ab438..e9e4901 100644
--- a/content/browser/browser_interface_broker_impl.h
+++ b/content/browser/browser_interface_broker_impl.h
@@ -62,7 +62,7 @@
   // Sets MojoBinderPolicyApplier to control when to bind interfaces.
   void ApplyMojoBinderPolicies(
       std::unique_ptr<MojoBinderPolicyApplier> policy_applier) {
-    DCHECK(base::FeatureList::IsEnabled(blink::features::kPrerender2));
+    DCHECK(blink::features::IsPrerender2Enabled());
     DCHECK(policy_applier);
     DCHECK(!policy_applier_);
     policy_applier_ = std::move(policy_applier);
@@ -71,7 +71,7 @@
   // Resolves requests that were previously deferred and stops applying policies
   // to binding requests.
   void ReleaseMojoBinderPolicies() {
-    DCHECK(base::FeatureList::IsEnabled(blink::features::kPrerender2));
+    DCHECK(blink::features::IsPrerender2Enabled());
     DCHECK(policy_applier_);
     policy_applier_->GrantAll();
     // Reset `policy_applier_` to disable capability control.
diff --git a/content/browser/cache_storage/cache_storage_manager_unittest.cc b/content/browser/cache_storage/cache_storage_manager_unittest.cc
index c6e2871..11d921e 100644
--- a/content/browser/cache_storage/cache_storage_manager_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_manager_unittest.cc
@@ -825,8 +825,7 @@
     int64_t usage(CacheStorage::kSizeUnknown);
     base::RunLoop loop;
     quota_manager_proxy_->GetUsageAndQuota(
-        base::ThreadTaskRunnerHandle::Get().get(), origin,
-        StorageType::kTemporary,
+        origin, StorageType::kTemporary, base::ThreadTaskRunnerHandle::Get(),
         base::BindOnce(&CacheStorageManagerTest::DidGetQuotaOriginUsage,
                        base::Unretained(this), base::Unretained(&usage),
                        &loop));
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
index c703df1..c83afd4 100644
--- a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
+++ b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
@@ -691,8 +691,7 @@
   // GetUsageAndQuota is called before entering a scheduled operation since it
   // can call Size, another scheduled operation.
   quota_manager_proxy_->GetUsageAndQuota(
-      scheduler_task_runner_.get(), origin_,
-      blink::mojom::StorageType::kTemporary,
+      origin_, blink::mojom::StorageType::kTemporary, scheduler_task_runner_,
       base::BindOnce(&LegacyCacheStorageCache::WriteSideDataDidGetQuota,
                      weak_ptr_factory_.GetWeakPtr(), std::move(callback), url,
                      expected_response_time, trace_id, buffer, buf_len));
@@ -779,8 +778,7 @@
     // Put runs, the cache might already be full and the origin will be larger
     // than it's supposed to be.
     quota_manager_proxy_->GetUsageAndQuota(
-        scheduler_task_runner_.get(), origin_,
-        blink::mojom::StorageType::kTemporary,
+        origin_, blink::mojom::StorageType::kTemporary, scheduler_task_runner_,
         base::BindOnce(&LegacyCacheStorageCache::BatchDidGetUsageAndQuota,
                        weak_ptr_factory_.GetWeakPtr(), std::move(operations),
                        trace_id, std::move(callback),
diff --git a/content/browser/cross_origin_opener_policy_browsertest.cc b/content/browser/cross_origin_opener_policy_browsertest.cc
index 9619c45e..441e0b4 100644
--- a/content/browser/cross_origin_opener_policy_browsertest.cc
+++ b/content/browser/cross_origin_opener_policy_browsertest.cc
@@ -89,7 +89,6 @@
     feature_list_.InitWithFeatures(
         {network::features::kCrossOriginOpenerPolicy,
          network::features::kCrossOriginOpenerPolicyReporting,
-         network::features::kCrossOriginEmbedderPolicy,
          network::features::kCrossOriginIsolated},
         {});
 
@@ -2444,7 +2443,6 @@
         {
             // Enabled
             network::features::kCrossOriginOpenerPolicy,
-            network::features::kCrossOriginEmbedderPolicy,
             network::features::kCrossOriginOpenerPolicyAccessReporting,
             network::features::kCrossOriginOpenerPolicyReportingOriginTrial,
         },
diff --git a/content/browser/devtools/devtools_instrumentation.cc b/content/browser/devtools/devtools_instrumentation.cc
index f9559cc..1627071 100644
--- a/content/browser/devtools/devtools_instrumentation.cc
+++ b/content/browser/devtools/devtools_instrumentation.cc
@@ -731,13 +731,14 @@
     const std::string& devtools_request_id,
     const net::CookieAndLineAccessResultList& response_cookie_list,
     const std::vector<network::mojom::HttpRawHeaderPairPtr>& response_headers,
-    const base::Optional<std::string>& response_headers_text) {
+    const base::Optional<std::string>& response_headers_text,
+    network::mojom::IPAddressSpace resource_address_space) {
   FrameTreeNode* ftn = GetFtnForNetworkRequest(process_id, routing_id);
   if (ftn) {
-    DispatchToAgents(ftn,
-                     &protocol::NetworkHandler::OnResponseReceivedExtraInfo,
-                     devtools_request_id, response_cookie_list,
-                     response_headers, response_headers_text);
+    DispatchToAgents(
+        ftn, &protocol::NetworkHandler::OnResponseReceivedExtraInfo,
+        devtools_request_id, response_cookie_list, response_headers,
+        response_headers_text, resource_address_space);
     return;
   }
 
@@ -745,7 +746,8 @@
   DispatchToWorkerAgents(process_id, routing_id,
                          &protocol::NetworkHandler::OnResponseReceivedExtraInfo,
                          devtools_request_id, response_cookie_list,
-                         response_headers, response_headers_text);
+                         response_headers, response_headers_text,
+                         resource_address_space);
 }
 
 void OnCorsPreflightRequest(int32_t process_id,
diff --git a/content/browser/devtools/devtools_instrumentation.h b/content/browser/devtools/devtools_instrumentation.h
index 2705c90..46de9b7 100644
--- a/content/browser/devtools/devtools_instrumentation.h
+++ b/content/browser/devtools/devtools_instrumentation.h
@@ -155,7 +155,8 @@
     const std::string& devtools_request_id,
     const net::CookieAndLineAccessResultList& response_cookie_list,
     const std::vector<network::mojom::HttpRawHeaderPairPtr>& response_headers,
-    const base::Optional<std::string>& response_headers_text);
+    const base::Optional<std::string>& response_headers_text,
+    network::mojom::IPAddressSpace resource_address_space);
 void OnCorsPreflightRequest(int32_t process_id,
                             int32_t render_frame_id,
                             const base::UnguessableToken& devtools_request_id,
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc
index bb92e30..303a332 100644
--- a/content/browser/devtools/protocol/network_handler.cc
+++ b/content/browser/devtools/protocol/network_handler.cc
@@ -2494,13 +2494,15 @@
     const std::string& devtools_request_id,
     const net::CookieAndLineAccessResultList& response_cookie_list,
     const std::vector<network::mojom::HttpRawHeaderPairPtr>& response_headers,
-    const base::Optional<std::string>& response_headers_text) {
+    const base::Optional<std::string>& response_headers_text,
+    network::mojom::IPAddressSpace resource_address_space) {
   if (!enabled_)
     return;
 
   frontend_->ResponseReceivedExtraInfo(
       devtools_request_id, BuildProtocolBlockedSetCookies(response_cookie_list),
       GetRawHeaders(response_headers),
+      BuildIpAddressSpace(resource_address_space),
       response_headers_text.has_value() ? response_headers_text.value()
                                         : Maybe<String>());
 }
diff --git a/content/browser/devtools/protocol/network_handler.h b/content/browser/devtools/protocol/network_handler.h
index 3c98f81..490bb609 100644
--- a/content/browser/devtools/protocol/network_handler.h
+++ b/content/browser/devtools/protocol/network_handler.h
@@ -213,7 +213,8 @@
       const std::string& devtools_request_id,
       const net::CookieAndLineAccessResultList& response_cookie_list,
       const std::vector<network::mojom::HttpRawHeaderPairPtr>& response_headers,
-      const base::Optional<std::string>& response_headers_text);
+      const base::Optional<std::string>& response_headers_text,
+      network::mojom::IPAddressSpace resource_address_space);
   void OnTrustTokenOperationDone(
       const std::string& devtools_request_id,
       const network::mojom::TrustTokenOperationResult& result);
diff --git a/content/browser/indexed_db/transaction_impl.cc b/content/browser/indexed_db/transaction_impl.cc
index 9f97786..b60ae23 100644
--- a/content/browser/indexed_db/transaction_impl.cc
+++ b/content/browser/indexed_db/transaction_impl.cc
@@ -284,8 +284,8 @@
   }
 
   indexed_db_context_->quota_manager_proxy()->GetUsageAndQuota(
-      indexed_db_context_->IDBTaskRunner(), origin_,
-      blink::mojom::StorageType::kTemporary,
+      origin_, blink::mojom::StorageType::kTemporary,
+      indexed_db_context_->IDBTaskRunner(),
       base::BindOnce(&TransactionImpl::OnGotUsageAndQuotaForCommit,
                      weak_factory_.GetWeakPtr()));
 }
diff --git a/content/browser/loader/content_security_notifier.cc b/content/browser/loader/content_security_notifier.cc
index d15c712..2ca98ba 100644
--- a/content/browser/loader/content_security_notifier.cc
+++ b/content/browser/loader/content_security_notifier.cc
@@ -15,38 +15,22 @@
 
 void ContentSecurityNotifier::NotifyContentWithCertificateErrorsRan() {
   auto* render_frame_host = RenderFrameHostImpl::FromID(render_frame_host_id_);
-  if (!render_frame_host)
-    return;
-  auto* web_contents = static_cast<WebContentsImpl*>(
-      WebContents::FromRenderFrameHost(render_frame_host));
-  if (!web_contents)
-    return;
-  web_contents->OnDidRunContentWithCertificateErrors(render_frame_host);
+  if (render_frame_host)
+    render_frame_host->OnDidRunContentWithCertificateErrors();
 }
 
 void ContentSecurityNotifier::NotifyContentWithCertificateErrorsDisplayed() {
   auto* render_frame_host = RenderFrameHostImpl::FromID(render_frame_host_id_);
-  if (!render_frame_host)
-    return;
-  auto* web_contents = static_cast<WebContentsImpl*>(
-      WebContents::FromRenderFrameHost(render_frame_host));
-  if (!web_contents)
-    return;
-  web_contents->OnDidDisplayContentWithCertificateErrors();
+  if (render_frame_host)
+    render_frame_host->OnDidDisplayContentWithCertificateErrors();
 }
 
 void ContentSecurityNotifier::NotifyInsecureContentRan(
     const GURL& origin,
     const GURL& insecure_url) {
   auto* render_frame_host = RenderFrameHostImpl::FromID(render_frame_host_id_);
-  if (!render_frame_host)
-    return;
-  auto* web_contents = static_cast<WebContentsImpl*>(
-      WebContents::FromRenderFrameHost(render_frame_host));
-  if (!web_contents)
-    return;
-  web_contents->OnDidRunInsecureContent(render_frame_host, origin,
-                                        insecure_url);
+  if (render_frame_host)
+    render_frame_host->OnDidRunInsecureContent(origin, insecure_url);
 }
 
 }  // namespace content
diff --git a/content/browser/network_service_client.cc b/content/browser/network_service_client.cc
index 39ff84b3..e185cf4 100644
--- a/content/browser/network_service_client.cc
+++ b/content/browser/network_service_client.cc
@@ -225,10 +225,11 @@
     const std::string& devtools_request_id,
     const net::CookieAndLineAccessResultList& cookies_with_access_result,
     std::vector<network::mojom::HttpRawHeaderPairPtr> headers,
-    const base::Optional<std::string>& raw_response_headers) {
+    const base::Optional<std::string>& raw_response_headers,
+    network::mojom::IPAddressSpace resource_address_space) {
   devtools_instrumentation::OnResponseReceivedExtraInfo(
       process_id, routing_id, devtools_request_id, cookies_with_access_result,
-      headers, raw_response_headers);
+      headers, raw_response_headers, resource_address_space);
 }
 
 void NetworkServiceClient::OnCorsPreflightRequest(
diff --git a/content/browser/network_service_client.h b/content/browser/network_service_client.h
index 2eb3415..4bb750af 100644
--- a/content/browser/network_service_client.h
+++ b/content/browser/network_service_client.h
@@ -63,7 +63,8 @@
       const std::string& devtools_request_id,
       const net::CookieAndLineAccessResultList& cookies_with_access_result,
       std::vector<network::mojom::HttpRawHeaderPairPtr> headers,
-      const base::Optional<std::string>& raw_response_headers) override;
+      const base::Optional<std::string>& raw_response_headers,
+      network::mojom::IPAddressSpace resource_address_space) override;
   void OnCorsPreflightRequest(
       int32_t process_id,
       int32_t render_frame_id,
diff --git a/content/browser/prerender/prerender_host.cc b/content/browser/prerender/prerender_host.cc
index 08a1eed..86de1e52 100644
--- a/content/browser/prerender/prerender_host.cc
+++ b/content/browser/prerender/prerender_host.cc
@@ -16,9 +16,17 @@
 namespace content {
 
 PrerenderHost::PrerenderHost(blink::mojom::PrerenderAttributesPtr attributes,
-                             const url::Origin& initiator_origin)
+                             const url::Origin& initiator_origin,
+                             BrowserContext& browser_context)
     : attributes_(std::move(attributes)), initiator_origin_(initiator_origin) {
-  DCHECK(base::FeatureList::IsEnabled(blink::features::kPrerender2));
+  DCHECK(blink::features::IsPrerender2Enabled());
+  // Create a new WebContents for prerendering.
+  WebContents::CreateParams web_contents_params(&browser_context);
+  // TODO(https://crbug.com/1132746): Set up other fields of
+  // `web_contents_params` as well, and add tests for them.
+  prerendered_contents_ = WebContents::Create(web_contents_params);
+  frame_tree_node_id_ =
+      prerendered_contents_->GetMainFrame()->GetFrameTreeNodeId();
 }
 
 // TODO(https://crbug.com/1132746): Abort ongoing prerendering and notify the
@@ -31,15 +39,8 @@
 // TODO(https://crbug.com/1132746): Inspect diffs from the current
 // no-state-prefetch implementation. See PrerenderContents::StartPrerendering()
 // for example.
-void PrerenderHost::StartPrerendering(BrowserContext& browser_context) {
-  TRACE_EVENT1("navigation", "PrerenderHost::StartPrerendering",
-               "browser_context", &browser_context);
-  // Create a new WebContents for prerendering.
-  WebContents::CreateParams web_contents_params(&browser_context);
-  // TODO(https://crbug.com/1132746): Set up other fields of
-  // `web_contents_params` as well, and add tests for them.
-  prerendered_contents_ = WebContents::Create(web_contents_params);
-
+void PrerenderHost::StartPrerendering() {
+  TRACE_EVENT0("navigation", "PrerenderHost::StartPrerendering");
   // Observe events about the prerendering contents.
   Observe(prerendered_contents_.get());
 
diff --git a/content/browser/prerender/prerender_host.h b/content/browser/prerender/prerender_host.h
index 2dfbbd4..e6a48f2 100644
--- a/content/browser/prerender/prerender_host.h
+++ b/content/browser/prerender/prerender_host.h
@@ -10,6 +10,7 @@
 #include "base/optional.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/global_routing_id.h"
+#include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "third_party/blink/public/mojom/prerender/prerender.mojom.h"
 #include "url/gurl.h"
@@ -41,7 +42,8 @@
   };
 
   PrerenderHost(blink::mojom::PrerenderAttributesPtr attributes,
-                const url::Origin& initiator_origin);
+                const url::Origin& initiator_origin,
+                BrowserContext& browser_context);
   ~PrerenderHost() override;
 
   PrerenderHost(const PrerenderHost&) = delete;
@@ -49,7 +51,7 @@
   PrerenderHost(PrerenderHost&&) = delete;
   PrerenderHost& operator=(PrerenderHost&&) = delete;
 
-  void StartPrerendering(BrowserContext& browser_context);
+  void StartPrerendering();
 
   // WebContentsObserver implementation:
   void DidFinishNavigation(NavigationHandle* navigation_handle) override;
@@ -68,6 +70,8 @@
 
   const GURL& GetInitialUrl() const;
 
+  int frame_tree_node_id() const { return frame_tree_node_id_; }
+
   bool is_ready_for_activation() const { return is_ready_for_activation_; }
 
  private:
@@ -85,6 +89,11 @@
   // Indicates if `prerendered_contents_` is ready for activation.
   bool is_ready_for_activation_ = false;
 
+  // The ID of the root node of the frame tree for the prerendered page `this`
+  // is hosting. Since PrerenderHost has 1:1 correspondence with FrameTree,
+  // this is also used for the ID of this PrerenderHost.
+  int frame_tree_node_id_ = RenderFrameHost::kNoFrameTreeNodeId;
+
   base::Optional<FinalStatus> final_status_;
 };
 
diff --git a/content/browser/prerender/prerender_host_registry.cc b/content/browser/prerender/prerender_host_registry.cc
index 6ebb3377..1a4383e 100644
--- a/content/browser/prerender/prerender_host_registry.cc
+++ b/content/browser/prerender/prerender_host_registry.cc
@@ -18,12 +18,12 @@
 
 PrerenderHostRegistry::PrerenderHostRegistry(BrowserContext& browser_context)
     : browser_context_(browser_context) {
-  DCHECK(base::FeatureList::IsEnabled(blink::features::kPrerender2));
+  DCHECK(blink::features::IsPrerender2Enabled());
 }
 
 PrerenderHostRegistry::~PrerenderHostRegistry() = default;
 
-int64_t PrerenderHostRegistry::CreateAndStartHost(
+int PrerenderHostRegistry::CreateAndStartHost(
     blink::mojom::PrerenderAttributesPtr attributes,
     const url::Origin& initiator_origin) {
   DCHECK(attributes);
@@ -35,18 +35,16 @@
                base::trace_event::ToTracedValue(*attributes),
                "initiator_origin", initiator_origin.GetURL().spec());
 
-  auto found = prerender_host_id_by_url_.find(prerendering_url);
-  if (found != prerender_host_id_by_url_.end())
+  auto found = frame_tree_node_id_by_url_.find(prerendering_url);
+  if (found != frame_tree_node_id_by_url_.end())
     return found->second;
 
-  // `next_prerender_host_id_` is not expected to ever hit int64_t max.
-  CHECK_LT(next_prerender_host_id_, std::numeric_limits<int64_t>::max());
-  const int64_t prerender_host_id = next_prerender_host_id_++;
+  auto prerender_host = std::make_unique<PrerenderHost>(
+      std::move(attributes), initiator_origin, browser_context_);
+  const int frame_tree_node_id = prerender_host->frame_tree_node_id();
 
-  auto prerender_host =
-      std::make_unique<PrerenderHost>(std::move(attributes), initiator_origin);
-  // Start prerendering before adding the host to `prerender_host_id_by_url_` to
-  // make sure navigation for prerendering doesn't select itself.
+  // Start prerendering before adding the host to `frame_tree_node_id_by_url_`
+  // to make sure navigation for prerendering doesn't select itself.
   // TODO(https://crbug.com/1132746): FindHostToActivate() should avoid
   // selecting a prerender host when the current NavigationRequest is for
   // prerendering regardless of the calling order of StartPrerendering(). At
@@ -55,24 +53,29 @@
   // PrerenderHostRegistry with a stable prerendering state. This issue will be
   // fixed after landing the new approach of depending on FrameTree's
   // prerendering state.
-  prerender_host_by_id_[prerender_host_id] = std::move(prerender_host);
-  prerender_host_by_id_[prerender_host_id]->StartPrerendering(browser_context_);
+  CHECK(!base::Contains(prerender_host_by_frame_tree_node_id_,
+                        frame_tree_node_id));
+  prerender_host_by_frame_tree_node_id_[frame_tree_node_id] =
+      std::move(prerender_host);
+  prerender_host_by_frame_tree_node_id_[frame_tree_node_id]
+      ->StartPrerendering();
 
   // Make sure StartPrerendering() doesn't call AbandonHost().
-  DCHECK(base::Contains(prerender_host_by_id_, prerender_host_id));
+  DCHECK(base::Contains(prerender_host_by_frame_tree_node_id_,
+                        frame_tree_node_id));
 
-  prerender_host_id_by_url_[prerendering_url] = prerender_host_id;
-  return prerender_host_id;
+  frame_tree_node_id_by_url_[prerendering_url] = frame_tree_node_id;
+  return frame_tree_node_id;
 }
 
-void PrerenderHostRegistry::AbandonHost(int64_t prerender_host_id) {
+void PrerenderHostRegistry::AbandonHost(int frame_tree_node_id) {
   TRACE_EVENT1("navigation", "PrerenderHostRegistry::AbandonHost",
-               "prerender_host_id", prerender_host_id);
-  auto found = prerender_host_by_id_.find(prerender_host_id);
-  if (found != prerender_host_by_id_.end()) {
+               "frame_tree_node_id", frame_tree_node_id);
+  auto found = prerender_host_by_frame_tree_node_id_.find(frame_tree_node_id);
+  if (found != prerender_host_by_frame_tree_node_id_.end()) {
     auto initial_url = found->second->GetInitialUrl();
-    prerender_host_id_by_url_.erase(initial_url);
-    prerender_host_by_id_.erase(found);
+    frame_tree_node_id_by_url_.erase(initial_url);
+    prerender_host_by_frame_tree_node_id_.erase(found);
   }
 }
 
@@ -104,16 +107,17 @@
   if (site_instance->GetRelatedActiveContentsCount() != 1u)
     return nullptr;
 
-  auto id_iter = prerender_host_id_by_url_.find(navigation_url);
-  if (id_iter == prerender_host_id_by_url_.end())
+  auto id_iter = frame_tree_node_id_by_url_.find(navigation_url);
+  if (id_iter == frame_tree_node_id_by_url_.end())
     return nullptr;
-  const int64_t prerender_host_id = id_iter->second;
-  prerender_host_id_by_url_.erase(id_iter);
+  const int prerender_frame_tree_node_id = id_iter->second;
+  frame_tree_node_id_by_url_.erase(id_iter);
 
-  auto host_iter = prerender_host_by_id_.find(prerender_host_id);
-  DCHECK(host_iter != prerender_host_by_id_.end());
+  auto host_iter =
+      prerender_host_by_frame_tree_node_id_.find(prerender_frame_tree_node_id);
+  DCHECK(host_iter != prerender_host_by_frame_tree_node_id_.end());
   std::unique_ptr<PrerenderHost> host = std::move(host_iter->second);
-  prerender_host_by_id_.erase(host_iter);
+  prerender_host_by_frame_tree_node_id_.erase(host_iter);
 
   // If the host is not ready for activation yet, destroys it and returns
   // nullptr. This is because it is likely that the prerendered page is never
@@ -126,12 +130,13 @@
 
 PrerenderHost* PrerenderHostRegistry::FindHostByUrlForTesting(
     const GURL& prerendering_url) {
-  auto id_iter = prerender_host_id_by_url_.find(prerendering_url);
-  if (id_iter == prerender_host_id_by_url_.end())
+  auto id_iter = frame_tree_node_id_by_url_.find(prerendering_url);
+  if (id_iter == frame_tree_node_id_by_url_.end())
     return nullptr;
-  const int64_t prerender_host_id = id_iter->second;
-  auto host_iter = prerender_host_by_id_.find(prerender_host_id);
-  DCHECK(host_iter != prerender_host_by_id_.end());
+  const int prerender_frame_tree_node_id = id_iter->second;
+  auto host_iter =
+      prerender_host_by_frame_tree_node_id_.find(prerender_frame_tree_node_id);
+  DCHECK(host_iter != prerender_host_by_frame_tree_node_id_.end());
   return host_iter->second.get();
 }
 
diff --git a/content/browser/prerender/prerender_host_registry.h b/content/browser/prerender/prerender_host_registry.h
index f4c93ad1..9e8b9c0 100644
--- a/content/browser/prerender/prerender_host_registry.h
+++ b/content/browser/prerender/prerender_host_registry.h
@@ -32,11 +32,12 @@
   PrerenderHostRegistry(PrerenderHostRegistry&&) = delete;
   PrerenderHostRegistry& operator=(PrerenderHostRegistry&&) = delete;
 
-  // Creates and starts a host and returns the id of the created host.
-  int64_t CreateAndStartHost(blink::mojom::PrerenderAttributesPtr attributes,
-                             const url::Origin& initiator_origin);
+  // Creates and starts a host. Returns the root frame tree node id of the
+  // prerendered page, which can be used as the id of the host.
+  int CreateAndStartHost(blink::mojom::PrerenderAttributesPtr attributes,
+                         const url::Origin& initiator_origin);
 
-  // Destroys the host registered for `prerender_host_id`.
+  // Destroys the host registered for `frame_tree_node_id`.
   // TODO(https://crbug.com/1169594): Distinguish two paths that cancel
   // prerendering. A prerender can be canceled due to the following reasons:
   // 1. Initiator was no longer interested. Since one prerender may have several
@@ -45,7 +46,7 @@
   // 2. Prerendering page did something undesirable. The same behavior always
   // happens regardless of which caller calls it. So PrerenderHostRegistry
   // should destroy the PrerenderHost.
-  void AbandonHost(int64_t prerender_host_id);
+  void AbandonHost(int frame_tree_node_id);
 
   // Selects the host to activate for a navigation for the given FrameTreeNode.
   // Returns nullptr if it's not found or not ready for activation yet.
@@ -64,9 +65,9 @@
 
   // TODO(https://crbug.com/1132746): Expire prerendered contents if they are
   // not used for a while.
-  int64_t next_prerender_host_id_{0};
-  std::map<int64_t, std::unique_ptr<PrerenderHost>> prerender_host_by_id_;
-  std::map<GURL, int64_t> prerender_host_id_by_url_;
+  std::map<int, std::unique_ptr<PrerenderHost>>
+      prerender_host_by_frame_tree_node_id_;
+  std::map<GURL, int> frame_tree_node_id_by_url_;
 };
 
 }  // namespace content
diff --git a/content/browser/prerender/prerender_host_registry_unittest.cc b/content/browser/prerender/prerender_host_registry_unittest.cc
index 68721785..be9b745 100644
--- a/content/browser/prerender/prerender_host_registry_unittest.cc
+++ b/content/browser/prerender/prerender_host_registry_unittest.cc
@@ -6,8 +6,10 @@
 
 #include "base/test/scoped_feature_list.h"
 #include "content/browser/prerender/prerender_host.h"
+#include "content/browser/renderer_host/render_frame_host_impl.h"
 #include "content/browser/site_instance_impl.h"
 #include "content/browser/storage_partition_impl.h"
+#include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/test/test_browser_context.h"
 #include "content/test/test_render_view_host.h"
@@ -17,6 +19,10 @@
 namespace content {
 namespace {
 
+// This definition is needed because this constant is odr-used in gtest macros.
+// https://en.cppreference.com/w/cpp/language/static#Constant_static_members
+const int kNoFrameTreeNodeId = RenderFrameHost::kNoFrameTreeNodeId;
+
 class PrerenderHostRegistryTest : public RenderViewHostImplTestHarness {
  public:
   PrerenderHostRegistryTest() = default;
@@ -65,9 +71,9 @@
   attributes->url = kPrerenderingUrl;
 
   PrerenderHostRegistry* registry = GetPrerenderHostRegistry();
-  const int64_t prerender_host_id = registry->CreateAndStartHost(
+  const int prerender_frame_tree_node_id = registry->CreateAndStartHost(
       std::move(attributes), render_frame_host->GetLastCommittedOrigin());
-  ASSERT_GE(prerender_host_id, int64_t{0});
+  ASSERT_NE(prerender_frame_tree_node_id, kNoFrameTreeNodeId);
   PrerenderHost* prerender_host =
       registry->FindHostByUrlForTesting(kPrerenderingUrl);
 
@@ -95,16 +101,16 @@
   attributes2->url = kPrerenderingUrl;
 
   PrerenderHostRegistry* registry = GetPrerenderHostRegistry();
-  const int64_t prerender_host_id1 = registry->CreateAndStartHost(
+  const int frame_tree_node_id1 = registry->CreateAndStartHost(
       std::move(attributes1), render_frame_host->GetLastCommittedOrigin());
   PrerenderHost* prerender_host1 =
       registry->FindHostByUrlForTesting(kPrerenderingUrl);
 
   // Start the prerender host for the same URL. This second host should be
   // ignored, and the first host should still be findable.
-  const int64_t prerender_host_id2 = registry->CreateAndStartHost(
+  const int frame_tree_node_id2 = registry->CreateAndStartHost(
       std::move(attributes2), render_frame_host->GetLastCommittedOrigin());
-  EXPECT_EQ(prerender_host_id1, prerender_host_id2);
+  EXPECT_EQ(frame_tree_node_id1, frame_tree_node_id2);
   EXPECT_EQ(registry->FindHostByUrlForTesting(kPrerenderingUrl),
             prerender_host1);
 
@@ -132,11 +138,11 @@
   attributes2->url = kPrerenderingUrl2;
 
   PrerenderHostRegistry* registry = GetPrerenderHostRegistry();
-  const int64_t prerender_host_id1 = registry->CreateAndStartHost(
+  const int frame_tree_node_id1 = registry->CreateAndStartHost(
       std::move(attributes1), render_frame_host->GetLastCommittedOrigin());
-  const int64_t prerender_host_id2 = registry->CreateAndStartHost(
+  const int frame_tree_node_id2 = registry->CreateAndStartHost(
       std::move(attributes2), render_frame_host->GetLastCommittedOrigin());
-  EXPECT_NE(prerender_host_id1, prerender_host_id2);
+  EXPECT_NE(frame_tree_node_id1, frame_tree_node_id2);
   PrerenderHost* prerender_host1 =
       registry->FindHostByUrlForTesting(kPrerenderingUrl1);
   PrerenderHost* prerender_host2 =
@@ -172,9 +178,9 @@
   attributes->url = kPrerenderingUrl;
 
   PrerenderHostRegistry* registry = GetPrerenderHostRegistry();
-  const int64_t prerender_host_id = registry->CreateAndStartHost(
+  const int prerender_frame_tree_node_id = registry->CreateAndStartHost(
       std::move(attributes), render_frame_host->GetLastCommittedOrigin());
-  ASSERT_GE(prerender_host_id, int64_t{0});
+  ASSERT_NE(prerender_frame_tree_node_id, kNoFrameTreeNodeId);
   PrerenderHost* prerender_host =
       registry->FindHostByUrlForTesting(kPrerenderingUrl);
 
@@ -197,11 +203,11 @@
   attributes->url = kPrerenderingUrl;
 
   PrerenderHostRegistry* registry = GetPrerenderHostRegistry();
-  const int64_t prerender_host_id = registry->CreateAndStartHost(
+  const int prerender_frame_tree_node_id = registry->CreateAndStartHost(
       std::move(attributes), render_frame_host->GetLastCommittedOrigin());
   EXPECT_NE(registry->FindHostByUrlForTesting(kPrerenderingUrl), nullptr);
 
-  registry->AbandonHost(prerender_host_id);
+  registry->AbandonHost(prerender_frame_tree_node_id);
   EXPECT_EQ(registry->FindHostByUrlForTesting(kPrerenderingUrl), nullptr);
 }
 
diff --git a/content/browser/prerender/prerender_host_unittest.cc b/content/browser/prerender/prerender_host_unittest.cc
index 2778a97c..cdb76e4 100644
--- a/content/browser/prerender/prerender_host_unittest.cc
+++ b/content/browser/prerender/prerender_host_unittest.cc
@@ -73,10 +73,11 @@
   auto attributes = blink::mojom::PrerenderAttributes::New();
   attributes->url = kPrerenderingUrl;
   auto prerender_host = std::make_unique<PrerenderHost>(
-      std::move(attributes), initiator_rfh->GetLastCommittedOrigin());
+      std::move(attributes), initiator_rfh->GetLastCommittedOrigin(),
+      browser_context());
 
   // Start the prerendering navigation.
-  prerender_host->StartPrerendering(browser_context());
+  prerender_host->StartPrerendering();
 
   // Finish the prerendering navigation. Normally we could use
   // EmbeddedTestServer to provide a response, but this test uses
@@ -108,10 +109,11 @@
   auto attributes = blink::mojom::PrerenderAttributes::New();
   attributes->url = kPrerenderingUrl;
   auto prerender_host = std::make_unique<PrerenderHost>(
-      std::move(attributes), initiator_rfh->GetLastCommittedOrigin());
+      std::move(attributes), initiator_rfh->GetLastCommittedOrigin(),
+      browser_context());
 
   // Start the prerendering navigation, but don't activate it.
-  prerender_host->StartPrerendering(browser_context());
+  prerender_host->StartPrerendering();
   prerender_host.reset();
   ExpectFinalStatus(PrerenderHost::FinalStatus::kDestroyed);
 }
diff --git a/content/browser/prerender/prerender_processor.cc b/content/browser/prerender/prerender_processor.cc
index 60ea40ef..a541644e 100644
--- a/content/browser/prerender/prerender_processor.cc
+++ b/content/browser/prerender/prerender_processor.cc
@@ -18,7 +18,7 @@
     RenderFrameHostImpl& initiator_render_frame_host)
     : initiator_render_frame_host_(initiator_render_frame_host),
       initiator_origin_(initiator_render_frame_host.GetLastCommittedOrigin()) {
-  DCHECK(base::FeatureList::IsEnabled(blink::features::kPrerender2));
+  DCHECK(blink::features::IsPrerender2Enabled());
 }
 
 PrerenderProcessor::~PrerenderProcessor() {
@@ -55,7 +55,7 @@
   // TODO(https://crbug.com/1138711, https://crbug.com/1138723): Abort if the
   // initiator frame is not the main frame (i.e., iframe or pop-up window).
 
-  prerender_host_id_ = GetPrerenderHostRegistry().CreateAndStartHost(
+  prerender_frame_tree_node_id_ = GetPrerenderHostRegistry().CreateAndStartHost(
       std::move(attributes), initiator_origin_);
 }
 
@@ -72,7 +72,7 @@
   TRACE_EVENT0("navigation", "PrerenderProcessor::CancelPrerendering");
   DCHECK_EQ(state_, State::kStarted);
   state_ = State::kCancelled;
-  GetPrerenderHostRegistry().AbandonHost(prerender_host_id_);
+  GetPrerenderHostRegistry().AbandonHost(prerender_frame_tree_node_id_);
 }
 
 PrerenderHostRegistry& PrerenderProcessor::GetPrerenderHostRegistry() {
diff --git a/content/browser/prerender/prerender_processor.h b/content/browser/prerender/prerender_processor.h
index 555b9a3..f6239f9 100644
--- a/content/browser/prerender/prerender_processor.h
+++ b/content/browser/prerender/prerender_processor.h
@@ -10,6 +10,7 @@
 #include "content/browser/prerender/prerender_host_registry.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/global_routing_id.h"
+#include "content/public/browser/render_frame_host.h"
 #include "third_party/blink/public/mojom/prerender/prerender.mojom.h"
 #include "url/gurl.h"
 #include "url/origin.h"
@@ -54,8 +55,8 @@
   // may navigate away before Start() is called from a renderer process.
   const url::Origin initiator_origin_;
 
-  // ID of the corresponding PrerenderHost which handles this prerender request.
-  int64_t prerender_host_id_{-1};
+  // The root frame tree node id of the prerendered page.
+  int prerender_frame_tree_node_id_ = RenderFrameHost::kNoFrameTreeNodeId;
 
   enum class State { kInitial, kStarted, kCancelled };
   State state_ = State::kInitial;
diff --git a/content/browser/renderer_host/frame_tree.cc b/content/browser/renderer_host/frame_tree.cc
index 95aeb06..89716d0 100644
--- a/content/browser/renderer_host/frame_tree.cc
+++ b/content/browser/renderer_host/frame_tree.cc
@@ -15,6 +15,7 @@
 #include "base/lazy_instance.h"
 #include "base/memory/ptr_util.h"
 #include "base/stl_util.h"
+#include "base/trace_event/optional_trace_event.h"
 #include "base/unguessable_token.h"
 #include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/browser/renderer_host/navigation_controller_impl.h"
@@ -572,4 +573,10 @@
   root_->SetFrameName(main_frame_name, unique_name);
 }
 
+void FrameTree::DidAccessInitialMainDocument() {
+  OPTIONAL_TRACE_EVENT0("content", "FrameTree::DidAccessInitialDocument");
+  has_accessed_initial_main_document_ = true;
+  controller().DidAccessInitialMainDocument();
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/frame_tree.h b/content/browser/renderer_host/frame_tree.h
index 417fa7fe..396f609 100644
--- a/content/browser/renderer_host/frame_tree.h
+++ b/content/browser/renderer_host/frame_tree.h
@@ -299,6 +299,18 @@
   NavigationControllerImpl& controller() { return navigator_.controller(); }
   Navigator& navigator() { return navigator_; }
 
+  // Another page accessed the initial empty main document, which means it
+  // is no longer safe to display a pending URL without risking a URL spoof.
+  void DidAccessInitialMainDocument();
+
+  bool has_accessed_initial_main_document() const {
+    return has_accessed_initial_main_document_;
+  }
+
+  void ResetHasAccessedInitialMainDocument() {
+    has_accessed_initial_main_document_ = false;
+  }
+
  private:
   friend class FrameTreeTest;
   FRIEND_TEST_ALL_PREFIXES(RenderFrameHostImplBrowserTest, RemoveFocusedFrame);
@@ -340,6 +352,11 @@
   // Overall load progress.
   double load_progress_;
 
+  // Whether the initial empty page has been accessed by another page, making it
+  // unsafe to show the pending URL. Usually false unless another window tries
+  // to modify the blank page.  Always false after the first commit.
+  bool has_accessed_initial_main_document_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(FrameTree);
 };
 
diff --git a/content/browser/renderer_host/mixed_content_navigation_throttle.cc b/content/browser/renderer_host/mixed_content_navigation_throttle.cc
index 4e18807..32f11ff3 100644
--- a/content/browser/renderer_host/mixed_content_navigation_throttle.cc
+++ b/content/browser/renderer_host/mixed_content_navigation_throttle.cc
@@ -188,7 +188,10 @@
       allowed = !strict_mode;
       if (allowed) {
         frame_host_delegate->PassiveInsecureContentFound(request->GetURL());
-        frame_host_delegate->DidDisplayInsecureContent();
+        node->frame_tree()
+            ->controller()
+            .ssl_manager()
+            ->DidDisplayMixedContent();
       }
       break;
 
@@ -209,8 +212,8 @@
       if (allowed) {
         const GURL& origin_url =
             mixed_content_frame->GetLastCommittedOrigin().GetURL();
-        frame_host_delegate->DidRunInsecureContent(origin_url,
-                                                   request->GetURL());
+        mixed_content_frame->OnDidRunInsecureContent(origin_url,
+                                                     request->GetURL());
         mixed_content_features_.insert(
             blink::mojom::WebFeature::kMixedContentBlockableAllowed);
       }
@@ -220,7 +223,10 @@
     case blink::WebMixedContentContextType::kShouldBeBlockable:
       allowed = !strict_mode;
       if (allowed)
-        frame_host_delegate->DidDisplayInsecureContent();
+        node->frame_tree()
+            ->controller()
+            .ssl_manager()
+            ->DidDisplayMixedContent();
       break;
 
     case blink::WebMixedContentContextType::kNotMixedContent:
@@ -366,7 +372,7 @@
 
   NavigationRequest* request = NavigationRequest::From(navigation_handle());
   RenderFrameHostImpl* rfh = request->frame_tree_node()->current_frame_host();
-  rfh->delegate()->RecordActiveContentWithCertificateErrors(rfh);
+  rfh->OnDidRunContentWithCertificateErrors();
 }
 
 // static
diff --git a/content/browser/renderer_host/navigation_controller_delegate.h b/content/browser/renderer_host/navigation_controller_delegate.h
index 86189f4..d83ea93 100644
--- a/content/browser/renderer_host/navigation_controller_delegate.h
+++ b/content/browser/renderer_host/navigation_controller_delegate.h
@@ -25,7 +25,6 @@
   virtual ~NavigationControllerDelegate() {}
 
   // Duplicates of WebContents methods.
-  virtual const std::string& GetContentsMimeType() = 0;
   virtual void NotifyNavigationStateChanged(InvalidateTypes changed_flags) = 0;
   virtual void Stop() = 0;
   virtual bool IsBeingDestroyed() = 0;
@@ -40,10 +39,7 @@
   virtual void NotifyNavigationListPruned(
       const PrunedDetails& pruned_details) = 0;
   virtual void NotifyNavigationEntriesDeleted() = 0;
-  virtual void SetHistoryOffsetAndLength(int history_offset,
-                                         int history_length) = 0;
   virtual void ActivateAndShowRepostFormWarningDialog() = 0;
-  virtual bool HasAccessedInitialDocument() = 0;
 
   // Returns whether URLs for aborted browser-initiated navigations should be
   // preserved in the omnibox.  Defaults to false.
diff --git a/content/browser/renderer_host/navigation_controller_impl.cc b/content/browser/renderer_host/navigation_controller_impl.cc
index 12f5a1a1..06c72a8 100644
--- a/content/browser/renderer_host/navigation_controller_impl.cc
+++ b/content/browser/renderer_host/navigation_controller_impl.cc
@@ -46,6 +46,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "base/trace_event/optional_trace_event.h"
+#include "base/trace_event/trace_conversion_helper.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "cc/base/switches.h"
@@ -92,6 +93,7 @@
 #include "skia/ext/platform_canvas.h"
 #include "third_party/blink/public/common/blob/blob_utils.h"
 #include "third_party/blink/public/common/mime_util/mime_util.h"
+#include "third_party/blink/public/common/page_state/page_state_serialization.h"
 #include "url/url_constants.h"
 
 namespace content {
@@ -810,7 +812,10 @@
 }
 
 bool NavigationControllerImpl::CanViewSource() {
-  const std::string& mime_type = delegate_->GetContentsMimeType();
+  const std::string& mime_type = frame_tree_.root()
+                                     ->render_manager()
+                                     ->current_host()
+                                     ->contents_mime_type();
   bool is_viewable_mime_type = blink::IsSupportedNonImageMimeType(mime_type) &&
                                !media::IsSupportedMediaMimeType(mime_type);
   NavigationEntry* visible_entry = GetVisibleEntry();
@@ -2101,8 +2106,7 @@
   // Adjust indices such that the last entry and pending are at the end now.
   last_committed_entry_index_ = GetEntryCount() - 1;
 
-  delegate_->SetHistoryOffsetAndLength(last_committed_entry_index_,
-                                       GetEntryCount());
+  SetHistoryOffsetAndLength(last_committed_entry_index_, GetEntryCount());
 }
 
 bool NavigationControllerImpl::CanPruneAllButLastCommitted() {
@@ -2128,8 +2132,7 @@
   DCHECK_EQ(0, last_committed_entry_index_);
   DCHECK_EQ(1, GetEntryCount());
 
-  delegate_->SetHistoryOffsetAndLength(last_committed_entry_index_,
-                                       GetEntryCount());
+  SetHistoryOffsetAndLength(last_committed_entry_index_, GetEntryCount());
 }
 
 void NavigationControllerImpl::PruneAllButLastCommittedInternal() {
@@ -2165,8 +2168,7 @@
     for (auto it = delete_indices.rbegin(); it != delete_indices.rend(); ++it) {
       RemoveEntryAtIndex(*it);
     }
-    delegate_->SetHistoryOffsetAndLength(last_committed_entry_index_,
-                                         GetEntryCount());
+    SetHistoryOffsetAndLength(last_committed_entry_index_, GetEntryCount());
   }
   delegate()->NotifyNavigationEntriesDeleted();
 }
@@ -2486,7 +2488,7 @@
 
 bool NavigationControllerImpl::IsUnmodifiedBlankTab() {
   return IsInitialNavigation() && !GetLastCommittedEntry() &&
-         !delegate_->HasAccessedInitialDocument();
+         !frame_tree_.has_accessed_initial_main_document();
 }
 
 SessionStorageNamespace* NavigationControllerImpl::GetSessionStorageNamespace(
@@ -3901,4 +3903,81 @@
       request->policy_container_host()->document_policies());
 }
 
+void NavigationControllerImpl::SetHistoryOffsetAndLength(int history_offset,
+                                                         int history_length) {
+  OPTIONAL_TRACE_EVENT2(
+      "content", "NavigationControllerImpl::SetHistoryOffsetAndLength",
+      "history_offset", history_offset, "history_length", history_length);
+
+  auto callback = base::BindRepeating(
+      [](int history_offset, int history_length, RenderViewHostImpl* rvh) {
+        if (auto& broadcast = rvh->GetAssociatedPageBroadcast()) {
+          broadcast->SetHistoryOffsetAndLength(history_offset, history_length);
+        }
+      },
+      history_offset, history_length);
+  frame_tree_.root()->render_manager()->ExecutePageBroadcastMethod(callback);
+}
+
+void NavigationControllerImpl::DidAccessInitialMainDocument() {
+  // We may have left a failed browser-initiated navigation in the address bar
+  // to let the user edit it and try again.  Clear it now that content might
+  // show up underneath it.
+  if (!frame_tree_.IsLoading() && GetPendingEntry())
+    DiscardPendingEntry(false);
+
+  // Update the URL display.
+  delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
+}
+
+void NavigationControllerImpl::UpdateStateForFrame(
+    RenderFrameHostImpl* rfhi,
+    const blink::PageState& page_state) {
+  OPTIONAL_TRACE_EVENT1(
+      "content", "NavigationControllerImpl::UpdateStateForFrame",
+      "render_frame_host", base::trace_event::ToTracedValue(rfhi));
+  // The state update affects the last NavigationEntry associated with the given
+  // |render_frame_host|. This may not be the last committed NavigationEntry (as
+  // in the case of an UpdateState from a frame being swapped out). We track
+  // which entry this is in the RenderFrameHost's nav_entry_id.
+  NavigationEntryImpl* entry = GetEntryWithUniqueID(rfhi->nav_entry_id());
+  if (!entry)
+    return;
+
+  FrameNavigationEntry* frame_entry =
+      entry->GetFrameEntry(rfhi->frame_tree_node());
+  if (!frame_entry)
+    return;
+
+  // The SiteInstance might not match if we do a cross-process navigation with
+  // replacement (e.g., auto-subframe), in which case the swap out of the old
+  // RenderFrameHost runs in the background after the old FrameNavigationEntry
+  // has already been replaced and destroyed.
+  if (frame_entry->site_instance() != rfhi->GetSiteInstance())
+    return;
+
+  if (page_state == frame_entry->page_state())
+    return;  // Nothing to update.
+
+  DCHECK(page_state.IsValid()) << "Shouldn't set an empty PageState.";
+
+  // The document_sequence_number and item_sequence_number recorded in the
+  // FrameNavigationEntry should not differ from the one coming with the update,
+  // since it must come from the same document. Do not update it if a difference
+  // is detected, as this indicates that |frame_entry| is not the correct one.
+  blink::ExplodedPageState exploded_state;
+  if (!blink::DecodePageState(page_state.ToEncodedData(), &exploded_state))
+    return;
+
+  if (exploded_state.top.document_sequence_number !=
+          frame_entry->document_sequence_number() ||
+      exploded_state.top.item_sequence_number !=
+          frame_entry->item_sequence_number()) {
+    return;
+  }
+
+  frame_entry->SetPageState(page_state);
+  NotifyEntryChanged(entry);
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/navigation_controller_impl.h b/content/browser/renderer_host/navigation_controller_impl.h
index 84da04c8..ce5be74 100644
--- a/content/browser/renderer_host/navigation_controller_impl.h
+++ b/content/browser/renderer_host/navigation_controller_impl.h
@@ -285,6 +285,8 @@
 
   // Random data ---------------------------------------------------------------
 
+  FrameTree& frame_tree() { return frame_tree_; }
+
   SSLManager* ssl_manager() { return &ssl_manager_; }
 
   // Maximum number of entries before we start removing entries from the front.
@@ -320,6 +322,14 @@
   // requests corresponding to the current pending entry.
   std::unique_ptr<PendingEntryRef> ReferencePendingEntry();
 
+  // Another page accessed the initial empty main document, which means it
+  // is no longer safe to display a pending URL without risking a URL spoof.
+  void DidAccessInitialMainDocument();
+
+  // The state for the page changed and should be updated in session history.
+  void UpdateStateForFrame(RenderFrameHostImpl* render_frame_host,
+                           const blink::PageState& page_state);
+
   // Like NavigationController::CreateNavigationEntry, but takes extra arguments
   // like |source_site_instance| and |should_replace_entry|. |web_contents| is
   // the WebContents that will contain the NavigationEntry, and may be null.
@@ -613,6 +623,11 @@
                                        bool is_same_document,
                                        NavigationRequest* request);
 
+  // Sets the history to |history_length| entries, with an offset of
+  // |history_offset|. This notifies all renderers involved in rendering the
+  // current page about the new offset and length.
+  void SetHistoryOffsetAndLength(int history_offset, int history_length);
+
   // ---------------------------------------------------------------------------
 
   // The FrameTree this instance belongs to. Each FrameTree gets its own
diff --git a/content/browser/renderer_host/navigation_controller_impl_unittest.cc b/content/browser/renderer_host/navigation_controller_impl_unittest.cc
index 4c7c4cd..f32cb96 100644
--- a/content/browser/renderer_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/renderer_host/navigation_controller_impl_unittest.cc
@@ -48,8 +48,12 @@
 #include "content/test/test_render_frame_host.h"
 #include "content/test/test_render_view_host.h"
 #include "content/test/test_web_contents.h"
+#include "mojo/public/cpp/bindings/associated_remote.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "services/network/public/cpp/resource_request_body.h"
 #include "skia/ext/platform_canvas.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/frame/frame_policy.h"
 #include "third_party/blink/public/common/loader/previews_state.h"
@@ -88,6 +92,41 @@
                 a_bitmap.computeByteSize()) == 0;
 }
 
+class MockPageBroadcast : public blink::mojom::PageBroadcast {
+ public:
+  explicit MockPageBroadcast() : receiver_(this) {}
+
+  ~MockPageBroadcast() override { receiver_.FlushForTesting(); }
+
+  MOCK_METHOD(void,
+              SetPageLifecycleState,
+              (blink::mojom::PageLifecycleStatePtr state,
+               blink::mojom::PageRestoreParamsPtr page_restore_params,
+               SetPageLifecycleStateCallback callback),
+              (override));
+  MOCK_METHOD(void, AudioStateChanged, (bool is_audio_playing), (override));
+  MOCK_METHOD(void, SetInsidePortal, (bool is_inside_portal), (override));
+  MOCK_METHOD(void,
+              UpdateWebPreferences,
+              (const ::blink::web_pref::WebPreferences& preferences),
+              (override));
+  MOCK_METHOD(void,
+              UpdateRendererPreferences,
+              (const ::blink::RendererPreferences& preferences),
+              (override));
+  MOCK_METHOD(void,
+              SetHistoryOffsetAndLength,
+              (int32_t offset, int32_t length),
+              (override));
+
+  mojo::PendingAssociatedRemote<blink::mojom::PageBroadcast> GetRemote() {
+    return receiver_.BindNewEndpointAndPassDedicatedRemote();
+  }
+
+ private:
+  mojo::AssociatedReceiver<blink::mojom::PageBroadcast> receiver_;
+};
+
 }  // namespace
 
 namespace content {
@@ -3265,7 +3304,10 @@
       static_cast<TestWebContents*>(CreateTestWebContents().release()));
   NavigationControllerImpl& other_controller = other_contents->GetController();
   other_contents->NavigateAndCommit(url3);
-  other_contents->ExpectSetHistoryOffsetAndLength(2, 3);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(2, 3));
   other_controller.CopyStateFromAndPrune(&controller, false);
 
   // other_controller should now contain the 3 urls: url1, url2 and url3.
@@ -3303,7 +3345,10 @@
       static_cast<TestWebContents*>(CreateTestWebContents().release()));
   NavigationControllerImpl& other_controller = other_contents->GetController();
   other_contents->NavigateAndCommit(url3);
-  other_contents->ExpectSetHistoryOffsetAndLength(1, 2);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(1, 2));
   other_controller.CopyStateFromAndPrune(&controller, false);
 
   // other_controller should now contain: url1, url3
@@ -3332,7 +3377,10 @@
   NavigationControllerImpl& other_controller = other_contents->GetController();
   other_contents->NavigateAndCommit(url3);
   other_contents->NavigateAndCommit(url4);
-  other_contents->ExpectSetHistoryOffsetAndLength(2, 3);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(2, 3));
   other_controller.CopyStateFromAndPrune(&controller, false);
 
   // other_controller should now contain: url1, url2, url4
@@ -3364,7 +3412,10 @@
   other_contents->NavigateAndCommit(url4);
   other_controller.GoBack();
   other_contents->CommitPendingNavigation();
-  other_contents->ExpectSetHistoryOffsetAndLength(2, 3);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(2, 3));
   other_controller.CopyStateFromAndPrune(&controller, false);
 
   // other_controller should now contain: url1, url2, url3
@@ -3397,7 +3448,10 @@
   other_contents->NavigateAndCommit(url3);
   other_controller.LoadURL(url4, Referrer(), ui::PAGE_TRANSITION_TYPED,
                            std::string());
-  other_contents->ExpectSetHistoryOffsetAndLength(1, 2);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(1, 2));
   other_controller.CopyStateFromAndPrune(&controller, false);
 
   // other_controller should now contain url1, url3, and a pending entry
@@ -3433,7 +3487,10 @@
   other_controller.LoadURL(url2b, Referrer(), ui::PAGE_TRANSITION_LINK,
                            std::string());
 
-  other_contents->ExpectSetHistoryOffsetAndLength(1, 2);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(1, 2));
   other_controller.CopyStateFromAndPrune(&controller, false);
 
   // other_controller should now contain url1, url2a, and a pending entry
@@ -3470,7 +3527,10 @@
       static_cast<TestWebContents*>(CreateTestWebContents().release()));
   NavigationControllerImpl& other_controller = other_contents->GetController();
   other_contents->NavigateAndCommit(url3);
-  other_contents->ExpectSetHistoryOffsetAndLength(2, 3);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(2, 3));
   other_controller.CopyStateFromAndPrune(&controller, false);
 
   // other_controller should now contain: url1, url2, url3
@@ -3506,29 +3566,39 @@
   ASSERT_EQ(5, controller.GetEntryCount());
   ASSERT_EQ(4, controller.GetCurrentEntryIndex());
 
-  // Delete url2 and url4.
-  contents()->ExpectSetHistoryOffsetAndLength(2, 3);
-  controller.DeleteNavigationEntries(
-      base::BindLambdaForTesting([&](content::NavigationEntry* entry) {
-        return entry->GetURL() == url2 || entry->GetURL() == url4;
-      }));
-  EXPECT_EQ(1U, navigation_entries_deleted_counter_);
-  ASSERT_EQ(3, controller.GetEntryCount());
-  ASSERT_EQ(2, controller.GetCurrentEntryIndex());
-  EXPECT_EQ(url1, controller.GetEntryAtIndex(0)->GetURL());
-  EXPECT_EQ(url3, controller.GetEntryAtIndex(1)->GetURL());
-  EXPECT_EQ(url5, controller.GetEntryAtIndex(2)->GetURL());
-  EXPECT_TRUE(controller.CanGoBack());
+  {
+    // Delete url2 and url4.
+    testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+    contents()->GetRenderViewHost()->BindPageBroadcast(
+        mock_page_broadcast.GetRemote());
+    EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(2, 3));
+    controller.DeleteNavigationEntries(
+        base::BindLambdaForTesting([&](content::NavigationEntry* entry) {
+          return entry->GetURL() == url2 || entry->GetURL() == url4;
+        }));
+    EXPECT_EQ(1U, navigation_entries_deleted_counter_);
+    ASSERT_EQ(3, controller.GetEntryCount());
+    ASSERT_EQ(2, controller.GetCurrentEntryIndex());
+    EXPECT_EQ(url1, controller.GetEntryAtIndex(0)->GetURL());
+    EXPECT_EQ(url3, controller.GetEntryAtIndex(1)->GetURL());
+    EXPECT_EQ(url5, controller.GetEntryAtIndex(2)->GetURL());
+    EXPECT_TRUE(controller.CanGoBack());
+  }
 
-  // Delete url1 and url3.
-  contents()->ExpectSetHistoryOffsetAndLength(0, 1);
-  controller.DeleteNavigationEntries(base::BindRepeating(
-      [](content::NavigationEntry* entry) { return true; }));
-  EXPECT_EQ(2U, navigation_entries_deleted_counter_);
-  ASSERT_EQ(1, controller.GetEntryCount());
-  ASSERT_EQ(0, controller.GetCurrentEntryIndex());
-  EXPECT_EQ(url5, controller.GetEntryAtIndex(0)->GetURL());
-  EXPECT_FALSE(controller.CanGoBack());
+  {
+    // Delete url1 and url3.
+    testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+    contents()->GetRenderViewHost()->BindPageBroadcast(
+        mock_page_broadcast.GetRemote());
+    EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(0, 1));
+    controller.DeleteNavigationEntries(base::BindRepeating(
+        [](content::NavigationEntry* entry) { return true; }));
+    EXPECT_EQ(2U, navigation_entries_deleted_counter_);
+    ASSERT_EQ(1, controller.GetEntryCount());
+    ASSERT_EQ(0, controller.GetCurrentEntryIndex());
+    EXPECT_EQ(url5, controller.GetEntryAtIndex(0)->GetURL());
+    EXPECT_FALSE(controller.CanGoBack());
+  }
 
   // No pruned notifications should be send.
   EXPECT_EQ(0U, navigation_list_pruned_counter_);
@@ -3556,7 +3626,10 @@
       static_cast<TestWebContents*>(CreateTestWebContents().release()));
   NavigationControllerImpl& other_controller = other_contents->GetController();
   other_contents->NavigateAndCommit(url4);
-  other_contents->ExpectSetHistoryOffsetAndLength(2, 3);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(2, 3));
   other_controller.CopyStateFromAndPrune(&controller, false);
 
   // We should have received a pruned notification.
@@ -3604,7 +3677,10 @@
       static_cast<TestWebContents*>(CreateTestWebContents().release()));
   NavigationControllerImpl& other_controller = other_contents->GetController();
   other_contents->NavigateAndCommit(url3);
-  other_contents->ExpectSetHistoryOffsetAndLength(1, 2);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(1, 2));
   other_controller.CopyStateFromAndPrune(&controller, true);
 
   // other_controller should now contain the 2 urls: url1 and url3.
@@ -3646,7 +3722,10 @@
       static_cast<TestWebContents*>(CreateTestWebContents().release()));
   NavigationControllerImpl& other_controller = other_contents->GetController();
   other_contents->NavigateAndCommit(url4);
-  other_contents->ExpectSetHistoryOffsetAndLength(2, 3);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  other_contents->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(2, 3));
   other_controller.CopyStateFromAndPrune(&controller, true);
 
   // We should have received no pruned notification.
@@ -3696,10 +3775,15 @@
   source_contents->CommitPendingNavigation();
 
   // Load a page, then copy state from |source_contents|.
-  NavigateAndCommit(kInitialUrl);
-  contents()->ExpectSetHistoryOffsetAndLength(2, 3);
-  controller_impl().CopyStateFromAndPrune(&source_controller, false);
-  ASSERT_EQ(3, controller_impl().GetEntryCount());
+  {
+    NavigateAndCommit(kInitialUrl);
+    testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+    contents()->GetRenderViewHost()->BindPageBroadcast(
+        mock_page_broadcast.GetRemote());
+    EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(2, 3));
+    controller_impl().CopyStateFromAndPrune(&source_controller, false);
+    ASSERT_EQ(3, controller_impl().GetEntryCount());
+  }
 
   // Go back to the first entry one at a time and
   // verify that it works as expected.
@@ -3735,7 +3819,7 @@
   process()->sink().ClearMessages();
 
   // Simulate the page calling history.back(). It should create a pending entry.
-  contents()->OnGoToEntryAtOffset(main_test_rfh(), -1, false);
+  main_test_rfh()->GoToEntryAtOffset(-1, false);
   EXPECT_EQ(0, controller.GetPendingEntryIndex());
 
   // Also make sure we told the page to navigate.
@@ -3745,7 +3829,7 @@
   process()->sink().ClearMessages();
 
   // Now test history.forward()
-  contents()->OnGoToEntryAtOffset(main_test_rfh(), 2, false);
+  main_test_rfh()->GoToEntryAtOffset(2, false);
   EXPECT_EQ(2, controller.GetPendingEntryIndex());
 
   nav_url = GetLastNavigationURL();
@@ -3756,8 +3840,7 @@
   controller.DiscardNonCommittedEntries();
 
   // Make sure an extravagant history.go() doesn't break.
-  contents()->OnGoToEntryAtOffset(main_test_rfh(), 120,
-                                  false);  // Out of bounds.
+  main_test_rfh()->GoToEntryAtOffset(120, false);  // Out of bounds.
   EXPECT_EQ(-1, controller.GetPendingEntryIndex());
   EXPECT_FALSE(HasNavigationRequest());
 }
@@ -3768,8 +3851,10 @@
   const GURL url1("http://foo1");
   NavigateAndCommit(url1);
 
-  contents()->ExpectSetHistoryOffsetAndLength(0, 1);
-
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  contents()->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(0, 1));
   controller.PruneAllButLastCommitted();
 
   EXPECT_EQ(-1, controller.GetPendingEntryIndex());
@@ -3790,7 +3875,10 @@
   controller.GoBack();
   contents()->CommitPendingNavigation();
 
-  contents()->ExpectSetHistoryOffsetAndLength(0, 1);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  contents()->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(0, 1));
 
   controller.PruneAllButLastCommitted();
 
@@ -3811,7 +3899,10 @@
   controller.GoBack();
   contents()->CommitPendingNavigation();
 
-  contents()->ExpectSetHistoryOffsetAndLength(0, 1);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  contents()->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(0, 1));
 
   controller.PruneAllButLastCommitted();
 
@@ -3837,7 +3928,10 @@
   EXPECT_TRUE(controller.GetPendingEntry());
   EXPECT_EQ(2, controller.GetEntryCount());
 
-  contents()->ExpectSetHistoryOffsetAndLength(0, 1);
+  testing::NiceMock<MockPageBroadcast> mock_page_broadcast;
+  contents()->GetRenderViewHost()->BindPageBroadcast(
+      mock_page_broadcast.GetRemote());
+  EXPECT_CALL(mock_page_broadcast, SetHistoryOffsetAndLength(0, 1));
   controller.PruneAllButLastCommitted();
 
   // We should only have the last committed and pending entries at this point,
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index 72bbdfaa..217033e 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -1575,7 +1575,7 @@
   // Prerender2:
   // Find an available prerendered page for the request URL. If it's found,
   // this navigation will activate it instead of loading a page via network.
-  if (base::FeatureList::IsEnabled(blink::features::kPrerender2)) {
+  if (blink::features::IsPrerender2Enabled()) {
     auto* storage_partition_impl = static_cast<StoragePartitionImpl*>(
         frame_tree_node_->current_frame_host()->GetStoragePartition());
     PrerenderHostRegistry* prerender_host_registry =
@@ -2388,56 +2388,53 @@
 
   auto cross_origin_embedder_policy =
       response_head_->parsed_headers->cross_origin_embedder_policy;
-  if (base::FeatureList::IsEnabled(
-          network::features::kCrossOriginEmbedderPolicy)) {
-    const auto& url = common_params_->url;
-    if (network::IsUrlPotentiallyTrustworthy(url)) {
-      // https://mikewest.github.io/corpp/#process-navigation-response
-      if (auto* const parent = GetParentFrame()) {
-        const auto& parent_coep = parent->cross_origin_embedder_policy();
-        constexpr auto kRequireCorp =
-            network::mojom::CrossOriginEmbedderPolicyValue::kRequireCorp;
-        constexpr auto kNone =
-            network::mojom::CrossOriginEmbedderPolicyValue::kNone;
+  const auto& url = common_params_->url;
+  if (network::IsUrlPotentiallyTrustworthy(url)) {
+    // https://mikewest.github.io/corpp/#process-navigation-response
+    if (auto* const parent = GetParentFrame()) {
+      const auto& parent_coep = parent->cross_origin_embedder_policy();
+      constexpr auto kRequireCorp =
+          network::mojom::CrossOriginEmbedderPolicyValue::kRequireCorp;
+      constexpr auto kNone =
+          network::mojom::CrossOriginEmbedderPolicyValue::kNone;
 
-        // Some special URLs not loaded using the network are inheriting the
-        // Cross-Origin-Embedder-Policy header from their parent.
-        const bool has_allowed_scheme =
-            url.SchemeIsBlob() || url.SchemeIs(url::kDataScheme) ||
-            GetContentClient()
-                ->browser()
-                ->ShouldInheritCrossOriginEmbedderPolicyImplicitly(url);
-        if (parent_coep.value == kRequireCorp && has_allowed_scheme) {
-          cross_origin_embedder_policy.value = kRequireCorp;
-        }
-
-        auto* const coep_reporter = parent->coep_reporter();
-        if (parent_coep.report_only_value == kRequireCorp &&
-            !has_allowed_scheme &&
-            cross_origin_embedder_policy.value == kNone && coep_reporter) {
-          coep_reporter->QueueNavigationReport(redirect_chain_[0],
-                                               /*report_only=*/true);
-        }
-        if (parent_coep.value == kRequireCorp &&
-            cross_origin_embedder_policy.value == kNone) {
-          if (coep_reporter) {
-            coep_reporter->QueueNavigationReport(redirect_chain_[0],
-                                                 /*report_only=*/false);
-          }
-          OnRequestFailedInternal(network::URLLoaderCompletionStatus(
-                                      network::mojom::BlockedByResponseReason::
-                                          kCoepFrameResourceNeedsCoepHeader),
-                                  false /* skip_throttles */,
-                                  base::nullopt /* error_page_content */,
-                                  false /* collapse_frame */);
-          // DO NOT ADD CODE after this. The previous call to
-          // OnRequestFailedInternal has destroyed the NavigationRequest.
-          return;
-        }
+      // Some special URLs not loaded using the network are inheriting the
+      // Cross-Origin-Embedder-Policy header from their parent.
+      const bool has_allowed_scheme =
+          url.SchemeIsBlob() || url.SchemeIs(url::kDataScheme) ||
+          GetContentClient()
+              ->browser()
+              ->ShouldInheritCrossOriginEmbedderPolicyImplicitly(url);
+      if (parent_coep.value == kRequireCorp && has_allowed_scheme) {
+        cross_origin_embedder_policy.value = kRequireCorp;
       }
-    } else {
-      cross_origin_embedder_policy = network::CrossOriginEmbedderPolicy();
+
+      auto* const coep_reporter = parent->coep_reporter();
+      if (parent_coep.report_only_value == kRequireCorp &&
+          !has_allowed_scheme && cross_origin_embedder_policy.value == kNone &&
+          coep_reporter) {
+        coep_reporter->QueueNavigationReport(redirect_chain_[0],
+                                             /*report_only=*/true);
+      }
+      if (parent_coep.value == kRequireCorp &&
+          cross_origin_embedder_policy.value == kNone) {
+        if (coep_reporter) {
+          coep_reporter->QueueNavigationReport(redirect_chain_[0],
+                                               /*report_only=*/false);
+        }
+        OnRequestFailedInternal(network::URLLoaderCompletionStatus(
+                                    network::mojom::BlockedByResponseReason::
+                                        kCoepFrameResourceNeedsCoepHeader),
+                                false /* skip_throttles */,
+                                base::nullopt /* error_page_content */,
+                                false /* collapse_frame */);
+        // DO NOT ADD CODE after this. The previous call to
+        // OnRequestFailedInternal has destroyed the NavigationRequest.
+        return;
+      }
     }
+  } else {
+    cross_origin_embedder_policy = network::CrossOriginEmbedderPolicy();
   }
 
   // Select an appropriate renderer to commit the navigation.
@@ -3383,8 +3380,7 @@
     return;
   }
 
-  if (base::FeatureList::IsEnabled(blink::features::kPrerender2) &&
-      IsPrerenderedPageActivation()) {
+  if (blink::features::IsPrerender2Enabled() && IsPrerenderedPageActivation()) {
     RenderFrameHostImpl* current_frame_host =
         frame_tree_node_->current_frame_host();
     DCHECK(!current_frame_host->GetParent());
@@ -5380,10 +5376,6 @@
 
 base::Optional<network::mojom::BlockedByResponseReason>
 NavigationRequest::EnforceCOEP() {
-  if (!base::FeatureList::IsEnabled(
-          network::features::kCrossOriginEmbedderPolicy)) {
-    return base::nullopt;
-  }
   // https://html.spec.whatwg.org/#check-a-navigation-response's-adherence-to-its-embedder-policy
   auto* parent_frame = GetParentFrame();
   if (!parent_frame) {
diff --git a/content/browser/renderer_host/navigator.cc b/content/browser/renderer_host/navigator.cc
index f9fe438..ff48b01 100644
--- a/content/browser/renderer_host/navigator.cc
+++ b/content/browser/renderer_host/navigator.cc
@@ -229,6 +229,7 @@
   DCHECK(navigation_request);
   FrameTreeNode* frame_tree_node = render_frame_host->frame_tree_node();
   FrameTree* frame_tree = frame_tree_node->frame_tree();
+  DCHECK_EQ(frame_tree, &controller_.frame_tree());
   base::WeakPtr<RenderFrameHostImpl> old_frame_host =
       frame_tree_node->render_manager()->current_frame_host()->GetWeakPtr();
 
@@ -432,6 +433,10 @@
   // TODO(carlosk): Move this out.
   RecordNavigationMetrics(details, params, site_instance);
 
+  // Now that something has committed, we don't need to track whether the
+  // initial page has been accessed.
+  frame_tree->ResetHasAccessedInitialMainDocument();
+
   // Run post-commit tasks.
   if (delegate_) {
     if (details.is_main_frame) {
@@ -452,6 +457,7 @@
       TRACE_EVENT_SCOPE_GLOBAL, request->common_params().navigation_start);
 
   FrameTreeNode* frame_tree_node = request->frame_tree_node();
+  DCHECK_EQ(frame_tree_node->frame_tree(), &controller_.frame_tree());
 
   navigation_data_ = std::make_unique<NavigationMetricsData>(
       request->common_params().navigation_start, request->common_params().url,
diff --git a/content/browser/renderer_host/render_frame_host_delegate.cc b/content/browser/renderer_host/render_frame_host_delegate.cc
index 1cc5bf8..4db440e 100644
--- a/content/browser/renderer_host/render_frame_host_delegate.cc
+++ b/content/browser/renderer_host/render_frame_host_delegate.cc
@@ -200,4 +200,8 @@
   return std::vector<RenderFrameHostImpl*>();
 }
 
+bool RenderFrameHostDelegate::IsAllowedToGoToEntryAtOffset(int32_t offset) {
+  return true;
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/render_frame_host_delegate.h b/content/browser/renderer_host/render_frame_host_delegate.h
index 098db59..9085cdb 100644
--- a/content/browser/renderer_host/render_frame_host_delegate.h
+++ b/content/browser/renderer_host/render_frame_host_delegate.h
@@ -195,10 +195,6 @@
   // The pending page load was canceled, so the address bar should be updated.
   virtual void DidCancelLoading() {}
 
-  // Another page accessed the top-level initial empty document, which means it
-  // is no longer safe to display a pending URL without risking a URL spoof.
-  virtual void DidAccessInitialDocument() {}
-
   // The frame changed its window.name property.
   virtual void DidChangeName(RenderFrameHost* render_frame_host,
                              const std::string& name) {}
@@ -224,10 +220,6 @@
   // level frame.
   virtual void DocumentOnLoadCompleted(RenderFrameHost* render_frame_host) {}
 
-  // The state for the page changed and should be updated in session history.
-  virtual void UpdateStateForFrame(RenderFrameHost* render_frame_host,
-                                   const blink::PageState& page_state) {}
-
   // The page's title was changed and should be updated. Only called for the
   // top-level frame.
   virtual void UpdateTitle(RenderFrameHost* render_frame_host,
@@ -419,14 +411,9 @@
                                  const gfx::Rect& initial_rect,
                                  bool user_gesture) {}
 
-  // Notified that mixed content was displayed or ran.
-  virtual void DidDisplayInsecureContent() {}
-  virtual void DidContainInsecureFormAction() {}
   // The main frame document element is ready. This happens when the document
   // has finished parsing.
   virtual void DocumentAvailableInMainFrame() {}
-  virtual void DidRunInsecureContent(const GURL& security_origin,
-                                     const GURL& target_url) {}
 
   // Reports that passive mixed content was found at the specified url.
   virtual void PassiveInsecureContentFound(const GURL& resource_url) {}
@@ -436,11 +423,6 @@
                                                  const url::Origin& origin,
                                                  const GURL& resource_url);
 
-  // Notifies that content with certificate errors will be committed in a
-  // subframe.
-  virtual void RecordActiveContentWithCertificateErrors(
-      RenderFrameHostImpl* render_frame_host) {}
-
   // Opens a new view-source tab for the last committed document in |frame|.
   virtual void ViewSource(RenderFrameHostImpl* frame) {}
 
@@ -454,8 +436,7 @@
   virtual bool IsBeingDestroyed();
 
   // Notified that the render frame started loading a subresource.
-  virtual void SubresourceResponseStarted(const GURL& url,
-                                          net::CertStatus cert_status) {}
+  virtual void SubresourceResponseStarted() {}
 
   // Notified that the render finished loading a subresource for the frame
   // associated with |render_frame_host|.
@@ -533,11 +514,9 @@
                                          const GURL& url,
                                          bool user_gesture) {}
 
-  // Go to the session history entry at the given offset (ie, -1 will return the
-  // "back" item).
-  virtual void OnGoToEntryAtOffset(RenderFrameHostImpl* source,
-                                   int32_t offset,
-                                   bool has_user_gesture) {}
+  // Returns true if the delegate allows to go to the session history entry at
+  // the given offset (ie, -1 will return the "back" item).
+  virtual bool IsAllowedToGoToEntryAtOffset(int32_t offset);
 
   virtual media::MediaMetricsProvider::RecordAggregateWatchTimeCallback
   GetRecordAggregateWatchTimeCallback();
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index c2b53ba5..0365c6c 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -35,6 +35,7 @@
 #include "base/task/post_task.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
+#include "base/trace_event/optional_trace_event.h"
 #include "base/trace_event/trace_conversion_helper.h"
 #include "base/trace_event/traced_value.h"
 #include "build/build_config.h"
@@ -319,6 +320,8 @@
 // WebView, WebLayer, Fuchsia web.ContextProvider and CastOS content shell.
 bool g_allow_injecting_javascript = false;
 
+const char kDotGoogleDotCom[] = ".google.com";
+
 typedef std::unordered_map<GlobalFrameRoutingId,
                            RenderFrameHostImpl*,
                            GlobalFrameRoutingIdHasher>
@@ -2567,6 +2570,14 @@
 
   delegate_->RenderFrameCreated(this);
 
+  if (IsRenderFrameLive() && is_main_frame()) {
+    NavigationEntry* entry = frame_tree_->controller().GetPendingEntry();
+    if (entry && entry->IsViewSourceMode()) {
+      // Put the renderer in view source mode.
+      GetAssociatedLocalFrame()->EnableViewSourceMode();
+    }
+  }
+
   if (enabled_bindings_)
     GetFrameBindingsControl()->AllowBindings(enabled_bindings_);
 
@@ -3941,8 +3952,8 @@
         })");
   std::unique_ptr<download::DownloadUrlParameters> parameters(
       new download::DownloadUrlParameters(blink_parameters->url,
-                                          GetProcess()->GetID(),
-                                          GetRoutingID(), traffic_annotation));
+                                          GetProcess()->GetID(), GetRoutingID(),
+                                          traffic_annotation));
   parameters->set_content_initiated(!blink_parameters->is_context_menu_save);
   parameters->set_suggested_name(
       blink_parameters->suggested_name.value_or(base::string16()));
@@ -4236,8 +4247,11 @@
   GetAssociatedLocalFrame()->NotifyUserActivation(notification_type);
 }
 
+// TODO(https://crbug.com/1170277):  Move this IPC to LocalMainFrameHost
+// interface
 void RenderFrameHostImpl::DidAccessInitialDocument() {
-  delegate_->DidAccessInitialDocument();
+  if (is_main_frame())
+    frame_tree_->DidAccessInitialMainDocument();
 }
 
 void RenderFrameHostImpl::DidChangeName(const std::string& name,
@@ -4361,11 +4375,11 @@
 }
 
 void RenderFrameHostImpl::DidDisplayInsecureContent() {
-  delegate_->DidDisplayInsecureContent();
+  frame_tree_->controller().ssl_manager()->DidDisplayMixedContent();
 }
 
 void RenderFrameHostImpl::DidContainInsecureFormAction() {
-  delegate_->DidContainInsecureFormAction();
+  frame_tree_->controller().ssl_manager()->DidContainInsecureFormAction();
 }
 
 void RenderFrameHostImpl::DocumentAvailableInMainFrame(
@@ -4553,7 +4567,32 @@
 
 void RenderFrameHostImpl::GoToEntryAtOffset(int32_t offset,
                                             bool has_user_gesture) {
-  delegate_->OnGoToEntryAtOffset(this, offset, has_user_gesture);
+  OPTIONAL_TRACE_EVENT2(
+      "content", "RenderFrameHostImpl::GoToEntryAtOffset", "render_frame_host",
+      base::trace_event::ToTracedValue(this), "offset", offset);
+
+  // Non-user initiated navigations coming from the renderer should be ignored
+  // if there is an ongoing browser-initiated navigation.
+  // See https://crbug.com/879965.
+  // TODO(arthursonzogni): See if this should check for ongoing navigations in
+  // the frame(s) affected by the session history navigation, rather than just
+  // the main frame.
+  if (Navigator::ShouldIgnoreIncomingRendererRequest(
+          frame_tree_->root()->navigation_request(), has_user_gesture)) {
+    return;
+  }
+
+  // All frames are allowed to navigate the global history.
+  if (delegate_->IsAllowedToGoToEntryAtOffset(offset)) {
+    if (IsSandboxed(network::mojom::WebSandboxFlags::kTopNavigation)) {
+      // Keep track of whether this is a session history from a sandboxed iframe
+      // with top level navigation disallowed.
+      frame_tree_->controller().GoToOffsetInSandboxedFrame(
+          offset, GetFrameTreeNodeId());
+    } else {
+      frame_tree_->controller().GoToOffset(offset);
+    }
+  }
 }
 
 void RenderFrameHostImpl::HandleAccessibilityFindInPageResult(
@@ -5185,6 +5224,9 @@
 }
 
 void RenderFrameHostImpl::UpdateState(const blink::PageState& state) {
+  OPTIONAL_TRACE_EVENT1("content", "RenderFrameHostImpl::UpdateState",
+                        "render_frame_host",
+                        base::trace_event::ToTracedValue(this));
   // TODO(creis): Verify the state's ISN matches the last committed FNE.
 
   // Without this check, the renderer can trick the browser into using
@@ -5195,7 +5237,7 @@
     return;
   }
 
-  delegate_->UpdateStateForFrame(this, state);
+  frame_tree_->controller().UpdateStateForFrame(this, state);
 }
 
 void RenderFrameHostImpl::OpenURL(mojom::OpenURLParamsPtr params) {
@@ -5331,8 +5373,7 @@
           &no_javascript_access);
 
   // Disallow window creation in prerendered pages.
-  if (base::FeatureList::IsEnabled(blink::features::kPrerender2) &&
-      IsPrerendering()) {
+  if (blink::features::IsPrerender2Enabled() && IsPrerendering()) {
     can_create_window = false;
   }
 
@@ -5769,7 +5810,12 @@
 void RenderFrameHostImpl::SubresourceResponseStarted(
     const GURL& url,
     net::CertStatus cert_status) {
-  delegate_->SubresourceResponseStarted(url, cert_status);
+  OPTIONAL_TRACE_EVENT1("content",
+                        "RenderFrameHostImpl::SubresourceResponseStarted",
+                        "url", base::trace_event::ValueToString(url));
+  frame_tree_->controller().ssl_manager()->DidStartResourceResponse(
+      url, cert_status);
+  delegate_->SubresourceResponseStarted();
 }
 
 void RenderFrameHostImpl::ResourceLoadComplete(
@@ -6376,7 +6422,7 @@
   DCHECK(!IsRendererDebugURL(common_params->url));
   DCHECK(navigation_request);
 
-  if (base::FeatureList::IsEnabled(blink::features::kPrerender2)) {
+  if (blink::features::IsPrerender2Enabled()) {
     is_prerendering_ = commit_params->is_prerendering;
     // TODO(https://crbug.com/1132752): Set cancellation_closure after replacing
     // is_prerendering with prerender_host_id.
@@ -7882,20 +7928,19 @@
 void RenderFrameHostImpl::BindPrerenderProcessor(
     RenderFrameHost* render_frame_host,
     mojo::PendingReceiver<blink::mojom::PrerenderProcessor> pending_receiver) {
-  DCHECK(base::FeatureList::IsEnabled(blink::features::kPrerender2));
+  DCHECK(blink::features::IsPrerender2Enabled());
   DCHECK_EQ(render_frame_host, this);
   prerender_processor_receivers_.Add(
       std::make_unique<PrerenderProcessor>(*this), std::move(pending_receiver));
 }
 
 bool RenderFrameHostImpl::IsPrerendering() const {
-  DCHECK(!is_prerendering_ ||
-         base::FeatureList::IsEnabled(blink::features::kPrerender2));
+  DCHECK(!is_prerendering_ || blink::features::IsPrerender2Enabled());
   return is_prerendering_;
 }
 
 void RenderFrameHostImpl::OnPrerenderedPageActivated() {
-  DCHECK(base::FeatureList::IsEnabled(blink::features::kPrerender2));
+  DCHECK(blink::features::IsPrerender2Enabled());
   DCHECK(is_prerendering_);
   is_prerendering_ = false;
   broker_.ReleaseMojoBinderPolicies();
@@ -8877,8 +8922,8 @@
 
     // Handle src-less <iframe> for prerendering.
     // This is a special case that does not go through CommitNavigation path.
-    if (base::FeatureList::IsEnabled(blink::features::kPrerender2) &&
-        is_initial_empty_commit && !is_main_frame()) {
+    if (blink::features::IsPrerender2Enabled() && is_initial_empty_commit &&
+        !is_main_frame()) {
       is_prerendering_ = parent_->IsPrerendering();
       if (is_prerendering_) {
         broker_.ApplyMojoBinderPolicies(
@@ -10543,6 +10588,60 @@
   SetPolicyContainerHost(std::move(policy_container_host));
 }
 
+void RenderFrameHostImpl::OnDidRunInsecureContent(const GURL& security_origin,
+                                                  const GURL& target_url) {
+  OPTIONAL_TRACE_EVENT2(
+      "content", "RenderFrameHostImpl::DidRunInsecureContent",
+      "security_origin", base::trace_event::ValueToString(security_origin),
+      "target_url", base::trace_event::ValueToString(target_url));
+
+  // TODO(nick, estark): Should we call FilterURL using this frame's process on
+  // these parameters? |target_url| seems unused, except for a log message. And
+  // |security_origin| might be replaceable with the origin of the main frame.
+
+  LOG(WARNING) << security_origin << " ran insecure content from "
+               << target_url.possibly_invalid_spec();
+  RecordAction(base::UserMetricsAction("SSL.RanInsecureContent"));
+  if (base::EndsWith(security_origin.spec(), kDotGoogleDotCom,
+                     base::CompareCase::INSENSITIVE_ASCII)) {
+    RecordAction(base::UserMetricsAction("SSL.RanInsecureContentGoogle"));
+  }
+  frame_tree_->controller().ssl_manager()->DidRunMixedContent(security_origin);
+}
+
+void RenderFrameHostImpl::OnDidRunContentWithCertificateErrors() {
+  OPTIONAL_TRACE_EVENT0(
+      "content", "RenderFrameHostImpl::OnDidRunContentWithCertificateErrors");
+  // For RenderFrameHosts that are inactive and going to be discarded, we can
+  // disregard this message; there's no need to update the UI if the UI will
+  // never be shown again.
+  //
+  // We still process this message for speculative RenderFrameHosts. This can
+  // happen when a subframe's main resource has a certificate error. The
+  // origin for the last committed navigation entry will get marked as having
+  // run insecure content and that will carry over to the navigation entry for
+  // the speculative RFH when it commits.
+  //
+  // Generally our approach for active content with certificate errors follows
+  // our approach for mixed content (DidRunInsecureContent): when a page loads
+  // active insecure content, such as a script or iframe, the top-level origin
+  // gets marked as insecure and that applies to any navigation entry using the
+  // same renderer process with that same top-level origin.
+  if (lifecycle_state() != LifecycleState::kSpeculative &&
+      IsInactiveAndDisallowReactivation()) {
+    return;
+  }
+  frame_tree_->controller().ssl_manager()->DidRunContentWithCertErrors(
+      GetMainFrame()->GetLastCommittedOrigin().GetURL());
+}
+
+void RenderFrameHostImpl::OnDidDisplayContentWithCertificateErrors() {
+  OPTIONAL_TRACE_EVENT0(
+      "content",
+      "RenderFrameHostImpl::OnDidDisplayContentWithCertificateErrors");
+  frame_tree_->controller().ssl_manager()->DidDisplayContentWithCertErrors();
+}
+
 std::ostream& operator<<(std::ostream& o,
                          const RenderFrameHostImpl::LifecycleState& s) {
   return o << LifecycleStateToString(s);
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index b34f885..2330ad2 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -1920,6 +1920,11 @@
   // RenderFrameHostImpl state. This is never null.
   network::mojom::ClientSecurityStatePtr BuildClientSecurityState() const;
 
+  void OnDidRunInsecureContent(const GURL& security_origin,
+                               const GURL& target_url);
+  void OnDidDisplayContentWithCertificateErrors();
+  void OnDidRunContentWithCertificateErrors();
+
 #if BUILDFLAG(ENABLE_PLUGINS)
   void PepperInstanceClosed(int32_t instance_id);
   void PepperSetVolume(int32_t instance_id, double volume);
diff --git a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
index a9dbae3e..7cb2c1ff 100644
--- a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
@@ -6711,10 +6711,11 @@
       : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {
     std::vector<base::Feature> features;
     feature_list_.InitWithFeatures(
-        {network::features::kCrossOriginOpenerPolicy,
-         network::features::kCrossOriginOpenerPolicyReporting,
-         network::features::kCrossOriginEmbedderPolicy,
-         network::features::kCrossOriginIsolated},
+        {
+            network::features::kCrossOriginOpenerPolicy,
+            network::features::kCrossOriginOpenerPolicyReporting,
+            network::features::kCrossOriginIsolated,
+        },
         {});
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kIgnoreCertificateErrors);
diff --git a/content/browser/service_worker/OWNERS b/content/browser/service_worker/OWNERS
index 2e63dfa..efef8d28f 100644
--- a/content/browser/service_worker/OWNERS
+++ b/content/browser/service_worker/OWNERS
@@ -23,6 +23,7 @@
 mek@chromium.org
 nhiroki@chromium.org
 shimazu@chromium.org
+wanderview@chromium.org
 
 # per-file rules:
 per-file *_type_converter*.*=set noparent
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 43d35f6..50aa20c 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -340,10 +340,8 @@
   using self = ServiceWorkerBrowserTest;
 
   ServiceWorkerBrowserTest() {
-    feature_list_.InitWithFeatures(
-        {network::features::kCrossOriginEmbedderPolicy,
-         network::features::kCrossOriginIsolated},
-        {});
+    feature_list_.InitWithFeatures({network::features::kCrossOriginIsolated},
+                                   {});
   }
 
   void SetUpOnMainThread() override {
diff --git a/content/browser/service_worker/service_worker_job_unittest.cc b/content/browser/service_worker/service_worker_job_unittest.cc
index 9d1d9c33..4634956 100644
--- a/content/browser/service_worker/service_worker_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_job_unittest.cc
@@ -2011,21 +2011,8 @@
   runner->RunUntilIdle();
 }
 
-class ServiceWorkerUpdateJobTestWithCrossOriginIsolation
-    : public ServiceWorkerUpdateJobTest {
- public:
-  ServiceWorkerUpdateJobTestWithCrossOriginIsolation() {
-    feature_list_.InitAndEnableFeature(
-        ::network::features::kCrossOriginEmbedderPolicy);
-  }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
-
 // Update job should handle the COEP header appropriately.
-TEST_F(ServiceWorkerUpdateJobTestWithCrossOriginIsolation,
-       Update_CrossOriginEmbedderPolicyValue) {
+TEST_F(ServiceWorkerUpdateJobTest, Update_CrossOriginEmbedderPolicyValue) {
   const GURL kNewVersionOrigin("https://newversion/");
   const char kHeadersWithRequireCorp[] = R"(HTTP/1.1 200 OK
 Content-Type: application/javascript
diff --git a/content/browser/service_worker/service_worker_version_browsertest.cc b/content/browser/service_worker/service_worker_version_browsertest.cc
index 89f152bd..679bb7ce 100644
--- a/content/browser/service_worker/service_worker_version_browsertest.cc
+++ b/content/browser/service_worker/service_worker_version_browsertest.cc
@@ -23,7 +23,6 @@
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
 #include "base/test/bind.h"
-#include "base/test/scoped_feature_list.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "content/browser/service_worker/embedded_worker_instance.h"
@@ -44,7 +43,6 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/storage_partition.h"
 #include "content/public/common/content_client.h"
-#include "content/public/common/content_features.h"
 #include "content/public/common/result_codes.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
@@ -57,7 +55,6 @@
 #include "mojo/public/cpp/bindings/remote.h"
 #include "net/test/embedded_test_server/http_request.h"
 #include "net/test/embedded_test_server/http_response.h"
-#include "services/network/public/cpp/features.h"
 #include "services/network/public/mojom/fetch_api.mojom.h"
 #include "storage/browser/test/blob_test_utils.h"
 #include "third_party/blink/public/common/service_worker/service_worker_status_code.h"
@@ -264,8 +261,28 @@
   return http_response;
 }
 
-network::CrossOriginEmbedderPolicy CrossOriginEmbedderPolicyNone() {
-  return network::CrossOriginEmbedderPolicy();
+// Returns a response with Cross-Origin-Embedder-Policy header matching with
+// |coep|.
+std::unique_ptr<net::test_server::HttpResponse>
+RequestHandlerForWorkerScriptWithCoep(
+    base::Optional<network::mojom::CrossOriginEmbedderPolicyValue> coep,
+    const net::test_server::HttpRequest& request) {
+  static int counter = 0;
+  if (request.relative_url != "/service_worker/generated")
+    return nullptr;
+  auto response = std::make_unique<net::test_server::BasicHttpResponse>();
+  response->set_code(net::HTTP_OK);
+  response->set_content(
+      base::StringPrintf("// empty. counter = %d\n", counter++));
+  response->set_content_type("text/javascript");
+  if (coep.has_value()) {
+    std::string header_value =
+        coep.value() == network::mojom::CrossOriginEmbedderPolicyValue::kNone
+            ? "none"
+            : "require-corp";
+    response->AddCustomHeader("Cross-Origin-Embedder-Policy", header_value);
+  }
+  return response;
 }
 
 network::CrossOriginEmbedderPolicy CrossOriginEmbedderPolicyRequireCorp() {
@@ -1391,60 +1408,12 @@
   version_->RemoveObserver(&observer);
 }
 
-// This tests whether the ServiceWorkerVersion can have the correct value of
-// Cross-Origin-Embedder-Policy and checks if it works either of when
-// CrossOriginIsolation is enabled and disabled.
-class ServiceWorkerVersionCoepTest : public ServiceWorkerVersionBrowserTest,
-                                     public testing::WithParamInterface<bool> {
- public:
-  ServiceWorkerVersionCoepTest() {
-    if (IsCrossOriginIsolationEnabled()) {
-      feature_list_.InitAndEnableFeature(
-          network::features::kCrossOriginEmbedderPolicy);
-    } else {
-      feature_list_.InitAndDisableFeature(
-          network::features::kCrossOriginEmbedderPolicy);
-    }
-  }
-
-  static bool IsCrossOriginIsolationEnabled() { return GetParam(); }
-
-  // Returns a response with Cross-Origin-Embedder-Policy header matching with
-  // |coep|.
-  static std::unique_ptr<net::test_server::HttpResponse>
-  RequestHandlerForWorkerScriptWithCoep(
-      base::Optional<network::mojom::CrossOriginEmbedderPolicyValue> coep,
-      const net::test_server::HttpRequest& request) {
-    static int counter = 0;
-    if (request.relative_url != "/service_worker/generated")
-      return nullptr;
-    auto response = std::make_unique<net::test_server::BasicHttpResponse>();
-    response->set_code(net::HTTP_OK);
-    response->set_content(
-        base::StringPrintf("// empty. counter = %d\n", counter++));
-    response->set_content_type("text/javascript");
-    if (coep.has_value()) {
-      std::string header_value =
-          coep.value() == network::mojom::CrossOriginEmbedderPolicyValue::kNone
-              ? "none"
-              : "require-corp";
-      response->AddCustomHeader("Cross-Origin-Embedder-Policy", header_value);
-    }
-    return response;
-  }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
-
-INSTANTIATE_TEST_SUITE_P(All, ServiceWorkerVersionCoepTest, testing::Bool());
-
 // Checks if ServiceWorkerVersion has the correct value of COEP when a new
 // worker is installed.
-IN_PROC_BROWSER_TEST_P(ServiceWorkerVersionCoepTest,
+IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
                        CrossOriginEmbedderPolicyValue_Install) {
   embedded_test_server()->RegisterRequestHandler(base::BindRepeating(
-      &ServiceWorkerVersionCoepTest::RequestHandlerForWorkerScriptWithCoep,
+      &RequestHandlerForWorkerScriptWithCoep,
       network::mojom::CrossOriginEmbedderPolicyValue::kRequireCorp));
   StartServerAndNavigateToSetup();
 
@@ -1455,9 +1424,7 @@
   // Once it's started, the worker script is read from the network and the COEP
   // value is set to the version.
   StartWorker(blink::ServiceWorkerStatusCode::kOk);
-  EXPECT_EQ(IsCrossOriginIsolationEnabled()
-                ? CrossOriginEmbedderPolicyRequireCorp()
-                : CrossOriginEmbedderPolicyNone(),
+  EXPECT_EQ(CrossOriginEmbedderPolicyRequireCorp(),
             version_->cross_origin_embedder_policy());
 }
 
@@ -1581,9 +1548,6 @@
   // the service worker fetch handler.
   static constexpr const char* kOtherURL =
       "/service_worker/non-matching-url.js";
-
- private:
-  base::test::ScopedFeatureList feature_list;
 };
 
 IN_PROC_BROWSER_TEST_F(CacheStorageEagerReadingTest,
diff --git a/content/browser/ssl/ssl_manager.cc b/content/browser/ssl/ssl_manager.cc
index 5db54f8c..364c2ea 100644
--- a/content/browser/ssl/ssl_manager.cc
+++ b/content/browser/ssl/ssl_manager.cc
@@ -13,6 +13,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/supports_user_data.h"
 #include "base/task/post_task.h"
+#include "base/trace_event/optional_trace_event.h"
 #include "content/browser/devtools/devtools_instrumentation.h"
 #include "content/browser/renderer_host/navigation_entry_impl.h"
 #include "content/browser/renderer_host/render_frame_host_impl.h"
@@ -207,6 +208,7 @@
 }
 
 void SSLManager::DidDisplayMixedContent() {
+  OPTIONAL_TRACE_EVENT0("content", "SSLManager::DidDisplayMixedContent");
   NavigationEntryImpl* entry = controller_->GetLastCommittedEntry();
   if (entry && entry->GetURL().SchemeIsCryptographic() &&
       entry->GetSSL().certificate) {
@@ -220,6 +222,7 @@
 }
 
 void SSLManager::DidContainInsecureFormAction() {
+  OPTIONAL_TRACE_EVENT0("content", "SSLManager::DidContainInsecureFormAction");
   NavigationEntryImpl* entry = controller_->GetLastCommittedEntry();
   if (entry && entry->GetURL().SchemeIsCryptographic() &&
       entry->GetSSL().certificate) {
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index d71a0d0d..50bec12b 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -1336,7 +1336,7 @@
 
   font_access_manager_ = std::make_unique<FontAccessManagerImpl>();
 
-  if (base::FeatureList::IsEnabled(blink::features::kPrerender2)) {
+  if (blink::features::IsPrerender2Enabled()) {
     prerender_host_registry_ =
         std::make_unique<PrerenderHostRegistry>(*browser_context_);
   }
@@ -1610,7 +1610,7 @@
 }
 
 PrerenderHostRegistry* StoragePartitionImpl::GetPrerenderHostRegistry() {
-  DCHECK(base::FeatureList::IsEnabled(blink::features::kPrerender2));
+  DCHECK(blink::features::IsPrerender2Enabled());
   DCHECK(initialized_);
   return prerender_host_registry_.get();
 }
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 57abfe33..7daae87 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -215,7 +215,6 @@
 namespace {
 
 const int kMinimumDelayBetweenLoadingUpdatesMS = 100;
-const char kDotGoogleDotCom[] = ".google.com";
 
 using LifecycleState = RenderFrameHostImpl::LifecycleState;
 
@@ -810,7 +809,6 @@
       upload_size_(0),
       upload_position_(0),
       is_resume_pending_(false),
-      has_accessed_initial_document_(false),
       visible_capturer_count_(0),
       hidden_capturer_count_(0),
       is_being_destroyed_(false),
@@ -4232,19 +4230,6 @@
   return new_contents;
 }
 
-void WebContentsImpl::SetHistoryOffsetAndLength(int history_offset,
-                                                int history_length) {
-  OPTIONAL_TRACE_EVENT2("content", "WebContentsImpl::SetHistoryOffsetAndLength",
-                        "history_offset", history_offset, "history_length",
-                        history_length);
-  ExecutePageBroadcastMethod(base::BindRepeating(
-      [](int history_offset, int history_length, RenderViewHostImpl* rvh) {
-        if (auto& broadcast = rvh->GetAssociatedPageBroadcast())
-          broadcast->SetHistoryOffsetAndLength(history_offset, history_length);
-      },
-      history_offset, history_length));
-}
-
 void WebContentsImpl::SetHistoryOffsetAndLengthForView(
     RenderViewHost* render_view_host,
     int history_offset,
@@ -5125,12 +5110,17 @@
   // does not get called on network errors.
   if (navigation_handle->IsInMainFrame() &&
       navigation_handle->GetNetErrorCode() == net::OK) {
-    GetController().ssl_manager()->DidStartResourceResponse(
-        navigation_handle->GetURL(),
-        navigation_handle->GetSSLInfo().has_value()
-            ? net::IsCertStatusError(
-                  navigation_handle->GetSSLInfo()->cert_status)
-            : false);
+    static_cast<NavigationRequest*>(navigation_handle)
+        ->frame_tree_node()
+        ->frame_tree()
+        ->controller()
+        .ssl_manager()
+        ->DidStartResourceResponse(
+            navigation_handle->GetURL(),
+            navigation_handle->GetSSLInfo().has_value()
+                ? net::IsCertStatusError(
+                      navigation_handle->GetSSLInfo()->cert_status)
+                : false);
   }
 
   // SetNotWaitingForResponse must be called last in case it triggers deletion
@@ -5320,9 +5310,6 @@
   OPTIONAL_TRACE_EVENT1(
       "content,navigation", "WebContentsImpl::DidNavigateAnyFramePostCommit",
       "render_frame_host", base::trace_event::ToTracedValue(render_frame_host));
-  // Now that something has committed, we don't need to track whether the
-  // initial page has been accessed.
-  has_accessed_initial_document_ = false;
 
   // If we navigate off the page, close all JavaScript dialogs.
   if (!details.is_same_document)
@@ -5389,18 +5376,6 @@
   }
 }
 
-void WebContentsImpl::DidDisplayInsecureContent() {
-  OPTIONAL_TRACE_EVENT0("content",
-                        "WebContentsImpl::DidDisplayInsecureContent");
-  GetController().ssl_manager()->DidDisplayMixedContent();
-}
-
-void WebContentsImpl::DidContainInsecureFormAction() {
-  OPTIONAL_TRACE_EVENT0("content",
-                        "WebContentsImpl::DidContainInsecureFormAction");
-  GetController().ssl_manager()->DidContainInsecureFormAction();
-}
-
 void WebContentsImpl::DocumentAvailableInMainFrame() {
   OPTIONAL_TRACE_EVENT0("content",
                         "WebContentsImpl::DocumentAvailableInMainFrame");
@@ -5408,33 +5383,6 @@
       &WebContentsObserver::DocumentAvailableInMainFrame);
 }
 
-void WebContentsImpl::OnDidRunInsecureContent(RenderFrameHostImpl* source,
-                                              const GURL& security_origin,
-                                              const GURL& target_url) {
-  OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::OnDidRunInsecureContent",
-                        "render_frame_host",
-                        base::trace_event::ToTracedValue(source));
-  // TODO(nick, estark): Should we call FilterURL using |source|'s process on
-  // these parameters? |target_url| seems unused, except for a log message. And
-  // |security_origin| might be replaceable with the origin of the main frame.
-  DidRunInsecureContent(security_origin, target_url);
-}
-
-void WebContentsImpl::DidRunInsecureContent(const GURL& security_origin,
-                                            const GURL& target_url) {
-  OPTIONAL_TRACE_EVENT2(
-      "content", "WebContentsImpl::DidRunInsecureContent", "security_origin",
-      base::trace_event::ValueToString(security_origin), "target_url",
-      base::trace_event::ValueToString(target_url));
-  LOG(WARNING) << security_origin << " ran insecure content from "
-               << target_url.possibly_invalid_spec();
-  RecordAction(base::UserMetricsAction("SSL.RanInsecureContent"));
-  if (base::EndsWith(security_origin.spec(), kDotGoogleDotCom,
-                     base::CompareCase::INSENSITIVE_ASCII))
-    RecordAction(base::UserMetricsAction("SSL.RanInsecureContentGoogle"));
-  GetController().ssl_manager()->DidRunMixedContent(security_origin);
-}
-
 void WebContentsImpl::PassiveInsecureContentFound(const GURL& resource_url) {
   OPTIONAL_TRACE_EVENT1(
       "content", "WebContentsImpl::PassiveInsecureContentFound", "resource_url",
@@ -5458,35 +5406,6 @@
   return allowed_per_prefs;
 }
 
-void WebContentsImpl::RecordActiveContentWithCertificateErrors(
-    RenderFrameHostImpl* render_frame_host) {
-  OPTIONAL_TRACE_EVENT1(
-      "content", "WebContentsImpl::RecordActiveContentWithCertificateErrors",
-      "render_frame_host", base::trace_event::ToTracedValue(render_frame_host));
-  // For RenderFrameHosts that are inactive and going to be discarded, we can
-  // disregard this message; there's no need to update the UI if the UI will
-  // never be shown again.
-  //
-  // We still process this message for speculative RenderFrameHosts. This can
-  // happen when a subframe's main resource has a certificate error. The
-  // origin for the last committed navigation entry will get marked as having
-  // run insecure content and that will carry over to the navigation entry for
-  // the speculative RFH when it commits.
-  //
-  // Generally our approach for active content with certificate errors follows
-  // our approach for mixed content (DidRunInsecureContent): when a page loads
-  // active insecure content, such as a script or iframe, the top-level origin
-  // gets marked as insecure and that applies to any navigation entry using the
-  // same renderer process with that same top-level origin.
-  if (render_frame_host->lifecycle_state() !=
-          RenderFrameHostImpl::LifecycleState::kSpeculative &&
-      render_frame_host->IsInactiveAndDisallowReactivation()) {
-    return;
-  }
-  GetController().ssl_manager()->DidRunContentWithCertErrors(
-      render_frame_host->GetMainFrame()->GetLastCommittedOrigin().GetURL());
-}
-
 void WebContentsImpl::ViewSource(RenderFrameHostImpl* frame) {
   OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::ViewSource",
                         "render_frame_host",
@@ -5571,12 +5490,7 @@
   // AddNewContents method call.
 }
 
-void WebContentsImpl::SubresourceResponseStarted(const GURL& url,
-                                                 net::CertStatus cert_status) {
-  OPTIONAL_TRACE_EVENT1("content",
-                        "WebContentsImpl::SubresourceResponseStarted", "url",
-                        base::trace_event::ValueToString(url));
-  GetController().ssl_manager()->DidStartResourceResponse(url, cert_status);
+void WebContentsImpl::SubresourceResponseStarted() {
   SetNotWaitingForResponse();
 }
 
@@ -5681,17 +5595,6 @@
 }
 #endif
 
-void WebContentsImpl::OnDidDisplayContentWithCertificateErrors() {
-  OPTIONAL_TRACE_EVENT0(
-      "content", "WebContentsImpl::OnDidDisplayContentWithCertificateErrors");
-  GetController().ssl_manager()->DidDisplayContentWithCertErrors();
-}
-
-void WebContentsImpl::OnDidRunContentWithCertificateErrors(
-    RenderFrameHostImpl* source) {
-  RecordActiveContentWithCertificateErrors(source);
-}
-
 void WebContentsImpl::DOMContentLoaded(RenderFrameHost* render_frame_host) {
   OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::DOMContentLoaded",
                         "render_frame_host",
@@ -5719,33 +5622,11 @@
     UMA_HISTOGRAM_COUNTS_1000("Navigation.MainFrame.FrameCount", tree_size);
 }
 
-void WebContentsImpl::OnGoToEntryAtOffset(RenderFrameHostImpl* source,
-                                          int32_t offset,
-                                          bool has_user_gesture) {
-  OPTIONAL_TRACE_EVENT2(
-      "content", "WebContentsImpl::OnGoToEntryAtOffset", "render_frame_host",
-      base::trace_event::ToTracedValue(source), "offset", offset);
-  // Non-user initiated navigations coming from the renderer should be ignored
-  // if there is an ongoing browser-initiated navigation.
-  // See https://crbug.com/879965.
-  // TODO(arthursonzogni): See if this should check for ongoing navigations in
-  // the frame(s) affected by the session history navigation, rather than just
-  // the main frame.
-  if (Navigator::ShouldIgnoreIncomingRendererRequest(
-          frame_tree_.root()->navigation_request(), has_user_gesture))
-    return;
-
-  // All frames are allowed to navigate the global history.
-  if (!delegate_ || delegate_->OnGoToEntryOffset(offset)) {
-    if (source->IsSandboxed(network::mojom::WebSandboxFlags::kTopNavigation)) {
-      // Keep track of whether this is a session history from a sandboxed iframe
-      // with top level navigation disallowed.
-      GetController().GoToOffsetInSandboxedFrame(offset,
-                                                 source->GetFrameTreeNodeId());
-    } else {
-      GetController().GoToOffset(offset);
-    }
-  }
+bool WebContentsImpl::IsAllowedToGoToEntryAtOffset(int32_t offset) {
+  // TODO(https://crbug.com/1170277): This should probably be renamed to
+  // WebContentsDelegate::IsAllowedToGoToEntryAtOffset or
+  // ShouldGoToEntryAtOffset
+  return !delegate_ || delegate_->OnGoToEntryOffset(offset);
 }
 
 void WebContentsImpl::OnPageScaleFactorChanged(RenderFrameHostImpl* source,
@@ -6107,7 +5988,7 @@
 }
 
 bool WebContentsImpl::HasAccessedInitialDocument() {
-  return has_accessed_initial_document_;
+  return GetFrameTree()->has_accessed_initial_main_document();
 }
 
 void WebContentsImpl::UpdateTitleForEntry(NavigationEntry* entry,
@@ -6352,17 +6233,6 @@
 
   if (display_cutout_host_impl_)
     display_cutout_host_impl_->RenderFrameCreated(render_frame_host);
-
-  if (!render_frame_host->IsRenderFrameLive() || render_frame_host->GetParent())
-    return;
-
-  NavigationEntry* entry = GetController().GetPendingEntry();
-  if (entry && entry->IsViewSourceMode()) {
-    // Put the renderer in view source mode.
-    static_cast<RenderFrameHostImpl*>(render_frame_host)
-        ->GetAssociatedLocalFrame()
-        ->EnableViewSourceMode();
-  }
 }
 
 void WebContentsImpl::RenderFrameDeleted(RenderFrameHost* render_frame_host) {
@@ -7127,20 +6997,6 @@
   NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
 }
 
-void WebContentsImpl::DidAccessInitialDocument() {
-  OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::DidAccessInitialDocument");
-  has_accessed_initial_document_ = true;
-
-  // We may have left a failed browser-initiated navigation in the address bar
-  // to let the user edit it and try again.  Clear it now that content might
-  // show up underneath it.
-  if (!IsLoading() && GetController().GetPendingEntry())
-    GetController().DiscardPendingEntry(false);
-
-  // Update the URL display.
-  NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
-}
-
 void WebContentsImpl::DidChangeName(RenderFrameHost* render_frame_host,
                                     const std::string& name) {
   OPTIONAL_TRACE_EVENT2(
@@ -7198,59 +7054,6 @@
       NotificationService::NoDetails());
 }
 
-void WebContentsImpl::UpdateStateForFrame(RenderFrameHost* render_frame_host,
-                                          const blink::PageState& page_state) {
-  OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::UpdateStateForFrame",
-                        "render_frame_host",
-                        base::trace_event::ToTracedValue(render_frame_host));
-  // The state update affects the last NavigationEntry associated with the given
-  // |render_frame_host|. This may not be the last committed NavigationEntry (as
-  // in the case of an UpdateState from a frame being swapped out). We track
-  // which entry this is in the RenderFrameHost's nav_entry_id.
-  RenderFrameHostImpl* rfhi =
-      static_cast<RenderFrameHostImpl*>(render_frame_host);
-  // TODO(https://crbug.com/1170273): Handle multiple controllers (MPArch)
-  NavigationEntryImpl* entry =
-      GetController().GetEntryWithUniqueID(rfhi->nav_entry_id());
-  if (!entry)
-    return;
-
-  FrameNavigationEntry* frame_entry =
-      entry->GetFrameEntry(rfhi->frame_tree_node());
-  if (!frame_entry)
-    return;
-
-  // The SiteInstance might not match if we do a cross-process navigation with
-  // replacement (e.g., auto-subframe), in which case the swap out of the old
-  // RenderFrameHost runs in the background after the old FrameNavigationEntry
-  // has already been replaced and destroyed.
-  if (frame_entry->site_instance() != rfhi->GetSiteInstance())
-    return;
-
-  if (page_state == frame_entry->page_state())
-    return;  // Nothing to update.
-
-  DCHECK(page_state.IsValid()) << "Shouldn't set an empty PageState.";
-
-  // The document_sequence_number and item_sequence_number recorded in the
-  // FrameNavigationEntry should not differ from the one coming with the update,
-  // since it must come from the same document. Do not update it if a difference
-  // is detected, as this indicates that |frame_entry| is not the correct one.
-  blink::ExplodedPageState exploded_state;
-  if (!blink::DecodePageState(page_state.ToEncodedData(), &exploded_state))
-    return;
-
-  if (exploded_state.top.document_sequence_number !=
-          frame_entry->document_sequence_number() ||
-      exploded_state.top.item_sequence_number !=
-          frame_entry->item_sequence_number()) {
-    return;
-  }
-
-  frame_entry->SetPageState(page_state);
-  GetController().NotifyEntryChanged(entry);
-}
-
 void WebContentsImpl::UpdateTitle(RenderFrameHost* render_frame_host,
                                   const base::string16& title,
                                   base::i18n::TextDirection title_direction) {
@@ -7258,14 +7061,20 @@
                         "render_frame_host",
                         base::trace_event::ToTracedValue(render_frame_host),
                         "title", base::trace_event::ValueToString(title));
+  RenderFrameHostImpl* rfhi =
+      static_cast<RenderFrameHostImpl*>(render_frame_host);
   // Try to find the navigation entry, which might not be the current one.
   // For example, it might be from a recently swapped out RFH.
-  NavigationEntryImpl* entry = GetController().GetEntryWithUniqueID(
-      static_cast<RenderFrameHostImpl*>(render_frame_host)->nav_entry_id());
+  NavigationEntryImpl* entry =
+      rfhi->frame_tree()->controller().GetEntryWithUniqueID(
+          rfhi->nav_entry_id());
 
   // We can handle title updates when we don't have an entry in
-  // UpdateTitleForEntry, but only if the update is from the current RVH.
-  // TODO(avi): Change to make decisions based on the RenderFrameHost.
+  // UpdateTitleForEntry, but only if the update is from the current RFH.
+  // This check also makes sure that we only update the title for the primary
+  // main frame in case of multiple FrameTrees (MPArch) as GetMainFrame returns
+  // the main frame for the FrameTree owned by this WebContents (i.e. primary
+  // FrameTree)
   if (!entry && render_frame_host != GetMainFrame())
     return;
 
@@ -7739,6 +7548,8 @@
 
   const auto proxy_routing_id =
       proxy_host ? proxy_host->GetRoutingID() : MSG_ROUTING_NONE;
+  // TODO(https://crbug.com/1171646): Given MPArch, should we pass
+  // created_with_opener_ for non primary FrameTrees?
   if (!rvh_impl->CreateRenderView(opener_frame_token, proxy_routing_id,
                                   created_with_opener_)) {
     return false;
@@ -7747,6 +7558,8 @@
   // but only if it's not for the main frame. Main frame renderers should create
   // this state themselves from up-to-date values, so we shouldn't override it
   // with the cached values.
+  // We share the autosize info with all pages in the WebContents so there is no
+  // need to check whether the RVH belongs to the primary FrameTree.
   if (!render_view_host->GetMainFrame() && proxy_host) {
     proxy_host->GetAssociatedRemoteMainFrame()->UpdateTextAutosizerPageInfo(
         text_autosizer_page_info_.Clone());
@@ -7755,10 +7568,10 @@
   if (!proxy_host)
     ReattachOuterDelegateIfNeeded();
 
-  // TODO(https://crbug.com/1170273): Handle multiple controllers (MPArch)
-  SetHistoryOffsetAndLengthForView(render_view_host,
-                                   GetController().GetLastCommittedEntryIndex(),
-                                   GetController().GetEntryCount());
+  SetHistoryOffsetAndLengthForView(
+      render_view_host,
+      rvh_impl->frame_tree()->controller().GetLastCommittedEntryIndex(),
+      rvh_impl->frame_tree()->controller().GetEntryCount());
 
 #if defined(OS_POSIX) && !defined(OS_MAC) && !defined(OS_ANDROID)
   // Force a ViewMsg_Resize to be sent, needed to make plugins show up on
@@ -7837,6 +7650,7 @@
                           original_image_sizes);
 }
 
+// TODO(https://crbug.com/1171203): Needs to be made MPArch proof.
 void WebContentsImpl::OnDialogClosed(int render_process_id,
                                      int render_frame_id,
                                      JavaScriptDialogCallback response_callback,
@@ -7859,8 +7673,7 @@
     // meantime.  Do not reset the navigation state in that case.
     if (rfh && rfh == rfh->frame_tree_node()->current_frame_host()) {
       rfh->frame_tree_node()->BeforeUnloadCanceled();
-      // TODO(https://crbug.com/1170273): Handle multiple controllers (MPArch)
-      GetController().DiscardNonCommittedEntries();
+      rfh->frame_tree()->controller().DiscardNonCommittedEntries();
     }
 
     // Update the URL display either way, to avoid showing a stale URL.
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 970d4c87..3f55be5 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -325,6 +325,12 @@
   // ones held by MPArch features like Prerender or Portal).
   FrameTree* GetFrameTree();
 
+  // Whether the initial empty page of this view has been accessed by another
+  // page, making it unsafe to show the pending URL. Always false after the
+  // first commit.
+  // TODO(https://crbug.com/1170277): Rename to HasAccessedInitialMainDocument
+  bool HasAccessedInitialDocument();
+
 #if defined(OS_ANDROID)
   void SetMainFrameImportance(ChildProcessImportance importance);
 #endif
@@ -592,7 +598,6 @@
       bool is_reload,
       JavaScriptDialogCallback response_callback) override;
   void DidCancelLoading() override;
-  void DidAccessInitialDocument() override;
   void DidChangeName(RenderFrameHost* render_frame_host,
                      const std::string& name) override;
   void DidReceiveFirstUserActivation(
@@ -603,8 +608,6 @@
                         const gfx::Size& frame_size) override;
   void DOMContentLoaded(RenderFrameHost* render_frame_host) override;
   void DocumentOnLoadCompleted(RenderFrameHost* render_frame_host) override;
-  void UpdateStateForFrame(RenderFrameHost* render_frame_host,
-                           const blink::PageState& page_state) override;
   void UpdateTitle(RenderFrameHost* render_frame_host,
                    const base::string16& title,
                    base::i18n::TextDirection title_direction) override;
@@ -670,17 +673,11 @@
                          WindowOpenDisposition disposition,
                          const gfx::Rect& initial_rect,
                          bool user_gesture) override;
-  void DidDisplayInsecureContent() override;
-  void DidContainInsecureFormAction() override;
   void DocumentAvailableInMainFrame() override;
-  void DidRunInsecureContent(const GURL& security_origin,
-                             const GURL& target_url) override;
   void PassiveInsecureContentFound(const GURL& resource_url) override;
   bool ShouldAllowRunningInsecureContent(bool allowed_per_prefs,
                                          const url::Origin& origin,
                                          const GURL& resource_url) override;
-  void RecordActiveContentWithCertificateErrors(
-      RenderFrameHostImpl* render_frame_host) override;
   void ViewSource(RenderFrameHostImpl* frame) override;
   void PrintCrossProcessSubframe(const gfx::Rect& rect,
                                  int document_cookie,
@@ -693,8 +690,7 @@
   base::android::ScopedJavaLocalRef<jobject> GetJavaRenderFrameHostDelegate()
       override;
 #endif
-  void SubresourceResponseStarted(const GURL& url,
-                                  net::CertStatus cert_status) override;
+  void SubresourceResponseStarted() override;
   void ResourceLoadComplete(
       RenderFrameHost* render_frame_host,
       const GlobalRequestID& request_id,
@@ -722,9 +718,7 @@
                                  const std::string& protocol,
                                  const GURL& url,
                                  bool user_gesture) override;
-  void OnGoToEntryAtOffset(RenderFrameHostImpl* source,
-                           int32_t offset,
-                           bool has_user_gesture) override;
+  bool IsAllowedToGoToEntryAtOffset(int32_t offset) override;
   void IsClipboardPasteAllowed(
       const GURL& url,
       const ui::ClipboardFormatType& data_type,
@@ -1035,17 +1029,6 @@
   // Activate this WebContents and show a form repost warning.
   void ActivateAndShowRepostFormWarningDialog() override;
 
-  // Whether the initial empty page of this view has been accessed by another
-  // page, making it unsafe to show the pending URL. Always false after the
-  // first commit.
-  bool HasAccessedInitialDocument() override;
-
-  // Sets the history for this WebContentsImpl to |history_length| entries, with
-  // an offset of |history_offset|.  This notifies all renderers involved in
-  // rendering the current page about the new offset and length.
-  void SetHistoryOffsetAndLength(int history_offset,
-                                 int history_length) override;
-
   void MediaMutedStatusChanged(const MediaPlayerId& id, bool muted);
 
   void UpdateOverridingUserAgent() override;
@@ -1245,12 +1228,6 @@
                                const GURL& scope,
                                AllowServiceWorkerResult allowed);
 
-  void OnDidRunInsecureContent(RenderFrameHostImpl* source,
-                               const GURL& security_origin,
-                               const GURL& target_url);
-  void OnDidDisplayContentWithCertificateErrors();
-  void OnDidRunContentWithCertificateErrors(RenderFrameHostImpl* source);
-
   JavaScriptDialogNavigationDeferrer* GetJavaScriptDialogNavigationDeferrer() {
     return javascript_dialog_navigation_deferrer_.get();
   }
@@ -1806,11 +1783,6 @@
   // When a title cannot be taken from any entry, this title will be used.
   base::string16 page_title_when_no_navigation_entry_;
 
-  // Whether the initial empty page has been accessed by another page, making it
-  // unsafe to show the pending URL. Usually false unless another window tries
-  // to modify the blank page.  Always false after the first commit.
-  bool has_accessed_initial_document_;
-
   // The last published theme color.
   base::Optional<SkColor> last_sent_theme_color_;
 
diff --git a/content/browser/web_database/web_database_host_impl.cc b/content/browser/web_database/web_database_host_impl.cc
index 92627c8e..c1f8cc3c 100644
--- a/content/browser/web_database/web_database_host_impl.cc
+++ b/content/browser/web_database/web_database_host_impl.cc
@@ -259,7 +259,7 @@
 
   DCHECK(db_tracker_->quota_manager_proxy());
   db_tracker_->quota_manager_proxy()->GetUsageAndQuota(
-      db_tracker_->task_runner(), origin, blink::mojom::StorageType::kTemporary,
+      origin, blink::mojom::StorageType::kTemporary, db_tracker_->task_runner(),
       base::BindOnce(
           [](GetSpaceAvailableCallback callback,
              blink::mojom::QuotaStatusCode status, int64_t usage,
diff --git a/content/browser/worker_host/mock_shared_worker.cc b/content/browser/worker_host/mock_shared_worker.cc
index 5e874f38..042b2d6 100644
--- a/content/browser/worker_host/mock_shared_worker.cc
+++ b/content/browser/worker_host/mock_shared_worker.cc
@@ -76,8 +76,8 @@
 bool MockSharedWorkerFactory::CheckReceivedCreateSharedWorker(
     const GURL& expected_url,
     const std::string& expected_name,
-    network::mojom::ContentSecurityPolicyType
-        expected_content_security_policy_type,
+    const std::vector<network::mojom::ContentSecurityPolicyPtr>&
+        expected_content_security_policies,
     mojo::Remote<blink::mojom::SharedWorkerHost>* host,
     mojo::PendingReceiver<blink::mojom::SharedWorker>* receiver) {
   std::unique_ptr<CreateParams> create_params = std::move(create_params_);
@@ -87,9 +87,10 @@
     return false;
   if (!CheckEquality(expected_name, create_params->info->options->name))
     return false;
-  if (!CheckEquality(expected_content_security_policy_type,
-                     create_params->info->content_security_policy_type))
+  if (!CheckEquality(expected_content_security_policies,
+                     create_params->info->content_security_policies)) {
     return false;
+  }
   if (!CheckEquality(ukm::SourceIdType::WORKER_ID,
                      ukm::GetSourceIdType(create_params->ukm_source_id))) {
     return false;
diff --git a/content/browser/worker_host/mock_shared_worker.h b/content/browser/worker_host/mock_shared_worker.h
index a21694e..687c4315 100644
--- a/content/browser/worker_host/mock_shared_worker.h
+++ b/content/browser/worker_host/mock_shared_worker.h
@@ -70,8 +70,8 @@
   bool CheckReceivedCreateSharedWorker(
       const GURL& expected_url,
       const std::string& expected_name,
-      network::mojom::ContentSecurityPolicyType
-          expected_content_security_policy_type,
+      const std::vector<network::mojom::ContentSecurityPolicyPtr>&
+          expected_content_security_policies,
       mojo::Remote<blink::mojom::SharedWorkerHost>* host,
       mojo::PendingReceiver<blink::mojom::SharedWorker>* receiver);
 
diff --git a/content/browser/worker_host/shared_worker_host.cc b/content/browser/worker_host/shared_worker_host.cc
index 59f5f31..97b4a7d 100644
--- a/content/browser/worker_host/shared_worker_host.cc
+++ b/content/browser/worker_host/shared_worker_host.cc
@@ -107,10 +107,13 @@
 SharedWorkerHost::SharedWorkerHost(
     SharedWorkerServiceImpl* service,
     const SharedWorkerInstance& instance,
-    scoped_refptr<SiteInstanceImpl> site_instance)
+    scoped_refptr<SiteInstanceImpl> site_instance,
+    std::vector<network::mojom::ContentSecurityPolicyPtr>
+        content_security_policies)
     : service_(service),
       token_(blink::SharedWorkerToken()),
       instance_(instance),
+      content_security_policies_(std::move(content_security_policies)),
       site_instance_(std::move(site_instance)),
       scoped_process_host_ref_(
           std::make_unique<ScopedProcessHostRef>(site_instance_->GetProcess())),
@@ -182,8 +185,8 @@
   auto options = blink::mojom::WorkerOptions::New(
       instance_.script_type(), instance_.credentials_mode(), instance_.name());
   blink::mojom::SharedWorkerInfoPtr info(blink::mojom::SharedWorkerInfo::New(
-      instance_.url(), std::move(options), instance_.content_security_policy(),
-      instance_.content_security_policy_type(),
+      instance_.url(), std::move(options),
+      mojo::Clone(content_security_policies_),
       instance_.creation_address_space(),
       std::move(outside_fetch_client_settings_object)));
 
diff --git a/content/browser/worker_host/shared_worker_host.h b/content/browser/worker_host/shared_worker_host.h
index 5c396ead..e00a4a8 100644
--- a/content/browser/worker_host/shared_worker_host.h
+++ b/content/browser/worker_host/shared_worker_host.h
@@ -65,7 +65,9 @@
  public:
   SharedWorkerHost(SharedWorkerServiceImpl* service,
                    const SharedWorkerInstance& instance,
-                   scoped_refptr<SiteInstanceImpl> site_instance);
+                   scoped_refptr<SiteInstanceImpl> site_instance,
+                   std::vector<network::mojom::ContentSecurityPolicyPtr>
+                       content_security_policies);
   ~SharedWorkerHost() override;
 
   // Returns the RenderProcessHost where this shared worker lives.
@@ -146,6 +148,11 @@
 
   const SharedWorkerInstance& instance() const { return instance_; }
 
+  const std::vector<network::mojom::ContentSecurityPolicyPtr>&
+  content_security_policies() const {
+    return content_security_policies_;
+  }
+
   ukm::SourceId ukm_source_id() const { return ukm_source_id_; }
 
   const base::UnguessableToken& GetDevToolsToken() const;
@@ -223,6 +230,9 @@
   SharedWorkerInstance instance_;
   ClientList clients_;
 
+  std::vector<network::mojom::ContentSecurityPolicyPtr>
+      content_security_policies_;
+
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver_;
   mojo::Remote<blink::mojom::SharedWorker> worker_;
 
diff --git a/content/browser/worker_host/shared_worker_host_unittest.cc b/content/browser/worker_host/shared_worker_host_unittest.cc
index 52c0de0..777c710 100644
--- a/content/browser/worker_host/shared_worker_host_unittest.cc
+++ b/content/browser/worker_host/shared_worker_host_unittest.cc
@@ -75,12 +75,12 @@
     SharedWorkerInstance instance(
         kWorkerUrl, blink::mojom::ScriptType::kClassic,
         network::mojom::CredentialsMode::kSameOrigin, "name",
-        url::Origin::Create(kWorkerUrl), /*content_security_policy=*/"",
-        network::mojom::ContentSecurityPolicyType::kReport,
+        url::Origin::Create(kWorkerUrl),
         network::mojom::IPAddressSpace::kPublic,
         blink::mojom::SharedWorkerCreationContextType::kSecure);
-    auto host =
-        std::make_unique<SharedWorkerHost>(&service_, instance, site_instance_);
+    auto host = std::make_unique<SharedWorkerHost>(
+        &service_, instance, site_instance_,
+        std::vector<network::mojom::ContentSecurityPolicyPtr>());
     auto weak_host = host->AsWeakPtr();
     service_.worker_hosts_.insert(std::move(host));
     return weak_host;
@@ -192,8 +192,7 @@
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory_impl.CheckReceivedCreateSharedWorker(
       host->instance().url(), host->instance().name(),
-      host->instance().content_security_policy_type(), &worker_host,
-      &worker_receiver));
+      host->content_security_policies(), &worker_host, &worker_receiver));
   {
     MockSharedWorker worker(std::move(worker_receiver));
     base::RunLoop().RunUntilIdle();
@@ -282,8 +281,7 @@
     mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
     EXPECT_TRUE(factory_impl.CheckReceivedCreateSharedWorker(
         host->instance().url(), host->instance().name(),
-        host->instance().content_security_policy_type(), &worker_host,
-        &worker_receiver));
+        host->content_security_policies(), &worker_host, &worker_receiver));
     MockSharedWorker worker(std::move(worker_receiver));
 
     // Terminate after starting.
@@ -326,8 +324,7 @@
     mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
     EXPECT_TRUE(factory_impl.CheckReceivedCreateSharedWorker(
         host->instance().url(), host->instance().name(),
-        host->instance().content_security_policy_type(), &worker_host,
-        &worker_receiver));
+        host->content_security_policies(), &worker_host, &worker_receiver));
     MockSharedWorker worker(std::move(worker_receiver));
 
     // Simulate the worker calling OnContextClosed().
diff --git a/content/browser/worker_host/shared_worker_instance_unittest.cc b/content/browser/worker_host/shared_worker_instance_unittest.cc
index 7943703..fcf2b3aa 100644
--- a/content/browser/worker_host/shared_worker_instance_unittest.cc
+++ b/content/browser/worker_host/shared_worker_instance_unittest.cc
@@ -24,7 +24,6 @@
     return SharedWorkerInstance(
         script_url, blink::mojom::ScriptType::kClassic,
         network::mojom::CredentialsMode::kSameOrigin, name, constructor_origin,
-        std::string(), network::mojom::ContentSecurityPolicyType::kReport,
         network::mojom::IPAddressSpace::kPublic,
         blink::mojom::SharedWorkerCreationContextType::kNonsecure);
   }
@@ -272,8 +271,7 @@
     SharedWorkerInstance instance(
         GURL("http://example.com/w.js"), blink::mojom::ScriptType::kClassic,
         network::mojom::CredentialsMode::kSameOrigin, "name",
-        url::Origin::Create(GURL("http://example.com/")), std::string(),
-        network::mojom::ContentSecurityPolicyType::kReport, address_space,
+        url::Origin::Create(GURL("http://example.com/")), address_space,
         blink::mojom::SharedWorkerCreationContextType::kNonsecure);
     EXPECT_EQ(address_space, instance.creation_address_space());
   }
diff --git a/content/browser/worker_host/shared_worker_service_impl.cc b/content/browser/worker_host/shared_worker_service_impl.cc
index 547c703..dc9d1a9 100644
--- a/content/browser/worker_host/shared_worker_service_impl.cc
+++ b/content/browser/worker_host/shared_worker_service_impl.cc
@@ -195,13 +195,12 @@
   auto partition_domain = site_instance->GetPartitionDomain(storage_partition_);
   SharedWorkerInstance instance(
       info->url, info->options->type, info->options->credentials,
-      info->options->name, constructor_origin, info->content_security_policy,
-      info->content_security_policy_type, info->creation_address_space,
+      info->options->name, constructor_origin, info->creation_address_space,
       creation_context_type);
-  host = CreateWorker(*render_frame_host, instance,
-                      std::move(info->outside_fetch_client_settings_object),
-                      partition_domain, message_port,
-                      std::move(blob_url_loader_factory));
+  host = CreateWorker(
+      *render_frame_host, instance, std::move(info->content_security_policies),
+      std::move(info->outside_fetch_client_settings_object), partition_domain,
+      message_port, std::move(blob_url_loader_factory));
   if (!host) {
     ScriptLoadFailed(std::move(client), /*error_message=*/"");
     return;
@@ -271,6 +270,8 @@
 SharedWorkerHost* SharedWorkerServiceImpl::CreateWorker(
     RenderFrameHostImpl& creator,
     const SharedWorkerInstance& instance,
+    std::vector<network::mojom::ContentSecurityPolicyPtr>
+        content_security_policies,
     blink::mojom::FetchClientSettingsObjectPtr
         outside_fetch_client_settings_object,
     const std::string& storage_domain,
@@ -321,7 +322,8 @@
   // creating a new host and therefore new SharedWorker thread.
   auto insertion_result =
       worker_hosts_.insert(std::make_unique<SharedWorkerHost>(
-          this, instance, std::move(site_instance)));
+          this, instance, std::move(site_instance),
+          std::move(content_security_policies)));
   DCHECK(insertion_result.second);
   SharedWorkerHost* host = insertion_result.first->get();
 
diff --git a/content/browser/worker_host/shared_worker_service_impl.h b/content/browser/worker_host/shared_worker_service_impl.h
index fce0acf..f53581c7 100644
--- a/content/browser/worker_host/shared_worker_service_impl.h
+++ b/content/browser/worker_host/shared_worker_service_impl.h
@@ -98,6 +98,8 @@
   SharedWorkerHost* CreateWorker(
       RenderFrameHostImpl& creator,
       const SharedWorkerInstance& instance,
+      std::vector<network::mojom::ContentSecurityPolicyPtr>
+          content_security_policies,
       blink::mojom::FetchClientSettingsObjectPtr
           outside_fetch_client_settings_object,
       const std::string& storage_domain,
diff --git a/content/browser/worker_host/shared_worker_service_impl_unittest.cc b/content/browser/worker_host/shared_worker_service_impl_unittest.cc
index 73a2b7a..fd32611 100644
--- a/content/browser/worker_host/shared_worker_service_impl_unittest.cc
+++ b/content/browser/worker_host/shared_worker_service_impl_unittest.cc
@@ -52,8 +52,8 @@
   auto options = blink::mojom::WorkerOptions::New();
   options->name = name;
   blink::mojom::SharedWorkerInfoPtr info(blink::mojom::SharedWorkerInfo::New(
-      url, std::move(options), std::string(),
-      network::mojom::ContentSecurityPolicyType::kReport,
+      url, std::move(options),
+      std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       network::mojom::IPAddressSpace::kPublic,
       blink::mojom::FetchClientSettingsObject::New(
           network::mojom::ReferrerPolicy::kDefault, GURL(),
@@ -245,7 +245,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kUrl, "name", network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, "name", std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
   base::RunLoop().RunUntilIdle();
@@ -372,7 +372,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kUrl, "name", network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, "name", std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
   base::RunLoop().RunUntilIdle();
@@ -519,7 +519,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kUrl, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
   base::RunLoop().RunUntilIdle();
@@ -582,7 +582,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host0;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver0;
   EXPECT_TRUE(factory0.CheckReceivedCreateSharedWorker(
-      kUrl0, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl0, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host0, &worker_receiver0));
   MockSharedWorker worker0(std::move(worker_receiver0));
   base::RunLoop().RunUntilIdle();
@@ -607,7 +607,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host1;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver1;
   EXPECT_TRUE(factory1.CheckReceivedCreateSharedWorker(
-      kUrl1, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl1, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host1, &worker_receiver1));
   MockSharedWorker worker1(std::move(worker_receiver1));
   base::RunLoop().RunUntilIdle();
@@ -669,7 +669,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host0;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver0;
   EXPECT_TRUE(factory0.CheckReceivedCreateSharedWorker(
-      kUrl, kName0, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName0, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host0, &worker_receiver0));
   MockSharedWorker worker0(std::move(worker_receiver0));
   base::RunLoop().RunUntilIdle();
@@ -694,7 +694,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host1;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver1;
   EXPECT_TRUE(factory1.CheckReceivedCreateSharedWorker(
-      kUrl, kName1, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName1, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host1, &worker_receiver1));
   MockSharedWorker worker1(std::move(worker_receiver1));
   base::RunLoop().RunUntilIdle();
@@ -766,7 +766,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kUrl, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
 
@@ -835,14 +835,14 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host0;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver0;
   EXPECT_TRUE(factory0.CheckReceivedCreateSharedWorker(
-      kUrl0, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl0, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host0, &worker_receiver0));
   MockSharedWorker worker0(std::move(worker_receiver0));
 
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host1;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver1;
   EXPECT_TRUE(factory1.CheckReceivedCreateSharedWorker(
-      kUrl1, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl1, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host1, &worker_receiver1));
   MockSharedWorker worker1(std::move(worker_receiver1));
 
@@ -920,14 +920,14 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host0;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver0;
   EXPECT_TRUE(factory0.CheckReceivedCreateSharedWorker(
-      kUrl, kName0, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName0, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host0, &worker_receiver0));
   MockSharedWorker worker0(std::move(worker_receiver0));
 
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host1;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver1;
   EXPECT_TRUE(factory1.CheckReceivedCreateSharedWorker(
-      kUrl, kName1, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName1, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host1, &worker_receiver1));
   MockSharedWorker worker1(std::move(worker_receiver1));
 
@@ -991,7 +991,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host0;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver0;
   EXPECT_TRUE(factory0.CheckReceivedCreateSharedWorker(
-      kUrl, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host0, &worker_receiver0));
   MockSharedWorker worker0(std::move(worker_receiver0));
 
@@ -1024,7 +1024,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host1;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver1;
   EXPECT_TRUE(factory1.CheckReceivedCreateSharedWorker(
-      kUrl, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host1, &worker_receiver1));
   MockSharedWorker worker1(std::move(worker_receiver1));
 
@@ -1108,7 +1108,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host1;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver1;
   EXPECT_TRUE(factory1.CheckReceivedCreateSharedWorker(
-      kUrl, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host1, &worker_receiver1));
   MockSharedWorker worker1(std::move(worker_receiver1));
 
@@ -1181,7 +1181,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kURL, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kURL, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
   base::RunLoop().RunUntilIdle();
@@ -1292,7 +1292,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kUrl, "name", network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, "name", std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
   base::RunLoop().RunUntilIdle();
@@ -1336,7 +1336,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kUrl, "name", network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, "name", std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
   base::RunLoop().RunUntilIdle();
@@ -1397,7 +1397,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kUrl, kName, network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, kName, std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
   base::RunLoop().RunUntilIdle();
@@ -1478,7 +1478,7 @@
   mojo::Remote<blink::mojom::SharedWorkerHost> worker_host;
   mojo::PendingReceiver<blink::mojom::SharedWorker> worker_receiver;
   EXPECT_TRUE(factory.CheckReceivedCreateSharedWorker(
-      kUrl, "name", network::mojom::ContentSecurityPolicyType::kReport,
+      kUrl, "name", std::vector<network::mojom::ContentSecurityPolicyPtr>(),
       &worker_host, &worker_receiver));
   MockSharedWorker worker(std::move(worker_receiver));
   base::RunLoop().RunUntilIdle();
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 8ff5e39..69e2d68 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -253,6 +253,8 @@
      features::kLazyImageVisibleLoadTimeMetrics},
     {wf::EnablePictureInPicture, media::kPictureInPicture},
     {wf::EnableCacheInlineScriptCode, features::kCacheInlineScriptCode},
+    {wf::EnableAccessibilityAriaVirtualContent,
+     features::kEnableAccessibilityAriaVirtualContent},
     {wf::EnableAccessibilityExposeDisplayNone,
      features::kEnableAccessibilityExposeDisplayNone},
     {wf::EnableAccessibilityExposeHTMLElement,
diff --git a/content/public/browser/shared_worker_instance.cc b/content/public/browser/shared_worker_instance.cc
index 59ff379..d47d957 100644
--- a/content/public/browser/shared_worker_instance.cc
+++ b/content/public/browser/shared_worker_instance.cc
@@ -16,8 +16,6 @@
     network::mojom::CredentialsMode credentials_mode,
     const std::string& name,
     const url::Origin& constructor_origin,
-    const std::string& content_security_policy,
-    network::mojom::ContentSecurityPolicyType security_policy_type,
     network::mojom::IPAddressSpace creation_address_space,
     blink::mojom::SharedWorkerCreationContextType creation_context_type)
     : url_(url),
@@ -25,8 +23,6 @@
       credentials_mode_(credentials_mode),
       name_(name),
       constructor_origin_(constructor_origin),
-      content_security_policy_(content_security_policy),
-      content_security_policy_type_(security_policy_type),
       creation_address_space_(creation_address_space),
       creation_context_type_(creation_context_type) {
   // Ensure the same-origin policy is enforced correctly.
diff --git a/content/public/browser/shared_worker_instance.h b/content/public/browser/shared_worker_instance.h
index b3f1c35..4bfd64e 100644
--- a/content/public/browser/shared_worker_instance.h
+++ b/content/public/browser/shared_worker_instance.h
@@ -34,8 +34,6 @@
       network::mojom::CredentialsMode credentials_mode,
       const std::string& name,
       const url::Origin& constructor_origin,
-      const std::string& content_security_policy,
-      network::mojom::ContentSecurityPolicyType content_security_policy_type,
       network::mojom::IPAddressSpace creation_address_space,
       blink::mojom::SharedWorkerCreationContextType creation_context_type);
   SharedWorkerInstance(const SharedWorkerInstance& other);
@@ -60,13 +58,6 @@
     return credentials_mode_;
   }
   const url::Origin& constructor_origin() const { return constructor_origin_; }
-  const std::string& content_security_policy() const {
-    return content_security_policy_;
-  }
-  network::mojom::ContentSecurityPolicyType content_security_policy_type()
-      const {
-    return content_security_policy_type_;
-  }
   network::mojom::IPAddressSpace creation_address_space() const {
     return creation_address_space_;
   }
@@ -88,8 +79,6 @@
   // https://html.spec.whatwg.org/multipage/workers.html#concept-sharedworkerglobalscope-constructor-origin
   const url::Origin constructor_origin_;
 
-  const std::string content_security_policy_;
-  const network::mojom::ContentSecurityPolicyType content_security_policy_type_;
   const network::mojom::IPAddressSpace creation_address_space_;
   const blink::mojom::SharedWorkerCreationContextType creation_context_type_;
 };
diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc
index 7c7fae7..6838eed 100644
--- a/content/public/common/content_switch_dependent_feature_overrides.cc
+++ b/content/public/common/content_switch_dependent_feature_overrides.cc
@@ -42,9 +42,6 @@
        std::cref(network::features::kCrossOriginIsolated),
        base::FeatureList::OVERRIDE_ENABLE_FEATURE},
       {switches::kEnableExperimentalWebPlatformFeatures,
-       std::cref(network::features::kCrossOriginEmbedderPolicy),
-       base::FeatureList::OVERRIDE_ENABLE_FEATURE},
-      {switches::kEnableExperimentalWebPlatformFeatures,
        std::cref(features::kDocumentPolicyNegotiation),
        base::FeatureList::OVERRIDE_ENABLE_FEATURE},
       {switches::kEnableExperimentalWebPlatformFeatures,
diff --git a/content/renderer/content_security_policy_util.cc b/content/renderer/content_security_policy_util.cc
index 6a78f9c5..65f3ed6 100644
--- a/content/renderer/content_security_policy_util.cc
+++ b/content/renderer/content_security_policy_util.cc
@@ -192,4 +192,13 @@
           ToWebVectorOfWebStrings(std::move(policy_in->parsing_errors))};
 }
 
+blink::WebVector<blink::WebContentSecurityPolicy> ToWebContentSecurityPolicies(
+    std::vector<network::mojom::ContentSecurityPolicyPtr> list_in) {
+  blink::WebVector<blink::WebContentSecurityPolicy> list_out(list_in.size());
+  size_t i = 0;
+  for (auto& element : list_in)
+    list_out[i++] = ToWebContentSecurityPolicy(std::move(element));
+  return list_out;
+}
+
 }  // namespace content
diff --git a/content/renderer/content_security_policy_util.h b/content/renderer/content_security_policy_util.h
index 5c45843..52fa24b 100644
--- a/content/renderer/content_security_policy_util.h
+++ b/content/renderer/content_security_policy_util.h
@@ -8,6 +8,7 @@
 #include "content/common/content_export.h"
 #include "services/network/public/mojom/content_security_policy.mojom-forward.h"
 #include "third_party/blink/public/platform/web_content_security_policy_struct.h"
+#include "third_party/blink/public/platform/web_vector.h"
 
 namespace content {
 
@@ -27,6 +28,11 @@
 blink::WebContentSecurityPolicy ToWebContentSecurityPolicy(
     network::mojom::ContentSecurityPolicyPtr);
 
+// Helper function to perform ToWebContentSecurityPolicy on an array.
+CONTENT_EXPORT
+blink::WebVector<blink::WebContentSecurityPolicy> ToWebContentSecurityPolicies(
+    std::vector<network::mojom::ContentSecurityPolicyPtr>);
+
 }  // namespace content
 
 #endif /* CONTENT_RENDERER_CONTENT_SECURITY_POLICY_UTIL_H_ */
diff --git a/content/renderer/worker/embedded_shared_worker_stub.cc b/content/renderer/worker/embedded_shared_worker_stub.cc
index 5b741ed..36d9a8ff 100644
--- a/content/renderer/worker/embedded_shared_worker_stub.cc
+++ b/content/renderer/worker/embedded_shared_worker_stub.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/feature_list.h"
 #include "content/public/common/network_service_util.h"
+#include "content/renderer/content_security_policy_util.h"
 #include "content/renderer/loader/web_worker_fetch_context_impl.h"
 #include "content/renderer/worker/fetch_client_settings_object_helpers.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
@@ -114,8 +115,8 @@
       blink::WebString::FromUTF8(info->options->name),
       blink::WebSecurityOrigin(constructor_origin),
       blink::WebString::FromUTF8(user_agent), ua_metadata,
-      blink::WebString::FromUTF8(info->content_security_policy),
-      info->content_security_policy_type, info->creation_address_space,
+      ToWebContentSecurityPolicies(std::move(info->content_security_policies)),
+      info->creation_address_space,
       FetchClientSettingsObjectFromMojomToWeb(
           info->outside_fetch_client_settings_object),
       appcache_host_id, devtools_worker_token, std::move(content_settings),
diff --git a/content/test/data/accessibility/aria/aria-touchpassthrough-expected-blink.txt b/content/test/data/accessibility/aria/aria-touchpassthrough-expected-blink.txt
new file mode 100644
index 0000000..7aa8e6e2
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-touchpassthrough-expected-blink.txt
@@ -0,0 +1,5 @@
+rootWebArea
+++genericContainer ignored
+++++genericContainer
+++++++canvas name='c1'
+++++++canvas name='c2' touchPassthrough=true
diff --git a/content/test/data/accessibility/aria/aria-touchpassthrough.html b/content/test/data/accessibility/aria/aria-touchpassthrough.html
new file mode 100644
index 0000000..791b8234
--- /dev/null
+++ b/content/test/data/accessibility/aria/aria-touchpassthrough.html
@@ -0,0 +1,10 @@
+<!--
+@BLINK-ALLOW:touchPassthrough*
+-->
+<!DOCTYPE html>
+<html>
+<body>
+  <canvas width=400 height=100 aria-label="c1"></canvas>
+  <canvas width=400 height=100 aria-label="c2" aria-touchpassthrough="true"></canvas>
+</body>
+</html>
diff --git a/content/test/test_web_contents.cc b/content/test/test_web_contents.cc
index 5a47237..57498f552 100644
--- a/content/test/test_web_contents.cc
+++ b/content/test/test_web_contents.cc
@@ -49,8 +49,6 @@
     : WebContentsImpl(browser_context),
       delegate_view_override_(nullptr),
       web_preferences_changed_counter_(nullptr),
-      expect_set_history_offset_and_length_(false),
-      expect_set_history_offset_and_length_history_length_(0),
       pause_subresource_loading_called_(false),
       audio_group_id_(base::UnguessableToken::Create()),
       is_page_frozen_(false) {
@@ -81,7 +79,6 @@
 }
 
 TestWebContents::~TestWebContents() {
-  EXPECT_FALSE(expect_set_history_offset_and_length_);
 }
 
 TestRenderFrameHost* TestWebContents::GetMainFrame() {
@@ -316,23 +313,6 @@
   pending_contents_[key] = CreatedWindow(std::move(contents), target_url);
 }
 
-void TestWebContents::ExpectSetHistoryOffsetAndLength(int history_offset,
-                                                      int history_length) {
-  expect_set_history_offset_and_length_ = true;
-  expect_set_history_offset_and_length_history_offset_ = history_offset;
-  expect_set_history_offset_and_length_history_length_ = history_length;
-}
-
-void TestWebContents::SetHistoryOffsetAndLength(int history_offset,
-                                                int history_length) {
-  EXPECT_TRUE(expect_set_history_offset_and_length_);
-  expect_set_history_offset_and_length_ = false;
-  EXPECT_EQ(expect_set_history_offset_and_length_history_offset_,
-            history_offset);
-  EXPECT_EQ(expect_set_history_offset_and_length_history_length_,
-            history_length);
-}
-
 RenderFrameHostDelegate* TestWebContents::CreateNewWindow(
     RenderFrameHost* opener,
     const mojom::CreateNewWindowParams& params,
diff --git a/content/test/test_web_contents.h b/content/test/test_web_contents.h
index 5f75237..20bff22 100644
--- a/content/test/test_web_contents.h
+++ b/content/test/test_web_contents.h
@@ -115,17 +115,6 @@
   void AddPendingContents(std::unique_ptr<WebContentsImpl> contents,
                           const GURL& target_url);
 
-  // Establish expected arguments for |SetHistoryOffsetAndLength()|. When
-  // |SetHistoryOffsetAndLength()| is called, the arguments are compared
-  // with the expected arguments specified here.
-  void ExpectSetHistoryOffsetAndLength(int history_offset,
-                                       int history_length);
-
-  // Compares the arguments passed in with the expected arguments passed in
-  // to |ExpectSetHistoryOffsetAndLength()|.
-  void SetHistoryOffsetAndLength(int history_offset,
-                                 int history_length) override;
-
   bool GetPauseSubresourceLoadingCalled() override;
 
   void ResetPauseSubresourceLoadingCalled() override;
@@ -191,10 +180,6 @@
 
   // See set_web_preferences_changed_counter() above. May be nullptr.
   int* web_preferences_changed_counter_;
-  // Expectations for arguments of |SetHistoryOffsetAndLength()|.
-  bool expect_set_history_offset_and_length_;
-  int expect_set_history_offset_and_length_history_offset_;
-  int expect_set_history_offset_and_length_history_length_;
   std::string save_frame_headers_;
   base::string16 suggested_filename_;
   // Map keyed by image URL. Values are <id, callback> pairs.
diff --git a/gpu/command_buffer/client/BUILD.gn b/gpu/command_buffer/client/BUILD.gn
index 2cbf589..eec19c8 100644
--- a/gpu/command_buffer/client/BUILD.gn
+++ b/gpu/command_buffer/client/BUILD.gn
@@ -316,6 +316,8 @@
     sources += [
       "dawn_client_memory_transfer_service.cc",
       "dawn_client_memory_transfer_service.h",
+      "dawn_client_serializer.cc",
+      "dawn_client_serializer.h",
     ]
   }
 }
diff --git a/gpu/command_buffer/client/dawn_client_serializer.cc b/gpu/command_buffer/client/dawn_client_serializer.cc
new file mode 100644
index 0000000..a530393
--- /dev/null
+++ b/gpu/command_buffer/client/dawn_client_serializer.cc
@@ -0,0 +1,182 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/client/dawn_client_serializer.h"
+
+#include "base/numerics/checked_math.h"
+#include "base/trace_event/trace_event.h"
+#include "gpu/command_buffer/client/dawn_client_memory_transfer_service.h"
+#include "gpu/command_buffer/client/shared_memory_limits.h"
+#include "gpu/command_buffer/client/webgpu_cmd_helper.h"
+#include "gpu/command_buffer/client/webgpu_implementation.h"
+
+namespace gpu {
+namespace webgpu {
+
+DawnClientSerializer::DawnClientSerializer(
+    DawnDeviceClientID device_client_id,
+    WebGPUCmdHelper* helper,
+    DawnClientMemoryTransferService* memory_transfer_service,
+    std::unique_ptr<TransferBuffer> c2s_transfer_buffer)
+    : device_client_id_(device_client_id),
+      helper_(helper),
+      memory_transfer_service_(memory_transfer_service),
+      c2s_transfer_buffer_(std::move(c2s_transfer_buffer)),
+      c2s_buffer_(helper_, c2s_transfer_buffer_.get()) {
+  DCHECK(helper_);
+  DCHECK(c2s_transfer_buffer_ && c2s_transfer_buffer_->HaveBuffer());
+
+  const SharedMemoryLimits& limits = SharedMemoryLimits::ForWebGPUContext();
+  c2s_buffer_default_size_ = limits.start_transfer_buffer_size;
+  DCHECK_GT(c2s_buffer_default_size_, 0u);
+
+  DCHECK(memory_transfer_service_);
+  dawn_wire::WireClientDescriptor descriptor = {};
+  descriptor.serializer = this;
+  descriptor.memoryTransferService = memory_transfer_service_;
+  wire_client_ = std::make_unique<dawn_wire::WireClient>(descriptor);
+}
+
+DawnClientSerializer::~DawnClientSerializer() {
+  // Destroy the wire client before anything else because it might still call
+  // GetCmdSpace so the rest of the serializer must still be valid.
+  wire_client_ = nullptr;
+}
+
+// This function can only be called once for each DawnClientSerializer
+// object (before any call of GetCmdSpace()).
+void DawnClientSerializer::RequestDeviceCreation(
+    uint32_t requested_adapter_id,
+    const WGPUDeviceProperties& requested_device_properties) {
+  DCHECK(!c2s_buffer_.valid());
+  DCHECK_EQ(0u, c2s_put_offset_);
+
+  size_t serialized_device_properties_size =
+      dawn_wire::SerializedWGPUDevicePropertiesSize(
+          &requested_device_properties);
+  DCHECK_NE(0u, serialized_device_properties_size);
+
+  DCHECK_LE(serialized_device_properties_size,
+            c2s_transfer_buffer_->GetMaxSize());
+  c2s_buffer_.Reset(serialized_device_properties_size);
+
+  dawn_wire::SerializeWGPUDeviceProperties(
+      &requested_device_properties,
+      reinterpret_cast<char*>(c2s_buffer_.address()));
+
+  helper_->RequestDevice(device_client_id_, requested_adapter_id,
+                         c2s_buffer_.shm_id(), c2s_buffer_.offset(),
+                         serialized_device_properties_size);
+  c2s_buffer_.Release();
+
+  helper_->Flush();
+}
+
+size_t DawnClientSerializer::GetMaximumAllocationSize() const {
+  return c2s_transfer_buffer_->GetMaxSize();
+}
+
+void* DawnClientSerializer::GetCmdSpace(size_t size) {
+  // Note: Dawn will never call this function with |size| >
+  // GetMaximumAllocationSize().
+  DCHECK_LE(size, GetMaximumAllocationSize());
+
+  // The buffer size must be initialized before any commands are serialized.
+  DCHECK_NE(c2s_buffer_default_size_, 0u);
+
+  DCHECK_LE(c2s_put_offset_, c2s_buffer_.size());
+  const bool overflows_remaining_space =
+      size > static_cast<size_t>(c2s_buffer_.size() - c2s_put_offset_);
+
+  if (LIKELY(c2s_buffer_.valid() && !overflows_remaining_space)) {
+    // If the buffer is valid and has sufficient space, return the
+    // pointer and increment the offset.
+    uint8_t* ptr = static_cast<uint8_t*>(c2s_buffer_.address());
+    ptr += c2s_put_offset_;
+
+    c2s_put_offset_ += static_cast<uint32_t>(size);
+    return ptr;
+  }
+
+  if (!c2s_transfer_buffer_) {
+    // The serializer hit a fatal error and was disconnected.
+    return nullptr;
+  }
+
+  // Otherwise, flush and reset the command stream.
+  Flush();
+
+  uint32_t allocation_size =
+      std::max(c2s_buffer_default_size_, static_cast<uint32_t>(size));
+  TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("gpu.dawn"),
+               "DawnClientSerializer::GetCmdSpace", "bytes", allocation_size);
+  c2s_buffer_.Reset(allocation_size);
+
+  if (!c2s_buffer_.valid() || c2s_buffer_.size() < size) {
+    DLOG(ERROR) << "Dawn wire transfer buffer allocation failed";
+    HandleGpuControlLostContext();
+    return nullptr;
+  }
+
+  c2s_put_offset_ = size;
+  return c2s_buffer_.address();
+}
+
+bool DawnClientSerializer::Flush() {
+  if (c2s_buffer_.valid()) {
+    TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("gpu.dawn"),
+                 "DawnClientSerializer::Flush", "bytes", c2s_put_offset_);
+
+    TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("gpu.dawn"),
+                           "DawnCommands", TRACE_EVENT_FLAG_FLOW_OUT,
+                           (static_cast<uint64_t>(c2s_buffer_.shm_id()) << 32) +
+                               c2s_buffer_.offset());
+
+    c2s_buffer_.Shrink(c2s_put_offset_);
+    helper_->DawnCommands(device_client_id_, c2s_buffer_.shm_id(),
+                          c2s_buffer_.offset(), c2s_put_offset_);
+    c2s_put_offset_ = 0;
+    c2s_buffer_.Release();
+    client_awaiting_flush_ = false;
+  }
+
+  memory_transfer_service_->FreeHandles(helper_);
+  return true;
+}
+
+void DawnClientSerializer::SetClientAwaitingFlush(bool awaiting_flush) {
+  // If awaiting_flush is true, but the c2s_buffer_ is invalid (empty), that
+  // means the last command right before this caused a flush. Another flush is
+  // not needed.
+  client_awaiting_flush_ = awaiting_flush && c2s_buffer_.valid();
+}
+
+void DawnClientSerializer::HandleGpuControlLostContext() {
+  // Immediately forget pending commands.
+  c2s_buffer_.Discard();
+  c2s_transfer_buffer_ = nullptr;
+
+  // Disconnect the wire client. WebGPU commands will become a noop, and the
+  // device will receive a Lost event.
+  // NOTE: This assumes single-threaded operation.
+  wire_client_->Disconnect();
+}
+
+WGPUDevice DawnClientSerializer::GetDevice() const {
+  return wire_client_->GetDevice();
+}
+
+ReservedTexture DawnClientSerializer::ReserveTexture() {
+  dawn_wire::ReservedTexture reservation =
+      wire_client_->ReserveTexture(GetDevice());
+  return {reservation.texture, reservation.id, reservation.generation};
+}
+
+bool DawnClientSerializer::HandleCommands(const char* commands,
+                                          size_t command_size) {
+  return wire_client_->HandleCommands(commands, command_size);
+}
+
+}  // namespace webgpu
+}  // namespace gpu
diff --git a/gpu/command_buffer/client/dawn_client_serializer.h b/gpu/command_buffer/client/dawn_client_serializer.h
new file mode 100644
index 0000000..8a4bc656
--- /dev/null
+++ b/gpu/command_buffer/client/dawn_client_serializer.h
@@ -0,0 +1,73 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_CLIENT_DAWN_CLIENT_SERIALIZER_H_
+#define GPU_COMMAND_BUFFER_CLIENT_DAWN_CLIENT_SERIALIZER_H_
+
+#include <dawn_wire/WireClient.h>
+
+#include <memory>
+
+#include "gpu/command_buffer/client/transfer_buffer.h"
+#include "gpu/command_buffer/client/webgpu_interface.h"
+
+namespace gpu {
+
+class TransferBuffer;
+
+namespace webgpu {
+
+class DawnClientMemoryTransferService;
+class WebGPUCmdHelper;
+
+class DawnClientSerializer final : public dawn_wire::CommandSerializer {
+ public:
+  DawnClientSerializer(DawnDeviceClientID device_client_id,
+                       WebGPUCmdHelper* helper,
+                       DawnClientMemoryTransferService* memory_transfer_service,
+                       std::unique_ptr<TransferBuffer> c2s_transfer_buffer);
+  ~DawnClientSerializer() override;
+
+  // Send WGPUDeviceProperties to the server side
+  // Note that this function should only be called once for each
+  // DawnClientSerializer object.
+  void RequestDeviceCreation(
+      uint32_t requested_adapter_id,
+      const WGPUDeviceProperties& requested_device_properties);
+
+  // dawn_wire::CommandSerializer implementation
+  size_t GetMaximumAllocationSize() const final;
+  void* GetCmdSpace(size_t size) final;
+  bool Flush() final;
+
+  void SetClientAwaitingFlush(bool awaiting_flush);
+  bool ClientAwaitingFlush() const { return client_awaiting_flush_; }
+
+  // Called upon context lost.
+  void HandleGpuControlLostContext();
+
+  // For the WebGPUInterface implementation of WebGPUImplementation
+  WGPUDevice GetDevice() const;
+  ReservedTexture ReserveTexture();
+  bool HandleCommands(const char* commands, size_t command_size);
+
+ private:
+  DawnDeviceClientID device_client_id_;
+  WebGPUCmdHelper* helper_;
+  DawnClientMemoryTransferService* memory_transfer_service_;
+
+  std::unique_ptr<dawn_wire::WireClient> wire_client_;
+
+  uint32_t c2s_buffer_default_size_ = 0;
+  uint32_t c2s_put_offset_ = 0;
+  std::unique_ptr<TransferBuffer> c2s_transfer_buffer_;
+  ScopedTransferBufferPtr c2s_buffer_;
+
+  bool client_awaiting_flush_ = false;
+};
+
+}  // namespace webgpu
+}  // namespace gpu
+
+#endif  // GPU_COMMAND_BUFFER_CLIENT_DAWN_CLIENT_SERIALIZER_H_
diff --git a/gpu/command_buffer/client/webgpu_implementation.cc b/gpu/command_buffer/client/webgpu_implementation.cc
index b3e6680..98ee180 100644
--- a/gpu/command_buffer/client/webgpu_implementation.cc
+++ b/gpu/command_buffer/client/webgpu_implementation.cc
@@ -12,6 +12,7 @@
 #include "base/numerics/checked_math.h"
 #include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/client/dawn_client_memory_transfer_service.h"
+#include "gpu/command_buffer/client/dawn_client_serializer.h"
 #include "gpu/command_buffer/client/gpu_control.h"
 #include "gpu/command_buffer/client/shared_memory_limits.h"
 
@@ -20,173 +21,6 @@
 namespace gpu {
 namespace webgpu {
 
-#if BUILDFLAG(USE_DAWN)
-WebGPUCommandSerializer::WebGPUCommandSerializer(
-    DawnDeviceClientID device_client_id,
-    WebGPUCmdHelper* helper,
-    DawnClientMemoryTransferService* memory_transfer_service,
-    std::unique_ptr<TransferBuffer> c2s_transfer_buffer)
-    : device_client_id_(device_client_id),
-      helper_(helper),
-      memory_transfer_service_(memory_transfer_service),
-      c2s_transfer_buffer_(std::move(c2s_transfer_buffer)),
-      c2s_buffer_(helper_, c2s_transfer_buffer_.get()) {
-  DCHECK(helper_);
-  DCHECK(c2s_transfer_buffer_ && c2s_transfer_buffer_->HaveBuffer());
-
-  const SharedMemoryLimits& limits = SharedMemoryLimits::ForWebGPUContext();
-  c2s_buffer_default_size_ = limits.start_transfer_buffer_size;
-  DCHECK_GT(c2s_buffer_default_size_, 0u);
-
-  DCHECK(memory_transfer_service_);
-  dawn_wire::WireClientDescriptor descriptor = {};
-  descriptor.serializer = this;
-  descriptor.memoryTransferService = memory_transfer_service_;
-  wire_client_ = std::make_unique<dawn_wire::WireClient>(descriptor);
-}
-
-WebGPUCommandSerializer::~WebGPUCommandSerializer() {
-  // Destroy the wire client before anything else because it might still call
-  // GetCmdSpace so the rest of the serializer must still be valid.
-  wire_client_ = nullptr;
-}
-
-// This function can only be called once for each WebGPUCommandSerializer
-// object (before any call of GetCmdSpace()).
-void WebGPUCommandSerializer::RequestDeviceCreation(
-    uint32_t requested_adapter_id,
-    const WGPUDeviceProperties& requested_device_properties) {
-  DCHECK(!c2s_buffer_.valid());
-  DCHECK_EQ(0u, c2s_put_offset_);
-
-  size_t serialized_device_properties_size =
-      dawn_wire::SerializedWGPUDevicePropertiesSize(
-          &requested_device_properties);
-  DCHECK_NE(0u, serialized_device_properties_size);
-
-  DCHECK_LE(serialized_device_properties_size,
-            c2s_transfer_buffer_->GetMaxSize());
-  c2s_buffer_.Reset(serialized_device_properties_size);
-
-  dawn_wire::SerializeWGPUDeviceProperties(
-      &requested_device_properties,
-      reinterpret_cast<char*>(c2s_buffer_.address()));
-
-  helper_->RequestDevice(device_client_id_, requested_adapter_id,
-                         c2s_buffer_.shm_id(), c2s_buffer_.offset(),
-                         serialized_device_properties_size);
-  c2s_buffer_.Release();
-
-  helper_->Flush();
-}
-
-size_t WebGPUCommandSerializer::GetMaximumAllocationSize() const {
-  return c2s_transfer_buffer_->GetMaxSize();
-}
-
-void* WebGPUCommandSerializer::GetCmdSpace(size_t size) {
-  // Note: Dawn will never call this function with |size| >
-  // GetMaximumAllocationSize().
-  DCHECK_LE(size, GetMaximumAllocationSize());
-
-  // The buffer size must be initialized before any commands are serialized.
-  DCHECK_NE(c2s_buffer_default_size_, 0u);
-
-  DCHECK_LE(c2s_put_offset_, c2s_buffer_.size());
-  const bool overflows_remaining_space =
-      size > static_cast<size_t>(c2s_buffer_.size() - c2s_put_offset_);
-
-  if (LIKELY(c2s_buffer_.valid() && !overflows_remaining_space)) {
-    // If the buffer is valid and has sufficient space, return the
-    // pointer and increment the offset.
-    uint8_t* ptr = static_cast<uint8_t*>(c2s_buffer_.address());
-    ptr += c2s_put_offset_;
-
-    c2s_put_offset_ += static_cast<uint32_t>(size);
-    return ptr;
-  }
-
-  if (!c2s_transfer_buffer_) {
-    // The serializer hit a fatal error and was disconnected.
-    return nullptr;
-  }
-
-  // Otherwise, flush and reset the command stream.
-  Flush();
-
-  uint32_t allocation_size =
-      std::max(c2s_buffer_default_size_, static_cast<uint32_t>(size));
-  TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("gpu.dawn"),
-               "WebGPUCommandSerializer::GetCmdSpace", "bytes",
-               allocation_size);
-  c2s_buffer_.Reset(allocation_size);
-
-  if (!c2s_buffer_.valid() || c2s_buffer_.size() < size) {
-    DLOG(ERROR) << "Dawn wire transfer buffer allocation failed";
-    HandleGpuControlLostContext();
-    return nullptr;
-  }
-
-  c2s_put_offset_ = size;
-  return c2s_buffer_.address();
-}
-
-bool WebGPUCommandSerializer::Flush() {
-  if (c2s_buffer_.valid()) {
-    TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("gpu.dawn"),
-                 "WebGPUCommandSerializer::Flush", "bytes", c2s_put_offset_);
-
-    TRACE_EVENT_WITH_FLOW0(TRACE_DISABLED_BY_DEFAULT("gpu.dawn"),
-                           "DawnCommands", TRACE_EVENT_FLAG_FLOW_OUT,
-                           (static_cast<uint64_t>(c2s_buffer_.shm_id()) << 32) +
-                               c2s_buffer_.offset());
-
-    c2s_buffer_.Shrink(c2s_put_offset_);
-    helper_->DawnCommands(device_client_id_, c2s_buffer_.shm_id(),
-                          c2s_buffer_.offset(), c2s_put_offset_);
-    c2s_put_offset_ = 0;
-    c2s_buffer_.Release();
-    client_awaiting_flush_ = false;
-  }
-
-  memory_transfer_service_->FreeHandles(helper_);
-  return true;
-}
-
-void WebGPUCommandSerializer::SetClientAwaitingFlush(bool awaiting_flush) {
-  // If awaiting_flush is true, but the c2s_buffer_ is invalid (empty), that
-  // means the last command right before this caused a flush. Another flush is
-  // not needed.
-  client_awaiting_flush_ = awaiting_flush && c2s_buffer_.valid();
-}
-
-void WebGPUCommandSerializer::HandleGpuControlLostContext() {
-  // Immediately forget pending commands.
-  c2s_buffer_.Discard();
-  c2s_transfer_buffer_ = nullptr;
-
-  // Disconnect the wire client. WebGPU commands will become a noop, and the
-  // device will receive a Lost event.
-  // NOTE: This assumes single-threaded operation.
-  wire_client_->Disconnect();
-}
-
-WGPUDevice WebGPUCommandSerializer::GetDevice() const {
-  return wire_client_->GetDevice();
-}
-
-ReservedTexture WebGPUCommandSerializer::ReserveTexture() {
-  dawn_wire::ReservedTexture reservation =
-      wire_client_->ReserveTexture(GetDevice());
-  return {reservation.texture, reservation.id, reservation.generation};
-}
-
-bool WebGPUCommandSerializer::HandleCommands(const char* commands,
-                                             size_t command_size) {
-  return wire_client_->HandleCommands(commands, command_size);
-}
-#endif
-
 // Include the auto-generated part of this file. We split this because it means
 // we can easily edit the non-auto generated parts right here in this file
 // instead of having to edit some template or the code generator.
@@ -436,7 +270,7 @@
           reinterpret_cast<const cmds::DawnReturnCommandsInfo*>(data.data());
       DawnDeviceClientID device_client_id =
           dawn_return_commands_info->header.device_client_id;
-      WebGPUCommandSerializer* command_serializer =
+      DawnClientSerializer* command_serializer =
           GetCommandSerializerWithDeviceClientID(device_client_id);
       CHECK(command_serializer);
 
@@ -521,7 +355,7 @@
 }
 
 #if BUILDFLAG(USE_DAWN)
-WebGPUCommandSerializer*
+DawnClientSerializer*
 WebGPUImplementation::GetCommandSerializerWithDeviceClientID(
     DawnDeviceClientID device_client_id) const {
   auto command_serializer = command_serializers_.find(device_client_id);
@@ -553,9 +387,9 @@
     return false;
   }
   command_serializers_[device_client_id] =
-      std::make_unique<WebGPUCommandSerializer>(device_client_id, helper_,
-                                                memory_transfer_service_.get(),
-                                                std::move(c2s_transfer_buffer));
+      std::make_unique<DawnClientSerializer>(device_client_id, helper_,
+                                             memory_transfer_service_.get(),
+                                             std::move(c2s_transfer_buffer));
   return true;
 }
 #endif
@@ -569,7 +403,7 @@
 
 void WebGPUImplementation::FlushCommands(DawnDeviceClientID device_client_id) {
 #if BUILDFLAG(USE_DAWN)
-  WebGPUCommandSerializer* command_serializer =
+  DawnClientSerializer* command_serializer =
       GetCommandSerializerWithDeviceClientID(device_client_id);
   DCHECK(command_serializer);
   command_serializer->Flush();
@@ -581,7 +415,7 @@
     DawnDeviceClientID device_client_id,
     bool* needs_flush) {
 #if BUILDFLAG(USE_DAWN)
-  WebGPUCommandSerializer* command_serializer =
+  DawnClientSerializer* command_serializer =
       GetCommandSerializerWithDeviceClientID(device_client_id);
   DCHECK(command_serializer);
 
@@ -605,7 +439,7 @@
 void WebGPUImplementation::FlushAwaitingCommands(
     DawnDeviceClientID device_client_id) {
 #if BUILDFLAG(USE_DAWN)
-  WebGPUCommandSerializer* command_serializer =
+  DawnClientSerializer* command_serializer =
       GetCommandSerializerWithDeviceClientID(device_client_id);
   DCHECK(command_serializer);
   if (command_serializer->ClientAwaitingFlush()) {
@@ -625,7 +459,7 @@
 WGPUDevice WebGPUImplementation::GetDevice(
     DawnDeviceClientID device_client_id) {
 #if BUILDFLAG(USE_DAWN)
-  WebGPUCommandSerializer* command_serializer =
+  DawnClientSerializer* command_serializer =
       GetCommandSerializerWithDeviceClientID(device_client_id);
   DCHECK(command_serializer);
   return command_serializer->GetDevice();
@@ -638,7 +472,7 @@
 ReservedTexture WebGPUImplementation::ReserveTexture(
     DawnDeviceClientID device_client_id) {
 #if BUILDFLAG(USE_DAWN)
-  WebGPUCommandSerializer* command_serializer =
+  DawnClientSerializer* command_serializer =
       GetCommandSerializerWithDeviceClientID(device_client_id);
   DCHECK(command_serializer);
   return command_serializer->ReserveTexture();
@@ -725,7 +559,7 @@
   // and need to be resolved prior to the AssociateMailbox command. Otherwise
   // the service side might not know, for example that the previous texture
   // using that ID has been released.
-  WebGPUCommandSerializer* command_serializer =
+  DawnClientSerializer* command_serializer =
       GetCommandSerializerWithDeviceClientID(device_client_id);
   DCHECK(command_serializer);
   command_serializer->Flush();
@@ -741,7 +575,7 @@
 #if BUILDFLAG(USE_DAWN)
   // Flush previous Dawn commands that might be rendering to the texture, prior
   // to Dissociating the shared image from that texture.
-  WebGPUCommandSerializer* command_serializer =
+  DawnClientSerializer* command_serializer =
       GetCommandSerializerWithDeviceClientID(device_client_id);
   DCHECK(command_serializer);
   command_serializer->Flush();
diff --git a/gpu/command_buffer/client/webgpu_implementation.h b/gpu/command_buffer/client/webgpu_implementation.h
index 5677a427..ac288f8a 100644
--- a/gpu/command_buffer/client/webgpu_implementation.h
+++ b/gpu/command_buffer/client/webgpu_implementation.h
@@ -25,55 +25,7 @@
 namespace webgpu {
 
 class DawnClientMemoryTransferService;
-
-#if BUILDFLAG(USE_DAWN)
-class WebGPUCommandSerializer final : public dawn_wire::CommandSerializer {
- public:
-  WebGPUCommandSerializer(
-      DawnDeviceClientID device_client_id,
-      WebGPUCmdHelper* helper,
-      DawnClientMemoryTransferService* memory_transfer_service,
-      std::unique_ptr<TransferBuffer> c2s_transfer_buffer);
-  ~WebGPUCommandSerializer() override;
-
-  // Send WGPUDeviceProperties to the server side
-  // Note that this function should only be called once for each
-  // WebGPUCommandSerializer object.
-  void RequestDeviceCreation(
-      uint32_t requested_adapter_id,
-      const WGPUDeviceProperties& requested_device_properties);
-
-  // dawn_wire::CommandSerializer implementation
-  size_t GetMaximumAllocationSize() const final;
-  void* GetCmdSpace(size_t size) final;
-  bool Flush() final;
-
-  void SetClientAwaitingFlush(bool awaiting_flush);
-  bool ClientAwaitingFlush() const { return client_awaiting_flush_; }
-
-  // Called upon context lost.
-  void HandleGpuControlLostContext();
-
-  // For the WebGPUInterface implementation of WebGPUImplementation
-  WGPUDevice GetDevice() const;
-  ReservedTexture ReserveTexture();
-  bool HandleCommands(const char* commands, size_t command_size);
-
- private:
-  DawnDeviceClientID device_client_id_;
-  WebGPUCmdHelper* helper_;
-  DawnClientMemoryTransferService* memory_transfer_service_;
-
-  std::unique_ptr<dawn_wire::WireClient> wire_client_;
-
-  uint32_t c2s_buffer_default_size_ = 0;
-  uint32_t c2s_put_offset_ = 0;
-  std::unique_ptr<TransferBuffer> c2s_transfer_buffer_;
-  ScopedTransferBufferPtr c2s_buffer_;
-
-  bool client_awaiting_flush_ = false;
-};
-#endif
+class DawnClientSerializer;
 
 class WEBGPU_EXPORT WebGPUImplementation final : public WebGPUInterface,
                                                  public ImplementationBase {
@@ -188,12 +140,12 @@
 #if BUILDFLAG(USE_DAWN)
   std::unique_ptr<DawnClientMemoryTransferService> memory_transfer_service_;
 
-  WebGPUCommandSerializer* GetCommandSerializerWithDeviceClientID(
+  DawnClientSerializer* GetCommandSerializerWithDeviceClientID(
       DawnDeviceClientID device_client_id) const;
   void FlushAllCommandSerializers();
   void ClearAllCommandSerializers();
   bool AddNewCommandSerializer(DawnDeviceClientID device_client_id);
-  base::flat_map<DawnDeviceClientID, std::unique_ptr<WebGPUCommandSerializer>>
+  base::flat_map<DawnDeviceClientID, std::unique_ptr<DawnClientSerializer>>
       command_serializers_;
 #endif
   DawnProcTable procs_ = {};
diff --git a/gpu/command_buffer/service/shared_image_factory.cc b/gpu/command_buffer/service/shared_image_factory.cc
index 490c25bc..88dd343 100644
--- a/gpu/command_buffer/service/shared_image_factory.cc
+++ b/gpu/command_buffer/service/shared_image_factory.cc
@@ -9,6 +9,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/trace_event/memory_dump_manager.h"
 #include "build/build_config.h"
+#include "build/chromecast_buildflags.h"
 #include "build/chromeos_buildflags.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
@@ -28,11 +29,12 @@
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/trace_util.h"
 
-#if defined(USE_X11) && BUILDFLAG(ENABLE_VULKAN)
+#if defined(OS_LINUX) && defined(USE_OZONE) && BUILDFLAG(ENABLE_VULKAN)
 #include "ui/base/ui_base_features.h"  // nogncheck
+#include "ui/ozone/public/ozone_platform.h"
 #endif
 
-#if (defined(USE_X11) || defined(OS_FUCHSIA) || defined(OS_WIN)) && \
+#if (defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_WIN)) && \
     BUILDFLAG(ENABLE_VULKAN)
 #include "gpu/command_buffer/service/external_vk_image_factory.h"
 #elif defined(OS_ANDROID) && BUILDFLAG(ENABLE_VULKAN)
@@ -64,6 +66,30 @@
 
 namespace gpu {
 
+#if defined(OS_LINUX) && !BUILDFLAG(IS_CHROMEOS_ASH) &&            \
+    !BUILDFLAG(IS_CHROMEOS_LACROS) && !BUILDFLAG(IS_CHROMECAST) && \
+    BUILDFLAG(ENABLE_VULKAN)
+
+namespace {
+
+bool ShouldUseExternalVulkanImageFactory() {
+#if defined(USE_OZONE)
+  if (features::IsUsingOzonePlatform()) {
+    return ui::OzonePlatform::GetInstance()
+        ->GetPlatformProperties()
+        .uses_external_vulkan_image_factory;
+  }
+#endif
+#if defined(USE_X11)
+  return true;
+#endif
+  return false;
+}
+
+}  // namespace
+
+#endif
+
 // Overrides for flat_set lookups:
 bool operator<(
     const std::unique_ptr<SharedImageRepresentationFactoryRef>& lhs,
@@ -98,6 +124,12 @@
       memory_tracker_(std::make_unique<MemoryTypeTracker>(memory_tracker)),
       gr_context_type_(context_state ? context_state->gr_context_type()
                                      : GrContextType::kGL) {
+#if defined(OS_MAC)
+  // OSX
+  DCHECK(gr_context_type_ == GrContextType::kGL ||
+         gr_context_type_ == GrContextType::kMetal);
+#endif
+
   bool use_gl = gl::GetGLImplementation() != gl::kGLImplementationNone;
   if (use_gl) {
     gl_backing_factory_ = std::make_unique<SharedImageBackingFactoryGLTexture>(
@@ -109,24 +141,23 @@
 
   // TODO(ccameron): This block of code should be changed to a switch on
   // |gr_context_type|.
-#if defined(USE_X11) && BUILDFLAG(ENABLE_VULKAN)
-  if (!features::IsUsingOzonePlatform()) {
-    if (gr_context_type_ == GrContextType::kVulkan) {
+  if (gr_context_type_ == GrContextType::kVulkan) {
+#if BUILDFLAG(ENABLE_VULKAN)
+#if defined(OS_LINUX) && !BUILDFLAG(IS_CHROMEOS_ASH) && \
+    !BUILDFLAG(IS_CHROMEOS_LACROS) && !BUILDFLAG(IS_CHROMECAST)
+    // Desktop Linux, not ChromeOS.
+    if (ShouldUseExternalVulkanImageFactory()) {
       interop_backing_factory_ =
           std::make_unique<ExternalVkImageFactory>(context_state);
+    } else {
+      LOG(ERROR) << "ERROR: gr_context_type_ is GrContextType::kVulkan and "
+                    "interop_backing_factory_ is not set";
     }
-  } else if (gr_context_type_ == GrContextType::kVulkan) {
-    LOG(ERROR) << "ERROR: gr_context_type_ is GrContextType::kVulkan and "
-                  "interop_backing_factory_ is not set";
-  }
-#elif (defined(OS_FUCHSIA) || defined(OS_WIN)) && BUILDFLAG(ENABLE_VULKAN)
-  if (gr_context_type_ == GrContextType::kVulkan) {
+#elif defined(OS_FUCHSIA) || defined(OS_WIN)
     interop_backing_factory_ =
         std::make_unique<ExternalVkImageFactory>(context_state);
-  }
-#elif defined(OS_ANDROID) && BUILDFLAG(ENABLE_VULKAN)
-  // For Android
-  if (gr_context_type_ == GrContextType::kVulkan) {
+#elif defined(OS_ANDROID)
+    // For Android
     external_vk_image_factory_ =
         std::make_unique<ExternalVkImageFactory>(context_state);
     const auto& enabled_extensions = context_state->vk_context_provider()
@@ -138,26 +169,24 @@
       interop_backing_factory_ = std::make_unique<SharedImageBackingFactoryAHB>(
           workarounds, gpu_feature_info);
     }
-  } else if (base::AndroidHardwareBufferCompat::IsSupportAvailable()) {
-    interop_backing_factory_ = std::make_unique<SharedImageBackingFactoryAHB>(
-        workarounds, gpu_feature_info);
-  }
-#elif defined(OS_MAC)
-  // OSX
-  DCHECK(gr_context_type_ == GrContextType::kGL ||
-         gr_context_type_ == GrContextType::kMetal);
+#endif
 #elif BUILDFLAG(IS_CHROMEOS_ASH)
-  if (gr_context_type_ == GrContextType::kVulkan) {
     interop_backing_factory_ =
         std::make_unique<SharedImageBackingFactoryOzone>(context_state);
-  }
 #else
-  // Others
-  if (gr_context_type_ == GrContextType::kVulkan) {
+    // Others
     LOG(ERROR) << "ERROR: gr_context_type_ is GrContextType::kVulkan and "
                   "interop_backing_factory_ is not set";
-  }
 #endif
+  } else {
+    // gr_context_type_ != GrContextType::kVulkan
+#if defined(OS_ANDROID) && BUILDFLAG(ENABLE_VULKAN)
+    if (base::AndroidHardwareBufferCompat::IsSupportAvailable()) {
+      interop_backing_factory_ = std::make_unique<SharedImageBackingFactoryAHB>(
+          workarounds, gpu_feature_info);
+    }
+#endif
+  }
   if (enable_wrapped_sk_image && context_state) {
     wrapped_sk_image_factory_ =
         std::make_unique<raster::WrappedSkImageFactory>(context_state);
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb
index 34b0b51..378d436 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bn.xtb
@@ -71,6 +71,7 @@
 <translation id="7890287942691234100">Chromium স্ক্যানার ব্যবহার করা শুরু করুন</translation>
 <translation id="8013573822802650211">আপনার সমস্ত ডিভাইসে সাইন-ইন করে থাকুন, যাতে আপনি যেখান থেকেই Chromium ব্যবহার করুন না কেন, সেখানেই আপনি নিজের ট্যাবগুলি দেখতে পারেন</translation>
 <translation id="8073677936375100957">এই ডিভাইস থেকে আপনার Chromium ডেটা সরিয়ে ফেলবেন?</translation>
+<translation id="8097322092271030751">যেহেতু <ph name="HOSTED_DOMAIN" /> আপনার অ্যাকাউন্ট ম্যানেজ করে, তাই সাইন-আউট করে নিলেই, Chromium-এ থাকা আপনার সব ডেটা এই ডিভাইস থেকে মুছে যাবে। সিঙ্ক করা ডেটা আপনার Google অ্যাকাউন্টেই থেকে যাবে।</translation>
 <translation id="8175055321229419309">টিপ: <ph name="BEGIN_LINK" />Chromium-কে আপনার ডকে সরান<ph name="END_LINK" /></translation>
 <translation id="8235785158661376110">Chromium-কে 'ডিফল্ট ব্রাউজার' হিসেবে সেট করার জন্য, 'সেটিংস' বিকল্প খুলুন, 'ডিফল্ট ব্রাউজার' অ্যাপে ট্যাপ করুন এবং 'Chromium' বিকল্প বেছে নিন।</translation>
 <translation id="8240981428553046115">কোনও নতুন আপডেট আছে কিনা তা Chromium-এ চেক করে দেখা যায়নি। পরে আবার চেষ্টা করুন।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
index adc2c5d..110dc0ab 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
@@ -71,6 +71,7 @@
 <translation id="7890287942691234100">Commencer à utiliser le lecteur de Chromium</translation>
 <translation id="8013573822802650211">Pour voir vos onglets partout où vous utilisez Chromium, connectez-vous sur tous vos appareils</translation>
 <translation id="8073677936375100957">Effacer vos données Chromium de cet appareil?</translation>
+<translation id="8097322092271030751">Comme votre compte est géré par <ph name="HOSTED_DOMAIN" />, vos données Chromium seront supprimées de cet appareil lorsque vous vous déconnecterez. Vos données synchronisées resteront dans votre compte Google.</translation>
 <translation id="8175055321229419309">Conseil : <ph name="BEGIN_LINK" />déplacez Chromium dans le dock<ph name="END_LINK" /></translation>
 <translation id="8235785158661376110">Pour faire de Chromium votre navigateur par défaut, ouvrez Réglages, puis touchez Navigateur par défaut et sélectionnez Chromium.</translation>
 <translation id="8240981428553046115">Chromium n'a pas pu vérifier s'il y a des mises à jour. Réessayez plus tard.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
index e26b980..5ff68e1 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
@@ -71,7 +71,7 @@
 <translation id="7890287942691234100">Inizia a usare lo scanner di Chromium</translation>
 <translation id="8013573822802650211">Esegui l'accesso su tutti i dispositivi su cui utilizzi Chromium per visualizzare le tue schede</translation>
 <translation id="8073677936375100957">Eliminare i dati di Chromium dal dispositivo?</translation>
-<translation id="8097322092271030751">Poiché il tuo account è gestito da <ph name="HOSTED_DOMAIN" />, i tuoi dati di Chromium verranno eliminati da questo dispositivo quando uscirai. I tuoi dati sincronizzati rimarranno nel tuo Account Google.</translation>
+<translation id="8097322092271030751">Poiché il tuo account è gestito da <ph name="HOSTED_DOMAIN" />, i tuoi dati di Chromium verranno eliminati da questo dispositivo quando ti disconnetterai. I tuoi dati sincronizzati rimarranno nel tuo Account Google.</translation>
 <translation id="8175055321229419309">Suggerimento. <ph name="BEGIN_LINK" />Sposta Chromium nel dock<ph name="END_LINK" /></translation>
 <translation id="8235785158661376110">Per impostare Chromium come browser predefinito, apri le Impostazioni, tocca Default Browser App (App browser predefinita) e seleziona Chromium.</translation>
 <translation id="8240981428553046115">Chromium non ha potuto verificare la disponibilità di aggiornamenti. Riprova più tardi.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
index 981a48c..b90fb3bf 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
@@ -71,6 +71,7 @@
 <translation id="7890287942691234100">Chromium स्कॅनर वापरण्यास सुरुवात करा</translation>
 <translation id="8013573822802650211">तुम्ही जेथून Chromium वापरत असाल तेथून तुमचे टॅब पाहण्यासाठी, तुमच्या सर्व डिव्हाइसवर साइन इन करा</translation>
 <translation id="8073677936375100957">या डिव्हाइसवरून तुमचा Chromium डेटा साफ करायचा?</translation>
+<translation id="8097322092271030751">तुमचे खाते <ph name="HOSTED_DOMAIN" /> द्वारे व्यवस्थापित केले जात असल्याने साइन आउट करताना या डिव्हाइसमधून तुमचा Chromium डेटा हटवला जाईल. तुमचा सिंक केलेला डेटा तुमच्या Google खाते मध्ये राहील.</translation>
 <translation id="8175055321229419309">टीप: <ph name="BEGIN_LINK" />Chromium तुमच्या डॉकमध्ये हलवा<ph name="END_LINK" /></translation>
 <translation id="8235785158661376110">Chromium ला तुमचे डीफॉल्ट बनवण्यासाठी, सेटिंग्ज उघडा, डीफॉल्ट ब्राउझर अ‍ॅप वर टॅप करा आणि Chromium निवडा.</translation>
 <translation id="8240981428553046115">Chromium ला अपडेट तपासता आली नाहीत. नंतर पुन्हा प्रयत्न करा.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
index 74f26ce4..c4d9b5a 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
@@ -71,7 +71,7 @@
 <translation id="7890287942691234100">Zacznij używać skanera Chromium</translation>
 <translation id="8013573822802650211">Aby widzieć swoje karty zawsze, kiedy korzystasz z Chromium, zaloguj się na wszystkich urządzeniach</translation>
 <translation id="8073677936375100957">Usunąć dane Chromium z tego urządzenia?</translation>
-<translation id="8097322092271030751">Ponieważ Twoim kontem zarządza <ph name="HOSTED_DOMAIN" />, Twoje dane Chromium zostaną usunięte z tego urządzenia, gdy się wylogujesz. Zsynchronizowane dane pozostaną na Twoim koncie Google.</translation>
+<translation id="8097322092271030751">Ponieważ Twoim kontem zarządza <ph name="HOSTED_DOMAIN" />, Twoje dane z Chromium zostaną usunięte z tego urządzenia, gdy się wylogujesz. Zsynchronizowane dane pozostaną na Twoim koncie Google.</translation>
 <translation id="8175055321229419309">Wskazówka: <ph name="BEGIN_LINK" />przenieś Chromium do Docka<ph name="END_LINK" /></translation>
 <translation id="8235785158661376110">Aby ustawić Chromium jako przeglądarkę domyślną, otwórz Ustawienia, kliknij Domyślna przeglądarka i wybierz Chromium.</translation>
 <translation id="8240981428553046115">Chromium nie udało się sprawdzić dostępności aktualizacji. Spróbuj ponownie później.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
index 7166634..73c8e31 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
@@ -71,6 +71,7 @@
 <translation id="7890287942691234100">เริ่มใช้โปรแกรมสแกนของ Chromium</translation>
 <translation id="8013573822802650211">ลงชื่อเข้าใช้ในอุปกรณ์ทุกเครื่องเพื่อดูแท็บที่เปิดไว้จากอุปกรณ์ที่คุณใช้ Chromium</translation>
 <translation id="8073677936375100957">ล้างข้อมูล Chromium ของคุณออกจากอุปกรณ์นี้ไหม</translation>
+<translation id="8097322092271030751">เนื่องจากบัญชีของคุณจัดการโดย <ph name="HOSTED_DOMAIN" /> ระบบจึงจะลบข้อมูล Chromium ในอุปกรณ์นี้เมื่อออกจากระบบ ข้อมูลที่ซิงค์ไว้จะยังอยู่ในบัญชี Google</translation>
 <translation id="8175055321229419309">เคล็ดลับ: <ph name="BEGIN_LINK" />ย้าย Chromium ไปไว้ที่ Dock<ph name="END_LINK" /></translation>
 <translation id="8235785158661376110">ในการกำหนดให้ Chromium เป็นเบราว์เซอร์เริ่มต้น ให้เปิดการตั้งค่าแล้วแตะ "แอปเบราว์เซอร์เริ่มต้น" จากนั้นเลือก Chromium</translation>
 <translation id="8240981428553046115">Chromium ตรวจหาอัปเดตไม่ได้ โปรดลองอีกครั้งภายหลัง</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
index f57c740..682a432 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
@@ -71,6 +71,7 @@
 <translation id="7890287942691234100">开始使用 Chromium 扫描器</translation>
 <translation id="8013573822802650211">要查看您在其他设备上用 Chromium 打开的标签页,请在所有设备上登录</translation>
 <translation id="8073677936375100957">从这部设备中清除您的 Chromium 数据?</translation>
+<translation id="8097322092271030751">您的帐号是由 <ph name="HOSTED_DOMAIN" /> 管理,因此当您退出帐号后,您的 Chromium 数据将会从此设备中删除,但已同步的数据仍会保留在您的 Google 帐号中。</translation>
 <translation id="8175055321229419309">提示:<ph name="BEGIN_LINK" />将 Chromium 移到 Dock 中<ph name="END_LINK" /></translation>
 <translation id="8235785158661376110">若要将 Chromium 设为默认浏览器,请打开“设置”,点按“默认浏览器应用”,然后选择“Chromium”。</translation>
 <translation id="8240981428553046115">Chromium 无法检查是否有更新。请稍后再试。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb
index 53616cd0..90935b8 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bn.xtb
@@ -17,6 +17,7 @@
 <translation id="257708665678654955">আপনি কি এরপর থেকে এই সাইটের <ph name="LANGUAGE_NAME" /> পৃষ্ঠাগুলিকে অনুবাদ করে দেওয়ার জন্য Google Chrome থেকে প্রম্পট পেতে চান?</translation>
 <translation id="2695886661449553974">Chrome-এ আপডেট চেক করা যায়নি। পরে আবার চেষ্টা করুন।</translation>
 <translation id="2732745070297234559">Chrome সব পাসওয়ার্ড চেক করতে পারেনি। আগামীকাল আবার চেষ্টা করে দেখুন।</translation>
+<translation id="2786324948676799004">যেহেতু <ph name="HOSTED_DOMAIN" /> আপনার অ্যাকাউন্ট ম্যানেজ করে, তাই সাইন-আউট করে নিলেই, Chrome-এ থাকা আপনার সব ডেটা এই ডিভাইস থেকে মুছে যাবে। সিঙ্ক করা ডেটা আপনার Google অ্যাকাউন্টেই থেকে যাবে।</translation>
 <translation id="2919738076569633423">Chrome ব্যবহার করে আপনি <ph name="BEGIN_LINK_TOS" />পরিষেবার শর্তাবলী<ph name="END_LINK_TOS" />তে সম্মতি জানাচ্ছেন।</translation>
 <translation id="3030414234702425231"><ph name="SIGNOUT_MANAGED_DOMAIN" /> দ্বারা ম্যানেজ করা একটি অ্যাকাউন্ট থেকে আপনি সাইন-আউট করছেন বলে, এই ডিভাইস থেকে আপনার Chrome ডেটা মুছে যাবে। আপনার Google অ্যাকাউন্টে এই ডেটা থেকে যাবে।</translation>
 <translation id="3148688391461398285">আপনার অবস্থানের উপর ভিত্তি করে Chrome এ একটি ভাল অভিজ্ঞতা লাভ করুন৷</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
index 722c19a..429aa67 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
@@ -17,6 +17,7 @@
 <translation id="257708665678654955">Souhaitez-vous que Google Chrome vous propose de traduire les pages de ce site rédigées en <ph name="LANGUAGE_NAME" /> lors de votre prochaine visite?</translation>
 <translation id="2695886661449553974">Chrome n'a pas pu vérifier s'il y a des mises à jour. Réessayez plus tard.</translation>
 <translation id="2732745070297234559">Chrome n'a pas pu vérifier tous les mots de passe. Réessayez demain.</translation>
+<translation id="2786324948676799004">Comme votre compte est géré par <ph name="HOSTED_DOMAIN" />, vos données Chrome seront supprimées de cet appareil lorsque vous vous déconnecterez. Vos données synchronisées resteront dans votre compte Google.</translation>
 <translation id="2919738076569633423">En utilisant Chrome, vous acceptez les <ph name="BEGIN_LINK_TOS" />conditions d'utilisation<ph name="END_LINK_TOS" />.</translation>
 <translation id="3030414234702425231">Puisque vous vous déconnectez d'un compte géré par <ph name="SIGNOUT_MANAGED_DOMAIN" />, vos données Chrome seront supprimées de cet appareil. Toutefois, vos données resteront dans votre compte Google.</translation>
 <translation id="3148688391461398285">Profitez d'une meilleure expérience dans Chrome en fonction de votre emplacement.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
index c897348..73436e4 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_it.xtb
@@ -17,7 +17,7 @@
 <translation id="257708665678654955">Vuoi che Google Chrome ti proponga di tradurre le pagine di questo sito in <ph name="LANGUAGE_NAME" /> al prossimo accesso?</translation>
 <translation id="2695886661449553974">Chrome non ha potuto verificare la disponibilità di aggiornamenti. Riprova più tardi.</translation>
 <translation id="2732745070297234559">Chrome non ha potuto controllare tutte le password. Riprova domani.</translation>
-<translation id="2786324948676799004">Poiché il tuo account è gestito da <ph name="HOSTED_DOMAIN" />, i tuoi dati di Chrome verranno eliminati da questo dispositivo quando uscirai. I tuoi dati sincronizzati rimarranno nel tuo Account Google.</translation>
+<translation id="2786324948676799004">Poiché il tuo account è gestito da <ph name="HOSTED_DOMAIN" />, i tuoi dati di Chrome verranno eliminati da questo dispositivo quando ti disconnetterai. I tuoi dati sincronizzati rimarranno nel tuo Account Google.</translation>
 <translation id="2919738076569633423">Se utilizzi Chrome, accetti i <ph name="BEGIN_LINK_TOS" />Termini di servizio<ph name="END_LINK_TOS" />.</translation>
 <translation id="3030414234702425231">Dal momento che stai per uscire da un account gestito da <ph name="SIGNOUT_MANAGED_DOMAIN" />, i dati di Chrome verranno eliminati da questo dispositivo, ma rimarranno memorizzati nel tuo Account Google.</translation>
 <translation id="3148688391461398285">Migliora la tua esperienza di Chrome tramite l'accesso alla tua posizione.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
index 6c970a5..7c6f499 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
@@ -17,6 +17,7 @@
 <translation id="257708665678654955">पुढील वेळी Google Chrome ने या साइटवरील <ph name="LANGUAGE_NAME" /> पेजचे भाषांतर करण्याची ऑफर द्यावी असे तुम्हाला वाटते?</translation>
 <translation id="2695886661449553974">Chrome ला अपडेट तपासता आली नाहीत. नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="2732745070297234559">Chrome ला सर्व पासवर्ड तपासता आले नाहीत. उद्या पुन्हा प्रयत्न करा.</translation>
+<translation id="2786324948676799004">तुमचे खाते <ph name="HOSTED_DOMAIN" /> द्वारे व्यवस्थापित केले जात असल्याने साइन आउट करताना या डिव्हाइसमधून तुमचा Chrome डेटा हटवला जाईल. तुमचा सिंक केलेला डेटा तुमच्या Google खाते मध्ये राहील.</translation>
 <translation id="2919738076569633423">Chrome वापरून, तुम्ही <ph name="BEGIN_LINK_TOS" />सेवा अटी<ph name="END_LINK_TOS" /> यांना सहमती दर्शवता.</translation>
 <translation id="3030414234702425231">तुम्ही <ph name="SIGNOUT_MANAGED_DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यातून साइन आउट केले आहे, तुमचा Chrom डेटा या डिव्हाइसवरून हटवला जाईल. तुमचा डेटा तुमच्या Google खाते मध्ये असेल</translation>
 <translation id="3148688391461398285">आपल्या स्थानाच्या आधारावर Chrome मध्ये उत्कृष्ट अनुभव मिळवा.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
index a19aa57..f8e73d6 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
@@ -17,7 +17,7 @@
 <translation id="257708665678654955">Czy następnym razem Google Chrome ma zaproponować Ci tłumaczenie stron tej witryny, których język to <ph name="LANGUAGE_NAME" />?</translation>
 <translation id="2695886661449553974">Chrome nie udało się sprawdzić dostępności aktualizacji. Spróbuj ponownie później.</translation>
 <translation id="2732745070297234559">Przeglądarce Chrome nie udało się sprawdzić wszystkich haseł. Spróbuj ponownie jutro.</translation>
-<translation id="2786324948676799004">Ponieważ Twoim kontem zarządza <ph name="HOSTED_DOMAIN" />, Twoje dane Chrome zostaną usunięte z tego urządzenia, gdy się wylogujesz. Zsynchronizowane dane pozostaną na Twoim koncie Google.</translation>
+<translation id="2786324948676799004">Ponieważ Twoim kontem zarządza <ph name="HOSTED_DOMAIN" />, Twoje dane z Chrome zostaną usunięte z tego urządzenia, gdy się wylogujesz. Zsynchronizowane dane pozostaną na Twoim koncie Google.</translation>
 <translation id="2919738076569633423">Używając Chrome, wyrażasz zgodę na <ph name="BEGIN_LINK_TOS" />Warunki korzystania z usługi<ph name="END_LINK_TOS" />.</translation>
 <translation id="3030414234702425231">Wylogowujesz się z konta, którym zarządza <ph name="SIGNOUT_MANAGED_DOMAIN" />. Spowoduje to usunięcie danych Chrome z tego urządzenia, ale pozostaną one na koncie Google.</translation>
 <translation id="3148688391461398285">Dzięki dostępowi do Twojej lokalizacji Chrome będzie działać lepiej.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
index fffd605..dc95d17 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_th.xtb
@@ -17,6 +17,7 @@
 <translation id="257708665678654955">คุณต้องการให้ Google Chrome เสนอการแปลหน้าภาษา<ph name="LANGUAGE_NAME" />จากเว็บไซต์นี้ในครั้งถัดไปไหม</translation>
 <translation id="2695886661449553974">Chrome ตรวจหาอัปเดตไม่ได้ โปรดลองอีกครั้งภายหลัง</translation>
 <translation id="2732745070297234559">Chrome ตรวจสอบรหัสผ่านได้ไม่ครบทั้งหมด โปรดลองอีกครั้งในวันพรุ่งนี้</translation>
+<translation id="2786324948676799004">เนื่องจากบัญชีของคุณจัดการโดย <ph name="HOSTED_DOMAIN" /> ระบบจึงจะลบข้อมูล Chrome ในอุปกรณ์นี้เมื่อออกจากระบบ ข้อมูลที่ซิงค์ไว้จะยังอยู่ในบัญชี Google</translation>
 <translation id="2919738076569633423">การใช้ Chrome หมายความว่าคุณยอมรับ<ph name="BEGIN_LINK_TOS" />ข้อกำหนดในการให้บริการ<ph name="END_LINK_TOS" /></translation>
 <translation id="3030414234702425231">เนื่องจากคุณกำลังออกจากระบบบัญชีที่จัดการโดย <ph name="SIGNOUT_MANAGED_DOMAIN" /> ข้อมูล Chrome ของคุณจะถูกลบออกจากอุปกรณ์นี้ แต่ข้อมูลจะยังคงอยู่ในบัญชี Google</translation>
 <translation id="3148688391461398285">รับประสบการณ์ที่ดีขึ้นใน Chrome ตามสถานที่ที่คุณอยู่</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb
index 0e85d09..67ad724 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb
@@ -17,6 +17,7 @@
 <translation id="257708665678654955">下次访问这个网站时,您希望 Google Chrome 翻译其中的<ph name="LANGUAGE_NAME" />网页吗?</translation>
 <translation id="2695886661449553974">Chrome 无法检查是否有更新。请稍后再试。</translation>
 <translation id="2732745070297234559">Chrome 无法检查所有密码。请明天再试。</translation>
+<translation id="2786324948676799004">您的帐号是由 <ph name="HOSTED_DOMAIN" /> 管理,因此当您退出帐号后,您的 Chrome 数据将会从此设备中删除,但已同步的数据仍会保留在您的 Google 帐号中。</translation>
 <translation id="2919738076569633423">使用 Chrome 即表示您同意接受<ph name="BEGIN_LINK_TOS" />服务条款<ph name="END_LINK_TOS" />。</translation>
 <translation id="3030414234702425231">由于您正要退出的帐号是由 <ph name="SIGNOUT_MANAGED_DOMAIN" /> 管理,因此系统将会从这部设备中删除您的 Chrome 数据,但这些数据仍会保留在您的 Google 帐号中。</translation>
 <translation id="3148688391461398285">要在Chrome中获得更好的使用体验,需要用到您的位置信息。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
index 005145d..3b3e6c7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -635,7 +635,7 @@
 <translation id="7514365320538308">تنزيل</translation>
 <translation id="7537586195939242955">‏عذرًا، لا يمكن أن تكون بطاقتك مثبتة على Passbook في الوقت الحالي.</translation>
 <translation id="7554791636758816595">علامة تبويب جديدة</translation>
-<translation id="7558943807639707687">ماذا تريد أن تفعل بشأن إشاراتك المرجعية وسجلّك وبياناتك الأخرى على هذا الجهاز؟</translation>
+<translation id="7558943807639707687">ما هو الإجراء الذي تريد اتخاذه بشأن إشاراتك المرجعية وسجلّك وبياناتك الأخرى على هذا الجهاز؟</translation>
 <translation id="7561196759112975576">دومًا</translation>
 <translation id="7583004045319035904">يمكنك استخدام <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> لفتح علامات التبويب في وضع التصفّح المتخفي.</translation>
 <translation id="7600965453749440009">عدم الترجمة مطلقًا من اللغة <ph name="LANGUAGE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
index 8407d6151..8576b6bab 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -257,6 +257,7 @@
 <translation id="3533436815740441613">নতুন ট্যাব খুলুন</translation>
 <translation id="3551320343578183772">ট্যাব বন্ধ করুন</translation>
 <translation id="3581564640715911333">অন্য ভাষাতে পৃষ্ঠা অনুবাদ করার প্রস্তাব দিন</translation>
+<translation id="3588492282865875287">সাইন-আউট করবেন?</translation>
 <translation id="3588820906588687999">নতুন ট্যাবে ছবি খুলুন</translation>
 <translation id="359441731697487922">Chrome-কে আপনার ডিফল্ট ব্রাউজার অ্যাপ হিসেবে সেট করে এতে অটোমেটিক লিঙ্ক খুলতে পারবেন।
       
@@ -410,6 +411,7 @@
 <translation id="5317780077021120954">সেভ করুন</translation>
 <translation id="5327248766486351172">নাম</translation>
 <translation id="5339316356165661760">সিঙ্ক চালু করুন</translation>
+<translation id="5351284593342054342">এই ডিভাইস থেকে মুছে দিন</translation>
 <translation id="5388358297987318779">ছবি খুলুন</translation>
 <translation id="5407969256130905701">পরিবর্তনগুলি বাতিল করুন</translation>
 <translation id="5409365236829784218">এই ফাউলটি খুলতে পারে এমন কোনো অ্যাপ্লিকেশন এখানে ডাউনলোড করা নেই৷</translation>
@@ -466,6 +468,7 @@
 <translation id="5948291296578561264">এর ফলে আপনি ফটো লাইব্রেরিতে ফটো সেভ করতে পারবেন।</translation>
 <translation id="5955891643922670672">অফলাইন ভার্সন দেখছেন</translation>
 <translation id="5957613098218939406">আরও বিকল্পগুলি</translation>
+<translation id="5961521066940389233">এই ডিভাইসে রাখুন</translation>
 <translation id="5964480694698977962">নতুন ছদ্মবেশী ট্যাব তৈরি করুন।</translation>
 <translation id="5965679971710331625">আপনি প্রবেশ করেছেন</translation>
 <translation id="5979837087407522202">পাসওয়ার্ড খুঁজুন</translation>
@@ -480,6 +483,7 @@
 <translation id="605721222689873409">YY</translation>
 <translation id="6059830886158432458">আপনার খবর ও গতিবিধি এখানে নিয়ন্ত্রণ করুন</translation>
 <translation id="6066301408025741299">বাতিল করতে আলতো চাপুন৷</translation>
+<translation id="6085282545406522838">সিঙ্ক করা ডেটা আপনার Google অ্যাকাউন্টেই থেকে যাবে।</translation>
 <translation id="6108923351542677676">সেটআপ চলছে...</translation>
 <translation id="6119050551270742952">বর্তমান ওয়েবপেজটি ছদ্মবেশী মোডে আছে</translation>
 <translation id="6122191549521593678">অনলাইন</translation>
@@ -632,6 +636,7 @@
 <translation id="7514365320538308">ডাউনলোড করুন</translation>
 <translation id="7537586195939242955">দুঃখিত, এই সময়ে পাসবুকে আপনার পাস ইনস্টল করা যাবে না৷</translation>
 <translation id="7554791636758816595">নতুন ট্যাব</translation>
+<translation id="7558943807639707687">এই ডিভাইসে আপনার বুকমার্ক, ইতিহাস ও অন্যান্য ডেটা নিয়ে কী করতে চান?</translation>
 <translation id="7561196759112975576">সবসময়</translation>
 <translation id="7583004045319035904">আপনার ছদ্মবেশী ট্যাব আনলক করতে, <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> ব্যবহার করুন।</translation>
 <translation id="7600965453749440009"><ph name="LANGUAGE" /> কখনও অনুবাদ করবেন না</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
index bbc5a46..9ca299c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -257,6 +257,7 @@
 <translation id="3533436815740441613">Nouvel onglet</translation>
 <translation id="3551320343578183772">Fermer l'onglet</translation>
 <translation id="3581564640715911333">Proposer des traductions de pages dans d'autres langues</translation>
+<translation id="3588492282865875287">Se déconnecter?</translation>
 <translation id="3588820906588687999">Ouvrir l'image dans un nouvel onglet</translation>
 <translation id="359441731697487922">Vous pouvez ouvrir automatiquement les sites dans Chrome en le définissant comme application de navigation par défaut.
       
@@ -410,6 +411,7 @@
 <translation id="5317780077021120954">Enregistrer</translation>
 <translation id="5327248766486351172">Nom</translation>
 <translation id="5339316356165661760">Activer la synchronisation</translation>
+<translation id="5351284593342054342">Effacer de cet appareil</translation>
 <translation id="5388358297987318779">Ouvrir l'image</translation>
 <translation id="5407969256130905701">Supprimer les modifications</translation>
 <translation id="5409365236829784218">Aucune application installée ne peut ouvrir ce fichier.</translation>
@@ -465,6 +467,7 @@
 <translation id="5948291296578561264">Cela vous permet d'enregistrer vos photos dans votre bibliothèque de photos.</translation>
 <translation id="5955891643922670672">Affichage de la version hors ligne</translation>
 <translation id="5957613098218939406">Autres options</translation>
+<translation id="5961521066940389233">Garder sur cet appareil</translation>
 <translation id="5964480694698977962">Créer un nouvel onglet de navigation privée.</translation>
 <translation id="5965679971710331625">Vous êtes connecté</translation>
 <translation id="5979837087407522202">Rechercher des mots de passe</translation>
@@ -479,6 +482,7 @@
 <translation id="605721222689873409">AA</translation>
 <translation id="6059830886158432458">Gérez vos histoires et votre activité ici</translation>
 <translation id="6066301408025741299">Appuyez pour annuler.</translation>
+<translation id="6085282545406522838">Vos données synchronisées resteront dans votre compte Google.</translation>
 <translation id="6108923351542677676">Configuration en cours...</translation>
 <translation id="6119050551270742952">La page Web actuelle est ouverte en mode de navigation privée</translation>
 <translation id="6122191549521593678">En ligne</translation>
@@ -631,6 +635,7 @@
 <translation id="7514365320538308">Télécharger</translation>
 <translation id="7537586195939242955">Imposs. d'install. votre pass. pour Passbook pour le moment.</translation>
 <translation id="7554791636758816595">Nouvel onglet</translation>
+<translation id="7558943807639707687">Que souhaitez-vous faire avec vos favoris, votre historique et les autres données sur cet appareil?</translation>
 <translation id="7561196759112975576">Toujours</translation>
 <translation id="7583004045319035904">Utiliser <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> pour déverrouiller vos onglets de navigation privée.</translation>
 <translation id="7600965453749440009">Ne jamais traduire les pages rédigées en <ph name="LANGUAGE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index 1149fa55..84b8ff7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -257,7 +257,7 @@
 <translation id="3533436815740441613">Nuova scheda</translation>
 <translation id="3551320343578183772">Chiudi scheda</translation>
 <translation id="3581564640715911333">Proponi di tradurre le pagine in altre lingue</translation>
-<translation id="3588492282865875287">Vuoi uscire?</translation>
+<translation id="3588492282865875287">Uscire?</translation>
 <translation id="3588820906588687999">Apri immagine in un'altra scheda</translation>
 <translation id="359441731697487922">Puoi aprire automaticamente i link in Chrome impostandolo come app browser predefinita.
       
@@ -635,7 +635,7 @@
 <translation id="7514365320538308">Scarica</translation>
 <translation id="7537586195939242955">Spiacenti, il tuo pass non può essere installato in Passbook in questo momento.</translation>
 <translation id="7554791636758816595">Nuova scheda</translation>
-<translation id="7558943807639707687">Cosa vorresti fare con i tuoi preferiti, la tua cronologia e altri dati memorizzati su questo dispositivo?</translation>
+<translation id="7558943807639707687">Cosa vorresti fare con i tuoi preferiti, la tua cronologia e gli altri dati memorizzati su questo dispositivo?</translation>
 <translation id="7561196759112975576">Sempre</translation>
 <translation id="7583004045319035904">Utilizza <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> per sbloccare le schede di navigazione in incognito.</translation>
 <translation id="7600965453749440009">Non tradurre mai <ph name="LANGUAGE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index 84d612e4..c93d71e0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -308,7 +308,7 @@
 <translation id="4152011295694446843">הסימניות זמינות כאן</translation>
 <translation id="4152093603141133546">היציאה מהחשבון בוצעה על ידי הארגון שלך.</translation>
 <translation id="4172051516777682613">להציג תמיד</translation>
-<translation id="418156467088430727">הצגת גרסה לא מקוונת בכרטיסייה חדשה</translation>
+<translation id="418156467088430727">הצגת גרסה אופליין בכרטיסייה חדשה</translation>
 <translation id="4181841719683918333">שפות</translation>
 <translation id="424315890655130736">הזנת ביטוי סיסמה</translation>
 <translation id="4263576668337963058">הצגה של פעולות זמינות בדף</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 204ba18..8459350 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -257,6 +257,7 @@
 <translation id="3533436815740441613">नवीन टॅब</translation>
 <translation id="3551320343578183772">टॅब बंद करा</translation>
 <translation id="3581564640715911333">पेजचे अन्य भाषांमध्ये भाषांतर उपलब्ध करा</translation>
+<translation id="3588492282865875287">साइन आउट करायचे?</translation>
 <translation id="3588820906588687999">नवीन टॅबमध्ये इमेज उघडा</translation>
 <translation id="359441731697487922">तुम्ही Chrome ला तुमचे डीफॉल्ट ब्राउझर अ‍ॅप सेट करून त्यामध्ये आपोआप लिंक उघडू शकता.
       
@@ -411,6 +412,7 @@
 <translation id="5317780077021120954">सेव्ह करा</translation>
 <translation id="5327248766486351172">नाव</translation>
 <translation id="5339316356165661760">सिंक सुरू करा</translation>
+<translation id="5351284593342054342">या डिव्हाइसमधून साफ करा</translation>
 <translation id="5388358297987318779">इमेज उघडा</translation>
 <translation id="5407969256130905701">बदल काढून टाका</translation>
 <translation id="5409365236829784218">ही फाईल उघडू शकणारे कोणतेही ॲप्लिकेशन इंस्टॉल केलेले नाहीत.</translation>
@@ -466,6 +468,7 @@
 <translation id="5948291296578561264">हे तुम्हाला तुमच्या फोटो लायब्ररीवर फोटो सेव्ह करू देते.</translation>
 <translation id="5955891643922670672">ऑफलाइन आवृत्ती पाहत आहे</translation>
 <translation id="5957613098218939406">अधिक पर्याय</translation>
+<translation id="5961521066940389233">या डिव्हाइसमध्ये ठेवा</translation>
 <translation id="5964480694698977962">नवीन गुप्त टॅब तयार करा.</translation>
 <translation id="5965679971710331625">तुम्ही साइन इन केले आहे</translation>
 <translation id="5979837087407522202">पासवर्ड शोधा</translation>
@@ -480,6 +483,7 @@
 <translation id="605721222689873409">YY</translation>
 <translation id="6059830886158432458">तुमच्या स्टोरी आणि अ‍ॅक्टिव्हिटी येथे नियंत्रित करा</translation>
 <translation id="6066301408025741299">रद्द करण्यासाठी टॅप करा.</translation>
+<translation id="6085282545406522838">तुमचा सिंक केलेला डेटा तुमच्या Google खाते मध्ये राहील.</translation>
 <translation id="6108923351542677676">सेटअप प्रगती पथावर आहे...</translation>
 <translation id="6119050551270742952">सध्याचे वेबपेज गुप्त मोडमध्ये सुरू आहे</translation>
 <translation id="6122191549521593678">ऑनलाइन</translation>
@@ -632,6 +636,7 @@
 <translation id="7514365320538308">डाउनलोड करा</translation>
 <translation id="7537586195939242955">क्षमस्व, यावेळी तुमचा पास पासबुकमध्ये इंस्टॉल केला जाऊ शकत नाही.</translation>
 <translation id="7554791636758816595">नवीन टॅब</translation>
+<translation id="7558943807639707687">तुम्हाला या डिव्हाइसवरील तुमच्या बुकमार्क, इतिहास आणि इतर डेटाचे काय करायचे आहे?</translation>
 <translation id="7561196759112975576">नेहमी</translation>
 <translation id="7583004045319035904">तुमचे गुप्त टॅब अनलॉक करण्यासाठी <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> वापरा.</translation>
 <translation id="7600965453749440009">कधीही <ph name="LANGUAGE" /> चा भाषांतर करु नका</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index a4ceb39..6f0435de 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -257,6 +257,7 @@
 <translation id="3533436815740441613">แท็บใหม่</translation>
 <translation id="3551320343578183772">ปิดแท็บ</translation>
 <translation id="3581564640715911333">เสนอที่จะแปลหน้าเว็บในภาษาอื่นๆ</translation>
+<translation id="3588492282865875287">ออกจากระบบไหม</translation>
 <translation id="3588820906588687999">เปิดภาพในแท็บใหม่</translation>
 <translation id="359441731697487922">คุณเปิดลิงก์ใน Chrome โดยอัตโนมัติได้ด้วยการตั้งเป็นแอปเบราว์เซอร์เริ่มต้น
       
@@ -410,6 +411,7 @@
 <translation id="5317780077021120954">บันทึก</translation>
 <translation id="5327248766486351172">ชื่อ</translation>
 <translation id="5339316356165661760">เปิดการซิงค์</translation>
+<translation id="5351284593342054342">ล้างออกจากอุปกรณ์นี้</translation>
 <translation id="5388358297987318779">เปิดภาพ</translation>
 <translation id="5407969256130905701">ยกเลิกการเปลี่ยนแปลง</translation>
 <translation id="5409365236829784218">ไม่ได้ติดตั้งแอปพลิเคชันที่สามารถเปิดไฟล์นี้</translation>
@@ -465,6 +467,7 @@
 <translation id="5948291296578561264">ช่วยให้คุณบันทึกรูปภาพในคลังภาพได้</translation>
 <translation id="5955891643922670672">การดูเวอร์ชันออฟไลน์</translation>
 <translation id="5957613098218939406">ตัวเลือกเพิ่มเติม</translation>
+<translation id="5961521066940389233">เก็บไว้ในอุปกรณ์นี้</translation>
 <translation id="5964480694698977962">สร้างแท็บที่ไม่ระบุตัวตนใหม่</translation>
 <translation id="5965679971710331625">คุณลงชื่อเข้าใช้แล้ว</translation>
 <translation id="5979837087407522202">ค้นหารหัสผ่าน</translation>
@@ -479,6 +482,7 @@
 <translation id="605721222689873409">ปป</translation>
 <translation id="6059830886158432458">ควบคุมเรื่องราวและกิจกรรมของคุณได้ที่นี่</translation>
 <translation id="6066301408025741299">แตะเพื่อยกเลิก</translation>
+<translation id="6085282545406522838">ข้อมูลที่ซิงค์ไว้จะยังอยู่ในบัญชี Google</translation>
 <translation id="6108923351542677676">กำลังดำเนินการตั้งค่า…</translation>
 <translation id="6119050551270742952">หน้าเว็บนี้อยู่ในโหมดไม่ระบุตัวตน</translation>
 <translation id="6122191549521593678">ออนไลน์</translation>
@@ -631,6 +635,7 @@
 <translation id="7514365320538308">ดาวน์โหลด</translation>
 <translation id="7537586195939242955">ขออภัย ไม่สามารถติดตั้ง Pass ของคุณใน Passbook ในขณะนี้</translation>
 <translation id="7554791636758816595">แท็บใหม่</translation>
+<translation id="7558943807639707687">คุณต้องการทำอะไรกับบุ๊กมาร์ก ประวัติการเข้าชม และข้อมูลอื่นๆ ในอุปกรณ์นี้</translation>
 <translation id="7561196759112975576">ทุกครั้ง</translation>
 <translation id="7583004045319035904">ใช้ <ph name="BIOMETRIC_AUTHENITCATION_TYPE" /> เพื่อปลดล็อกแท็บที่ไม่ระบุตัวตน</translation>
 <translation id="7600965453749440009">ไม่ต้องแปลภาษา<ph name="LANGUAGE" /></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 e19d1d4..285aa88 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -257,6 +257,7 @@
 <translation id="3533436815740441613">打开新的标签页</translation>
 <translation id="3551320343578183772">关闭标签页</translation>
 <translation id="3581564640715911333">询问是否翻译其他语言版本的网页</translation>
+<translation id="3588492282865875287">退出帐号?</translation>
 <translation id="3588820906588687999">在新标签页中打开图片</translation>
 <translation id="359441731697487922">只需将 Chrome 设为默认浏览器应用,即可自动在 Chrome 中打开链接。
       
@@ -410,6 +411,7 @@
 <translation id="5317780077021120954">保存</translation>
 <translation id="5327248766486351172">名称</translation>
 <translation id="5339316356165661760">开启同步功能</translation>
+<translation id="5351284593342054342">从此设备中清除</translation>
 <translation id="5388358297987318779">打开图片</translation>
 <translation id="5407969256130905701">舍弃更改</translation>
 <translation id="5409365236829784218">没有安装可打开此文件的应用。</translation>
@@ -465,6 +467,7 @@
 <translation id="5948291296578561264">这样,您便可将照片保存到您的照片库中。</translation>
 <translation id="5955891643922670672">正在查看离线版本</translation>
 <translation id="5957613098218939406">更多选项</translation>
+<translation id="5961521066940389233">保留在此设备上</translation>
 <translation id="5964480694698977962">创建新的无痕式标签页。</translation>
 <translation id="5965679971710331625">您已登录</translation>
 <translation id="5979837087407522202">搜索密码</translation>
@@ -479,6 +482,7 @@
 <translation id="605721222689873409">YY</translation>
 <translation id="6059830886158432458">在此处控制您的报道和活动</translation>
 <translation id="6066301408025741299">点按可取消。</translation>
+<translation id="6085282545406522838">已同步的数据仍会保留在您的 Google 帐号中。</translation>
 <translation id="6108923351542677676">正在设置…</translation>
 <translation id="6119050551270742952">当前网页处于无痕模式</translation>
 <translation id="6122191549521593678">在线</translation>
@@ -631,6 +635,7 @@
 <translation id="7514365320538308">下载</translation>
 <translation id="7537586195939242955">抱歉,目前无法将您的票证添加到 Passbook。</translation>
 <translation id="7554791636758816595">新标签页</translation>
+<translation id="7558943807639707687">您想如何处理您在此设备上的书签、历史记录和其他数据?</translation>
 <translation id="7561196759112975576">永远</translation>
 <translation id="7583004045319035904">请使用<ph name="BIOMETRIC_AUTHENITCATION_TYPE" />解锁您的无痕式标签页。</translation>
 <translation id="7600965453749440009">一律不翻译<ph name="LANGUAGE" /></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 597cd86..c316be68 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -467,7 +467,7 @@
 <translation id="5948291296578561264">這樣您便可將相片儲存至相片庫。</translation>
 <translation id="5955891643922670672">正在查看離線版本</translation>
 <translation id="5957613098218939406">更多選項</translation>
-<translation id="5961521066940389233">存放在此裝置中</translation>
+<translation id="5961521066940389233">保留在此裝置中</translation>
 <translation id="5964480694698977962">新增無痕式分頁。</translation>
 <translation id="5965679971710331625">您已登入</translation>
 <translation id="5979837087407522202">搜尋密碼</translation>
diff --git a/ios/chrome/browser/autofill/BUILD.gn b/ios/chrome/browser/autofill/BUILD.gn
index 3b27e86..4331cad8 100644
--- a/ios/chrome/browser/autofill/BUILD.gn
+++ b/ios/chrome/browser/autofill/BUILD.gn
@@ -365,6 +365,7 @@
     "//components/test/data/autofill/heuristics/input/174_i18n_id.html",
     "//components/test/data/autofill/heuristics/input/175_id_address_alfacart.com.html",
     "//components/test/data/autofill/heuristics/input/176_id_payment_shopee.co.id.html",
+    "//components/test/data/autofill/heuristics/input/177_reichelt.html",
     "//components/test/data/autofill/heuristics/output/000_i18n_de.out",
     "//components/test/data/autofill/heuristics/output/001_i18n_de2.out",
     "//components/test/data/autofill/heuristics/output/002_i18n_en.out",
@@ -541,6 +542,7 @@
     "//components/test/data/autofill/heuristics/output/174_i18n_id.out",
     "//components/test/data/autofill/heuristics/output/175_id_address_alfacart.com.out",
     "//components/test/data/autofill/heuristics/output/176_id_payment_shopee.co.id.out",
+    "//components/test/data/autofill/heuristics/output/177_reichelt.out",
   ]
   outputs = [ "{{bundle_resources_dir}}/" +
               "{{source_root_relative_dir}}/{{source_file_part}}" ]
diff --git a/ios/chrome/browser/autofill/form_structure_browsertest.mm b/ios/chrome/browser/autofill/form_structure_browsertest.mm
index b82b065..a00f31ca 100644
--- a/ios/chrome/browser/autofill/form_structure_browsertest.mm
+++ b/ios/chrome/browser/autofill/form_structure_browsertest.mm
@@ -143,6 +143,8 @@
        autofill::features::kAutofillEnableAugmentedPhoneCountryCode,
        // TODO(crbug.com/1157405) Remove once launched.
        autofill::features::kAutofillEnableDependentLocalityParsing,
+       // TODO(crbug/1165780): Remove once shared labels are launched.
+       autofill::features::kAutofillEnableSupportForParsingWithSharedLabels,
        // TODO(crbug.com/1150895) Remove once launched.
        autofill::features::kAutofillParsingPatternsLanguageDetection},
       // Disabled
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_egtest.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_egtest.mm
index 59397bb..6b1d7c29 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_egtest.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_egtest.mm
@@ -18,15 +18,55 @@
 #error "This file requires ARC support."
 #endif
 
+namespace {
+
+// Matcher for an element with or without the
+// UIAccessibilityTraitSelected accessibility trait depending on |selected|.
+id<GREYMatcher> ElementIsSelected(BOOL selected) {
+  return selected
+             ? grey_accessibilityTrait(UIAccessibilityTraitSelected)
+             : grey_not(grey_accessibilityTrait(UIAccessibilityTraitSelected));
+}
+
+// Returns a matcher (which always matches) that records the selection
+// state of matched element in |selected| parameter.
+id<GREYMatcher> RecordElementSelectionState(BOOL& selected) {
+  GREYMatchesBlock matches = ^BOOL(UIView* view) {
+    selected = ([view accessibilityTraits] & UIAccessibilityTraitSelected) != 0;
+    return YES;
+  };
+  GREYDescribeToBlock describe = ^void(id<GREYDescription> description) {
+    [description appendText:@"Selected Check"];
+  };
+
+  return [[GREYElementMatcherBlock alloc] initWithMatchesBlock:matches
+                                              descriptionBlock:describe];
+}
+
+}  // namespace
+
 using chrome_test_util::ButtonWithAccessibilityLabel;
+using chrome_test_util::ClearAutofillButton;
+using chrome_test_util::ClearBrowsingHistoryButton;
+using chrome_test_util::ClearCookiesButton;
+using chrome_test_util::ClearCacheButton;
+using chrome_test_util::ClearSavedPasswordsButton;
 using chrome_test_util::SettingsDoneButton;
 using chrome_test_util::SettingsMenuPrivacyButton;
+using chrome_test_util::WindowWithNumber;
 
 @interface ClearBrowsingDataSettingsTestCase : ChromeTestCase
 @end
 
 @implementation ClearBrowsingDataSettingsTestCase
 
+- (void)tearDown {
+  // No-op if only one window presents.
+  [EarlGrey setRootMatcherForSubsequentInteractions:nil];
+  [ChromeEarlGrey closeAllExtraWindows];
+  [super tearDown];
+}
+
 - (void)openClearBrowsingDataDialog {
   [ChromeEarlGreyUI openSettingsMenu];
   [ChromeEarlGreyUI tapSettingsMenuButton:SettingsMenuPrivacyButton()];
@@ -70,4 +110,132 @@
       assertWithMatcher:grey_nil()];
 }
 
+// Tests that opening the clear browsing data dialog in two windows does not
+// crash.
+- (void)testClearBrowsingDataDialogInMultiWindow {
+  if (![ChromeEarlGrey areMultipleWindowsSupported])
+    EARL_GREY_TEST_DISABLED(@"Multiple windows can't be opened.");
+
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(0)];
+  [self openClearBrowsingDataDialog];
+
+  [ChromeEarlGrey openNewWindow];
+  [ChromeEarlGrey waitForForegroundWindowCount:2];
+
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(1)];
+  [self openClearBrowsingDataDialog];
+
+  // Grab start states.
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(0)];
+  BOOL isClearBrowsingHistoryButtonSelected = NO;
+  BOOL isClearCookiesButtonSelected = NO;
+  BOOL isClearCacheButtonSelected = NO;
+  BOOL isClearSavedPasswordsButtonSelected = NO;
+  BOOL isClearAutofillButtonSelected = NO;
+  [[EarlGrey selectElementWithMatcher:ClearBrowsingHistoryButton()]
+      assertWithMatcher:RecordElementSelectionState(
+                            isClearBrowsingHistoryButtonSelected)];
+  [[EarlGrey selectElementWithMatcher:ClearCookiesButton()]
+      assertWithMatcher:RecordElementSelectionState(
+                            isClearCookiesButtonSelected)];
+  [[EarlGrey selectElementWithMatcher:ClearCacheButton()]
+      assertWithMatcher:RecordElementSelectionState(
+                            isClearCacheButtonSelected)];
+  [[EarlGrey selectElementWithMatcher:ClearSavedPasswordsButton()]
+      assertWithMatcher:RecordElementSelectionState(
+                            isClearSavedPasswordsButtonSelected)];
+  [[EarlGrey selectElementWithMatcher:ClearAutofillButton()]
+      assertWithMatcher:RecordElementSelectionState(
+                            isClearAutofillButtonSelected)];
+
+  // Verify it matches second window.
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(1)];
+  [[EarlGrey selectElementWithMatcher:ClearBrowsingHistoryButton()]
+      assertWithMatcher:ElementIsSelected(
+                            isClearBrowsingHistoryButtonSelected)];
+  [[EarlGrey selectElementWithMatcher:ClearCookiesButton()]
+      assertWithMatcher:ElementIsSelected(isClearCookiesButtonSelected)];
+  [[EarlGrey selectElementWithMatcher:ClearCacheButton()]
+      assertWithMatcher:ElementIsSelected(isClearCacheButtonSelected)];
+  [[EarlGrey selectElementWithMatcher:ClearSavedPasswordsButton()]
+      assertWithMatcher:ElementIsSelected(isClearSavedPasswordsButtonSelected)];
+  [[EarlGrey selectElementWithMatcher:ClearAutofillButton()]
+      assertWithMatcher:ElementIsSelected(isClearAutofillButtonSelected)];
+
+  // Switch Clear Browsing History Button in window 0 and make sure it is
+  // deselected in both.
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(0)];
+  [[EarlGrey selectElementWithMatcher:ClearBrowsingHistoryButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearBrowsingHistoryButton()]
+      assertWithMatcher:ElementIsSelected(
+                            !isClearBrowsingHistoryButtonSelected)];
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(1)];
+  [[EarlGrey selectElementWithMatcher:ClearBrowsingHistoryButton()]
+      assertWithMatcher:ElementIsSelected(
+                            !isClearBrowsingHistoryButtonSelected)];
+
+  // Switch Clear Browsing History Button in window 1 and make sure it is
+  // deselected in both.
+  [[EarlGrey selectElementWithMatcher:ClearCookiesButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearCookiesButton()]
+      assertWithMatcher:ElementIsSelected(!isClearCookiesButtonSelected)];
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(0)];
+  [[EarlGrey selectElementWithMatcher:ClearCookiesButton()]
+      assertWithMatcher:ElementIsSelected(!isClearCookiesButtonSelected)];
+
+  // Switch Clear Cache Button in window 0 and make sure it is
+  // deselected in both.
+  [[EarlGrey selectElementWithMatcher:ClearCacheButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearCacheButton()]
+      assertWithMatcher:ElementIsSelected(!isClearCacheButtonSelected)];
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(1)];
+  [[EarlGrey selectElementWithMatcher:ClearCacheButton()]
+      assertWithMatcher:ElementIsSelected(!isClearCacheButtonSelected)];
+
+  // Switch Clear Saved Passwords Button in window 1 and make sure it is
+  // deselected in both.
+  [[EarlGrey selectElementWithMatcher:ClearSavedPasswordsButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearSavedPasswordsButton()]
+      assertWithMatcher:ElementIsSelected(
+                            !isClearSavedPasswordsButtonSelected)];
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(0)];
+  [[EarlGrey selectElementWithMatcher:ClearSavedPasswordsButton()]
+      assertWithMatcher:ElementIsSelected(
+                            !isClearSavedPasswordsButtonSelected)];
+
+  // Switch Clear Autofill Button in window 0 and make sure it is
+  // deselected in both.
+  [[EarlGrey selectElementWithMatcher:ClearAutofillButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearAutofillButton()]
+      assertWithMatcher:ElementIsSelected(!isClearAutofillButtonSelected)];
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(1)];
+  [[EarlGrey selectElementWithMatcher:ClearAutofillButton()]
+      assertWithMatcher:ElementIsSelected(!isClearAutofillButtonSelected)];
+
+  // Restore to intial state.
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(0)];
+  [[EarlGrey selectElementWithMatcher:ClearBrowsingHistoryButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearCookiesButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearCacheButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearSavedPasswordsButton()]
+      performAction:grey_tap()];
+  [[EarlGrey selectElementWithMatcher:ClearAutofillButton()]
+      performAction:grey_tap()];
+
+  // Cleanup.
+  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
+      performAction:grey_tap()];
+  [EarlGrey setRootMatcherForSubsequentInteractions:WindowWithNumber(1)];
+  [[EarlGrey selectElementWithMatcher:SettingsDoneButton()]
+      performAction:grey_tap()];
+}
+
 @end
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
index 4fa5e89..2be52e9 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-0409cbb0d98f290c9586ce07383b708f9ae57807
\ No newline at end of file
+e8542718d304c0e86b10d976f5fad98c6981d333
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
index 527c498..793fd84 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-a24250810e5af110e3f9cf175ad281c1017f485b
\ No newline at end of file
+9aca207fc758452304da972b06960ec46d12aeb9
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
index c7a06a1..a7c923c 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-7f5cc4c684493ccf8b2221a962f8161362e8678b
\ No newline at end of file
+22b0c40ee22d599443df40fc7d7eab7354720f28
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
index b26fe32..dd1b590f 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-349a36e0887f75892e9fdaf2786bb655c0bbe8f3
\ No newline at end of file
+967e88ff4fe6408df162ed999f809fe60c4f9ced
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
index e5d4c60..df8e7eb1 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-dc778323d510b22a5fc6156f5af8ba6748a66b9c
\ No newline at end of file
+9fdd7083dc848d421ae853078b4c9f2c333f9104
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
index c1a874c..4c755fb 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-ff2d47e4dc08e63d8213fdb207291506dcc9cd63
\ No newline at end of file
+b2bcd55d8fa56f7e20c56dcd79df9694f58c31e4
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
index 7f876968..6afd3d2e 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@
-4452cc2c50cd09ba2bf8a6c49ab3fed73af8fe3f
\ No newline at end of file
+7524514e1bca8fd9ca329deae2dc8aa9f8fc79a3
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
index b6e1f0e..05f69e4 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@
-47aca58b1f494c85149e6d975f6aed6d1b0b6c0b
\ No newline at end of file
+ae88a9a31696595e53cfc3e2e4398bf1aa5de560
\ No newline at end of file
diff --git a/ios/public/provider/chrome/browser/BUILD.gn b/ios/public/provider/chrome/browser/BUILD.gn
index 333e290..8792b8f8 100644
--- a/ios/public/provider/chrome/browser/BUILD.gn
+++ b/ios/public/provider/chrome/browser/BUILD.gn
@@ -22,6 +22,7 @@
     "//base",
     "//components/metrics",
     "//ios/public/provider/chrome/browser/mailto",
+    "//ios/public/provider/chrome/browser/signin",
     "//ios/web/public",
     "//ios/web/public/js_messaging",
     "//url",
diff --git a/ios/public/provider/chrome/browser/chrome_browser_provider.mm b/ios/public/provider/chrome/browser/chrome_browser_provider.mm
index 66f537f5..8066bef 100644
--- a/ios/public/provider/chrome/browser/chrome_browser_provider.mm
+++ b/ios/public/provider/chrome/browser/chrome_browser_provider.mm
@@ -8,6 +8,7 @@
 
 #include "components/metrics/metrics_provider.h"
 #import "ios/public/provider/chrome/browser/mailto/mailto_handler_provider.h"
+#import "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
 #import "ios/public/provider/chrome/browser/text_zoom_provider.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/web/public/download/download_controller_delegate.h b/ios/web/public/download/download_controller_delegate.h
index 4fe86bd0..9cf08be2 100644
--- a/ios/web/public/download/download_controller_delegate.h
+++ b/ios/web/public/download/download_controller_delegate.h
@@ -8,11 +8,11 @@
 #include <memory>
 
 #include "base/macros.h"
+#include "ios/web/public/download/download_task.h"
 
 namespace web {
 
 class DownloadController;
-class DownloadTask;
 class WebState;
 
 // DownloadController delegate. All methods are called on UI thread.
diff --git a/mojo/public/cpp/system/data_pipe.h b/mojo/public/cpp/system/data_pipe.h
index 6cd2eb3..57d1dc3 100644
--- a/mojo/public/cpp/system/data_pipe.h
+++ b/mojo/public/cpp/system/data_pipe.h
@@ -115,10 +115,8 @@
 // documentation.
 inline MojoResult CreateDataPipe(
     const MojoCreateDataPipeOptions* options,
-    ScopedDataPipeProducerHandle* data_pipe_producer,
-    ScopedDataPipeConsumerHandle* data_pipe_consumer) {
-  DCHECK(data_pipe_producer);
-  DCHECK(data_pipe_consumer);
+    ScopedDataPipeProducerHandle& data_pipe_producer,
+    ScopedDataPipeConsumerHandle& data_pipe_consumer) {
   DataPipeProducerHandle producer_handle;
   DataPipeConsumerHandle consumer_handle;
   MojoResult rv = MojoCreateDataPipe(options,
@@ -126,11 +124,35 @@
                                      consumer_handle.mutable_value());
   // Reset even on failure (reduces the chances that a "stale"/incorrect handle
   // will be used).
-  data_pipe_producer->reset(producer_handle);
-  data_pipe_consumer->reset(consumer_handle);
+  data_pipe_producer.reset(producer_handle);
+  data_pipe_consumer.reset(consumer_handle);
   return rv;
 }
 
+// Creates a new data pipe with a specified capacity size. For setting
+// additional options, see |CreateDataPipe()| above.
+inline MojoResult CreateDataPipe(
+    uint32_t capacity_num_bytes,
+    ScopedDataPipeProducerHandle& data_pipe_producer,
+    ScopedDataPipeConsumerHandle& data_pipe_consumer) {
+  MojoCreateDataPipeOptions options;
+  options.struct_size = sizeof(MojoCreateDataPipeOptions);
+  options.flags = MOJO_CREATE_DATA_PIPE_FLAG_NONE;
+  options.element_num_bytes = 1;
+  options.capacity_num_bytes = capacity_num_bytes;
+  return CreateDataPipe(&options, data_pipe_producer, data_pipe_consumer);
+}
+
+// Deprecated overload for the referenced-based signature above.
+inline MojoResult CreateDataPipe(
+    const MojoCreateDataPipeOptions* options,
+    ScopedDataPipeProducerHandle* data_pipe_producer,
+    ScopedDataPipeConsumerHandle* data_pipe_consumer) {
+  DCHECK(data_pipe_producer);
+  DCHECK(data_pipe_consumer);
+  return CreateDataPipe(options, *data_pipe_producer, *data_pipe_consumer);
+}
+
 // DEPRECATED: use |CreateDataPipe| instead.
 //
 // This class is not safe to use in production code as there is no way for it to
diff --git a/mojo/public/cpp/system/tests/data_pipe_drainer_unittest.cc b/mojo/public/cpp/system/tests/data_pipe_drainer_unittest.cc
index 940c090..af95aac6 100644
--- a/mojo/public/cpp/system/tests/data_pipe_drainer_unittest.cc
+++ b/mojo/public/cpp/system/tests/data_pipe_drainer_unittest.cc
@@ -23,10 +23,13 @@
                             public DataPipeDrainer::Client {
  protected:
   DataPipeDrainerTest() {
-    DataPipe pipe;
-    drainer_ = std::make_unique<DataPipeDrainer>(
-        this, std::move(pipe.consumer_handle));
-    producer_handle_ = std::move(pipe.producer_handle);
+    ScopedDataPipeProducerHandle producer_handle;
+    ScopedDataPipeConsumerHandle consumer_handle;
+    EXPECT_EQ(CreateDataPipe(nullptr, producer_handle, consumer_handle),
+              MOJO_RESULT_OK);
+    drainer_ =
+        std::make_unique<DataPipeDrainer>(this, std::move(consumer_handle));
+    producer_handle_ = std::move(producer_handle);
   }
 
   ScopedDataPipeProducerHandle producer_handle_;
diff --git a/mojo/public/cpp/system/tests/data_pipe_producer_unittest.cc b/mojo/public/cpp/system/tests/data_pipe_producer_unittest.cc
index 1d77bf8..729b44a4 100644
--- a/mojo/public/cpp/system/tests/data_pipe_producer_unittest.cc
+++ b/mojo/public/cpp/system/tests/data_pipe_producer_unittest.cc
@@ -183,15 +183,17 @@
   base::FilePath path = CreateTempFileWithContents(test_string);
 
   base::RunLoop loop;
-  DataPipe pipe(16);
-  DataPipeReader reader(std::move(pipe.consumer_handle), 16,
-                        loop.QuitClosure());
+  ScopedDataPipeProducerHandle producer_handle;
+  ScopedDataPipeConsumerHandle consumer_handle;
+  ASSERT_EQ(CreateDataPipe(16, producer_handle, consumer_handle),
+            MOJO_RESULT_OK);
+  DataPipeReader reader(std::move(consumer_handle), 16, loop.QuitClosure());
 
   base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
   DataPipeObserverData observer_data;
   auto observer = std::make_unique<TestObserver>(&observer_data);
   WriteFromFileThenCloseWriter(
-      std::make_unique<DataPipeProducer>(std::move(pipe.producer_handle)),
+      std::make_unique<DataPipeProducer>(std::move(producer_handle)),
       std::move(observer), std::move(file));
   loop.Run();
 
@@ -207,15 +209,19 @@
   constexpr size_t kBytesToWrite = 7;
 
   base::RunLoop loop;
-  DataPipe pipe(static_cast<uint32_t>(kTestString.size()));
-  DataPipeReader reader(std::move(pipe.consumer_handle), kTestString.size(),
+  ScopedDataPipeProducerHandle producer_handle;
+  ScopedDataPipeConsumerHandle consumer_handle;
+  ASSERT_EQ(CreateDataPipe(static_cast<uint32_t>(kTestString.size()),
+                           producer_handle, consumer_handle),
+            MOJO_RESULT_OK);
+  DataPipeReader reader(std::move(consumer_handle), kTestString.size(),
                         loop.QuitClosure());
 
   base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
   DataPipeObserverData observer_data;
   auto observer = std::make_unique<TestObserver>(&observer_data);
   WriteFromFileThenCloseWriter(
-      std::make_unique<DataPipeProducer>(std::move(pipe.producer_handle)),
+      std::make_unique<DataPipeProducer>(std::move(producer_handle)),
       std::move(observer), std::move(file), kBytesToWrite);
   loop.Run();
 
@@ -230,15 +236,18 @@
   constexpr size_t kBytesToWrite = 7;
 
   base::RunLoop loop;
-  DataPipe pipe(kBytesToWrite);
+  ScopedDataPipeProducerHandle producer_handle;
+  ScopedDataPipeConsumerHandle consumer_handle;
+  ASSERT_EQ(CreateDataPipe(kBytesToWrite, producer_handle, consumer_handle),
+            MOJO_RESULT_OK);
   DataPipeObserverData observer_data;
   auto observer = std::make_unique<TestObserver>(&observer_data);
-  DataPipeReader reader(std::move(pipe.consumer_handle), kBytesToWrite,
+  DataPipeReader reader(std::move(consumer_handle), kBytesToWrite,
                         loop.QuitClosure());
 
   base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
   WriteFromFileThenCloseWriter(
-      std::make_unique<DataPipeProducer>(std::move(pipe.producer_handle)),
+      std::make_unique<DataPipeProducer>(std::move(producer_handle)),
       std::move(observer), std::move(file), kBytesToWrite);
   loop.Run();
 
@@ -252,14 +261,16 @@
   const std::string kTestString = ".";
   base::FilePath path = CreateTempFileWithContents(kTestString);
   base::RunLoop loop;
-  DataPipe pipe(16);
-  DataPipeReader reader(std::move(pipe.consumer_handle), 16,
-                        loop.QuitClosure());
+  ScopedDataPipeProducerHandle producer_handle;
+  ScopedDataPipeConsumerHandle consumer_handle;
+  ASSERT_EQ(CreateDataPipe(16, producer_handle, consumer_handle),
+            MOJO_RESULT_OK);
+  DataPipeReader reader(std::move(consumer_handle), 16, loop.QuitClosure());
   DataPipeObserverData observer_data;
   auto observer = std::make_unique<TestObserver>(&observer_data);
   base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
   WriteFromFileThenCloseWriter(
-      std::make_unique<DataPipeProducer>(std::move(pipe.producer_handle)),
+      std::make_unique<DataPipeProducer>(std::move(producer_handle)),
       std::move(observer), std::move(file));
   loop.Run();
 
@@ -284,15 +295,18 @@
   base::FilePath path = CreateTempFileWithContents(test_string);
 
   base::RunLoop loop;
-  DataPipe pipe(kDataPipeSize);
-  DataPipeReader reader(std::move(pipe.consumer_handle), kDataPipeSize,
+  ScopedDataPipeProducerHandle producer_handle;
+  ScopedDataPipeConsumerHandle consumer_handle;
+  ASSERT_EQ(CreateDataPipe(kDataPipeSize, producer_handle, consumer_handle),
+            MOJO_RESULT_OK);
+  DataPipeReader reader(std::move(consumer_handle), kDataPipeSize,
                         loop.QuitClosure());
 
   DataPipeObserverData observer_data;
   auto observer = std::make_unique<TestObserver>(&observer_data);
   base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
   WriteFromFileThenCloseWriter(
-      std::make_unique<DataPipeProducer>(std::move(pipe.producer_handle)),
+      std::make_unique<DataPipeProducer>(std::move(producer_handle)),
       std::move(observer), std::move(file));
   loop.Run();
 
diff --git a/mojo/public/cpp/system/tests/simple_watcher_unittest.cc b/mojo/public/cpp/system/tests/simple_watcher_unittest.cc
index 534a925..2017576 100644
--- a/mojo/public/cpp/system/tests/simple_watcher_unittest.cc
+++ b/mojo/public/cpp/system/tests/simple_watcher_unittest.cc
@@ -84,21 +84,24 @@
 }
 
 TEST_F(SimpleWatcherTest, WatchFailedPreconditionNoSpam) {
-  DataPipe pipe;
+  ScopedDataPipeProducerHandle producer_handle;
+  ScopedDataPipeConsumerHandle consumer_handle;
+  ASSERT_EQ(CreateDataPipe(nullptr, producer_handle, consumer_handle),
+            MOJO_RESULT_OK);
   bool had_failed_precondition = false;
 
   SimpleWatcher watcher(FROM_HERE, SimpleWatcher::ArmingPolicy::AUTOMATIC);
   MojoResult rc =
-      watcher.Watch(pipe.consumer_handle.get(), MOJO_HANDLE_SIGNAL_READABLE,
+      watcher.Watch(consumer_handle.get(), MOJO_HANDLE_SIGNAL_READABLE,
                     OnReady([&](MojoResult result) {
                       EXPECT_FALSE(had_failed_precondition);
                       switch (result) {
                         case MOJO_RESULT_OK:
                           const void* begin;
                           uint32_t num_bytes;
-                          pipe.consumer_handle->BeginReadData(
+                          consumer_handle->BeginReadData(
                               &begin, &num_bytes, MOJO_READ_DATA_FLAG_NONE);
-                          pipe.consumer_handle->EndReadData(num_bytes);
+                          consumer_handle->EndReadData(num_bytes);
                           break;
                         case MOJO_RESULT_FAILED_PRECONDITION:
                           had_failed_precondition = true;
@@ -108,10 +111,10 @@
   EXPECT_EQ(MOJO_RESULT_OK, rc);
 
   uint32_t size = 5;
-  EXPECT_EQ(MOJO_RESULT_OK, pipe.producer_handle->WriteData(
+  EXPECT_EQ(MOJO_RESULT_OK, producer_handle->WriteData(
                                 "hello", &size, MOJO_WRITE_DATA_FLAG_NONE));
   base::RunLoop().RunUntilIdle();
-  pipe.producer_handle.reset();
+  producer_handle.reset();
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(had_failed_precondition);
 }
diff --git a/services/network/cors/preflight_controller_unittest.cc b/services/network/cors/preflight_controller_unittest.cc
index e01e76f9..8610ad4 100644
--- a/services/network/cors/preflight_controller_unittest.cc
+++ b/services/network/cors/preflight_controller_unittest.cc
@@ -305,7 +305,8 @@
       const std::string& devtools_request_id,
       const net::CookieAndLineAccessResultList& cookies_with_access_result,
       std::vector<network::mojom::HttpRawHeaderPairPtr> headers,
-      const base::Optional<std::string>& raw_response_headers) override {
+      const base::Optional<std::string>& raw_response_headers,
+      network::mojom::IPAddressSpace resource_address_space) override {
     on_raw_response_called_ = true;
   }
   void OnCorsPreflightRequest(
diff --git a/services/network/public/cpp/cross_origin_embedder_policy_parser.cc b/services/network/public/cpp/cross_origin_embedder_policy_parser.cc
index 3f3d996..861cbd1f 100644
--- a/services/network/public/cpp/cross_origin_embedder_policy_parser.cc
+++ b/services/network/public/cpp/cross_origin_embedder_policy_parser.cc
@@ -10,7 +10,6 @@
 #include "base/strings/string_piece.h"
 #include "net/http/http_response_headers.h"
 #include "net/http/structured_headers.h"
-#include "services/network/public/cpp/features.h"
 
 namespace network {
 
@@ -45,9 +44,6 @@
 CrossOriginEmbedderPolicy ParseCrossOriginEmbedderPolicy(
     const net::HttpResponseHeaders& headers) {
   CrossOriginEmbedderPolicy coep;
-  if (!base::FeatureList::IsEnabled(features::kCrossOriginEmbedderPolicy))
-    return coep;
-
   std::string header_value;
   if (headers.GetNormalizedHeader(kHeaderName, &header_value)) {
     std::tie(coep.value, coep.reporting_endpoint) = Parse(header_value);
diff --git a/services/network/public/cpp/cross_origin_embedder_policy_parser_unittest.cc b/services/network/public/cpp/cross_origin_embedder_policy_parser_unittest.cc
index c3fb940e..938a542 100644
--- a/services/network/public/cpp/cross_origin_embedder_policy_parser_unittest.cc
+++ b/services/network/public/cpp/cross_origin_embedder_policy_parser_unittest.cc
@@ -10,16 +10,11 @@
 #include "base/optional.h"
 #include "base/test/scoped_feature_list.h"
 #include "net/http/http_response_headers.h"
-#include "services/network/public/cpp/features.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace network {
 
 TEST(CrossOriginEmbedderPolicyTest, Parse) {
-  base::test::ScopedFeatureList scoped_feature_list;
-  scoped_feature_list.InitAndEnableFeature(
-      features::kCrossOriginEmbedderPolicy);
-
   constexpr auto kNone = mojom::CrossOriginEmbedderPolicyValue::kNone;
   constexpr auto kRequireCorp =
       mojom::CrossOriginEmbedderPolicyValue::kRequireCorp;
diff --git a/services/network/public/cpp/cross_origin_resource_policy.cc b/services/network/public/cpp/cross_origin_resource_policy.cc
index b24addd..74a96f33f 100644
--- a/services/network/public/cpp/cross_origin_resource_policy.cc
+++ b/services/network/public/cpp/cross_origin_resource_policy.cc
@@ -6,12 +6,10 @@
 
 #include <string>
 
-#include "base/feature_list.h"
 #include "base/metrics/histogram_macros.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "net/http/http_response_headers.h"
 #include "services/network/public/cpp/cross_origin_embedder_policy.h"
-#include "services/network/public/cpp/features.h"
 #include "services/network/public/cpp/initiator_lock_compatibility.h"
 #include "services/network/public/cpp/url_loader_completion_status.h"
 #include "services/network/public/mojom/cross_origin_embedder_policy.mojom.h"
@@ -74,10 +72,8 @@
   if (header_value == "same-site")
     return CrossOriginResourcePolicy::kSameSite;
 
-  if (base::FeatureList::IsEnabled(features::kCrossOriginEmbedderPolicy) &&
-      header_value == "cross-origin") {
+  if (header_value == "cross-origin")
     return CrossOriginResourcePolicy::kCrossOrigin;
-  }
 
   // TODO(lukasza): Once https://github.com/whatwg/fetch/issues/760 gets
   // resolved, add support for parsing specific origins.
@@ -162,7 +158,6 @@
   if ((policy == CrossOriginResourcePolicy::kNoHeader ||
        policy == CrossOriginResourcePolicy::kParsingError) &&
       embedder_policy == mojom::CrossOriginEmbedderPolicyValue::kRequireCorp) {
-    DCHECK(base::FeatureList::IsEnabled(features::kCrossOriginEmbedderPolicy));
     policy = CrossOriginResourcePolicy::kSameOrigin;
     upgrade_to_same_origin = true;
   }
diff --git a/services/network/public/cpp/cross_origin_resource_policy_unittest.cc b/services/network/public/cpp/cross_origin_resource_policy_unittest.cc
index 5d6a9981..bc7014dc 100644
--- a/services/network/public/cpp/cross_origin_resource_policy_unittest.cc
+++ b/services/network/public/cpp/cross_origin_resource_policy_unittest.cc
@@ -6,11 +6,9 @@
 #include <vector>
 
 #include "base/memory/ref_counted.h"
-#include "base/test/scoped_feature_list.h"
 #include "net/http/http_response_headers.h"
 #include "net/http/http_util.h"
 #include "services/network/public/cpp/cross_origin_resource_policy.h"
-#include "services/network/public/cpp/features.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace network {
@@ -111,19 +109,10 @@
 }
 
 TEST(CrossOriginResourcePolicyTest, CrossSiteHeaderWithCOEP) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(features::kCrossOriginEmbedderPolicy);
   EXPECT_EQ(CrossOriginResourcePolicy::kCrossOrigin,
             ParseHeader("Cross-Origin-Resource-Policy: cross-origin"));
 }
 
-TEST(CrossOriginResourcePolicyTest, CrossSiteHeaderWithoutCOEP) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndDisableFeature(features::kCrossOriginEmbedderPolicy);
-  EXPECT_EQ(CrossOriginResourcePolicy::kParsingError,
-            ParseHeader("Cross-Origin-Resource-Policy: cross-origin"));
-}
-
 bool ShouldAllowSameSite(const std::string& initiator,
                          const std::string& target) {
   return CrossOriginResourcePolicy::ShouldAllowSameSiteForTesting(
@@ -166,9 +155,6 @@
 }
 
 TEST(CrossOriginResourcePolicyTest, WithCOEP) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(features::kCrossOriginEmbedderPolicy);
-
   mojom::URLResponseHead corp_none;
   mojom::URLResponseHead corp_same_origin;
   mojom::URLResponseHead corp_cross_origin;
@@ -309,9 +295,6 @@
 }
 
 TEST(CrossOriginResourcePolicyTest, NavigationWithCOEP) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitAndEnableFeature(features::kCrossOriginEmbedderPolicy);
-
   mojom::URLResponseHead corp_none;
   mojom::URLResponseHead corp_same_origin;
   mojom::URLResponseHead corp_cross_origin;
diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
index d177c05..e883a38 100644
--- a/services/network/public/cpp/features.cc
+++ b/services/network/public/cpp/features.cc
@@ -97,14 +97,6 @@
 const base::Feature kCrossOriginOpenerPolicyByDefault{
     "CrossOriginOpenerPolicyByDefault", base::FEATURE_DISABLED_BY_DEFAULT};
 
-// Enables Cross-Origin Embedder Policy (COEP).
-// https://html.spec.whatwg.org/#coep
-// Currently this feature is enabled for all platforms (including webview).
-// TODO(https://crbug.com/1140432): Remove this flag after M88 Stable + 1 week =
-// 2021-02-01.
-const base::Feature kCrossOriginEmbedderPolicy{
-    "CrossOriginEmbedderPolicy", base::FEATURE_ENABLED_BY_DEFAULT};
-
 // Enables the most recent developments on the crossOriginIsolated property.
 // https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/crossOriginIsolated
 const base::Feature kCrossOriginIsolated{"CrossOriginIsolated",
diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h
index fe8b2c4..05ce2d4 100644
--- a/services/network/public/cpp/features.h
+++ b/services/network/public/cpp/features.h
@@ -41,8 +41,6 @@
 COMPONENT_EXPORT(NETWORK_CPP)
 extern const base::Feature kCrossOriginOpenerPolicyByDefault;
 COMPONENT_EXPORT(NETWORK_CPP)
-extern const base::Feature kCrossOriginEmbedderPolicy;
-COMPONENT_EXPORT(NETWORK_CPP)
 extern const base::Feature kCrossOriginIsolated;
 COMPONENT_EXPORT(NETWORK_CPP)
 extern const base::Feature kSplitAuthCacheByNetworkIsolationKey;
diff --git a/services/network/public/mojom/network_service.mojom b/services/network/public/mojom/network_service.mojom
index 3e24514..001b134 100644
--- a/services/network/public/mojom/network_service.mojom
+++ b/services/network/public/mojom/network_service.mojom
@@ -19,6 +19,7 @@
 import "services/network/public/mojom/net_log.mojom";
 import "services/network/public/mojom/network_change_manager.mojom";
 import "services/network/public/mojom/network_context.mojom";
+import "services/network/public/mojom/ip_address_space.mojom";
 import "services/network/public/mojom/network_interface.mojom";
 import "services/network/public/mojom/network_param.mojom";
 import "services/network/public/mojom/network_quality_estimator_manager.mojom";
@@ -79,7 +80,8 @@
     string devtool_request_id,
     array<CookieAndLineWithAccessResult> cookies_with_access_result,
     array<HttpRawHeaderPair> headers,
-    string? raw_response_headers);
+    string? raw_response_headers,
+    IPAddressSpace resource_address_space);
 
   // Called to send the CORS preflight request information. Only called when
   // |devtool_request_id| is available on the original request.
diff --git a/services/network/restricted_cookie_manager_unittest.cc b/services/network/restricted_cookie_manager_unittest.cc
index 65d6661..be3a863a 100644
--- a/services/network/restricted_cookie_manager_unittest.cc
+++ b/services/network/restricted_cookie_manager_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "services/network/restricted_cookie_manager.h"
 
-#include <algorithm>
 #include <set>
 
 #include "base/bind.h"
@@ -43,15 +42,14 @@
 class RecordingCookieObserver : public network::mojom::CookieAccessObserver {
  public:
   struct CookieOp {
-    bool get = false;
+    mojom::CookieAccessDetails::Type type;
     GURL url;
     GURL site_for_cookies;
     mojom::CookieOrLinePtr cookie_or_line;
     net::CookieInclusionStatus status;
-    base::Optional<std::string> devtools_request_id;
 
     friend void PrintTo(const CookieOp& op, std::ostream* os) {
-      *os << "{get=" << op.get << ", url=" << op.url
+      *os << "{type=" << op.type << ", url=" << op.url
           << ", site_for_cookies=" << op.site_for_cookies
           << ", cookie_or_line=(" << CookieOrLineToString(op.cookie_or_line)
           << ", " << static_cast<int>(op.cookie_or_line->which()) << ")"
@@ -84,12 +82,11 @@
   void OnCookiesAccessed(mojom::CookieAccessDetailsPtr details) override {
     for (const auto& cookie_and_access_result : details->cookie_list) {
       CookieOp op;
-      op.get = details->type == mojom::CookieAccessDetails::Type::kRead;
+      op.type = details->type;
       op.url = details->url;
       op.site_for_cookies = details->site_for_cookies.RepresentativeUrl();
       op.cookie_or_line = std::move(cookie_and_access_result->cookie_or_line);
       op.status = cookie_and_access_result->access_result.status;
-      op.devtools_request_id = details->devtools_request_id;
       recorded_activity_.push_back(std::move(op));
     }
   }
@@ -112,7 +109,7 @@
   explicit RestrictedCookieManagerSync(
       mojom::RestrictedCookieManager* cookie_service)
       : cookie_service_(cookie_service) {}
-  ~RestrictedCookieManagerSync() {}
+  ~RestrictedCookieManagerSync() = default;
 
   // Wraps GetAllForUrl() but discards CookieAccessResult from returned cookies.
   std::vector<net::CanonicalCookie> GetAllForUrl(
@@ -222,7 +219,7 @@
     sync_service_ =
         std::make_unique<RestrictedCookieManagerSync>(service_remote_.get());
   }
-  ~RestrictedCookieManagerTest() override {}
+  ~RestrictedCookieManagerTest() override = default;
 
   void SetUp() override {
     mojo::SetDefaultProcessErrorHandler(base::BindRepeating(
@@ -370,31 +367,27 @@
 
 namespace {
 
-bool CompareCanonicalCookies(const net::CanonicalCookie& c1,
-                             const net::CanonicalCookie& c2) {
-  return c1.PartialCompare(c2);
-}
+using testing::ElementsAre;
+using testing::IsEmpty;
+using testing::Not;
+using testing::UnorderedElementsAre;
 
-MATCHER_P6(MatchesCookieOp,
-           get,
+MATCHER_P5(MatchesCookieOp,
+           type,
            url,
            site_for_cookies,
            cookie_or_line,
            status,
-           devtools_request_id,
            "") {
   return testing::ExplainMatchResult(
       testing::AllOf(
-          testing::Field(&RecordingCookieObserver::CookieOp::get, get),
+          testing::Field(&RecordingCookieObserver::CookieOp::type, type),
           testing::Field(&RecordingCookieObserver::CookieOp::url, url),
           testing::Field(&RecordingCookieObserver::CookieOp::site_for_cookies,
                          site_for_cookies),
           testing::Field(&RecordingCookieObserver::CookieOp::cookie_or_line,
                          cookie_or_line),
-          testing::Field(&RecordingCookieObserver::CookieOp::status, status),
-          testing::Field(
-              &RecordingCookieObserver::CookieOp::devtools_request_id,
-              devtools_request_id)),
+          testing::Field(&RecordingCookieObserver::CookieOp::status, status)),
       arg, result_listener);
 }
 
@@ -407,6 +400,24 @@
       result_listener);
 }
 
+MATCHER(IsInclude, "") {
+  net::CookieInclusionStatus status = arg;
+  return testing::ExplainMatchResult(true, status.IsInclude(), result_listener);
+}
+
+MATCHER(ShouldWarn, "") {
+  net::CookieInclusionStatus status = arg;
+  return testing::ExplainMatchResult(true, status.ShouldWarn(),
+                                     result_listener);
+}
+
+MATCHER_P2(MatchesCookieNameValue, name, value, "") {
+  return testing::ExplainMatchResult(
+      testing::AllOf(testing::Property(&net::CanonicalCookie::Name, name),
+                     testing::Property(&net::CanonicalCookie::Value, value)),
+      arg, result_listener);
+}
+
 MATCHER_P2(CookieOrLine, string, type, "") {
   return type == arg->which() &&
          testing::ExplainMatchResult(
@@ -472,18 +483,13 @@
   auto options = mojom::CookieManagerGetOptions::New();
   options->name = "";
   options->match_type = mojom::CookieMatchType::STARTS_WITH;
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://example.com/test/"), GURL("https://example.com"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-  ASSERT_THAT(cookies, testing::SizeIs(2));
-  std::sort(cookies.begin(), cookies.end(), &CompareCanonicalCookies);
-
-  EXPECT_EQ("cookie-name", cookies[0].Name());
-  EXPECT_EQ("cookie-value", cookies[0].Value());
-
-  EXPECT_EQ("cookie-name-2", cookies[1].Name());
-  EXPECT_EQ("cookie-value-2", cookies[1].Value());
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://example.com/test/"), GURL("https://example.com"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      UnorderedElementsAre(
+          MatchesCookieNameValue("cookie-name", "cookie-value"),
+          MatchesCookieNameValue("cookie-name-2", "cookie-value-2")));
 
   // Can also use the document.cookie-style API to get the same info.
   std::string cookies_out;
@@ -501,11 +507,11 @@
   auto options = mojom::CookieManagerGetOptions::New();
   options->name = "";
   options->match_type = mojom::CookieMatchType::EQUALS;
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://example.com/test/"), GURL("https://example.com"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-  ASSERT_THAT(cookies, testing::SizeIs(0));
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://example.com/test/"), GURL("https://example.com"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      IsEmpty());
 }
 
 TEST_P(RestrictedCookieManagerTest, GetAllForUrlEqualsMatch) {
@@ -515,14 +521,11 @@
   auto options = mojom::CookieManagerGetOptions::New();
   options->name = "cookie-name";
   options->match_type = mojom::CookieMatchType::EQUALS;
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://example.com/test/"), GURL("https://example.com"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-  ASSERT_THAT(cookies, testing::SizeIs(1));
-
-  EXPECT_EQ("cookie-name", cookies[0].Name());
-  EXPECT_EQ("cookie-value", cookies[0].Value());
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://example.com/test/"), GURL("https://example.com"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      ElementsAre(MatchesCookieNameValue("cookie-name", "cookie-value")));
 }
 
 TEST_P(RestrictedCookieManagerTest, GetAllForUrlStartsWithMatch) {
@@ -534,18 +537,13 @@
   auto options = mojom::CookieManagerGetOptions::New();
   options->name = "cookie-name-2";
   options->match_type = mojom::CookieMatchType::STARTS_WITH;
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://example.com/test/"), GURL("https://example.com"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-  ASSERT_THAT(cookies, testing::SizeIs(2));
-  std::sort(cookies.begin(), cookies.end(), &CompareCanonicalCookies);
-
-  EXPECT_EQ("cookie-name-2", cookies[0].Name());
-  EXPECT_EQ("cookie-value-2", cookies[0].Value());
-
-  EXPECT_EQ("cookie-name-2b", cookies[1].Name());
-  EXPECT_EQ("cookie-value-2b", cookies[1].Value());
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://example.com/test/"), GURL("https://example.com"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      UnorderedElementsAre(
+          MatchesCookieNameValue("cookie-name-2", "cookie-value-2"),
+          MatchesCookieNameValue("cookie-name-2b", "cookie-value-2b")));
 }
 
 TEST_P(RestrictedCookieManagerTest, GetAllForUrlHttpOnly) {
@@ -561,16 +559,14 @@
       url::Origin::Create(GURL("https://example.com")), std::move(options));
 
   if (GetParam() == mojom::RestrictedCookieManagerRole::SCRIPT) {
-    ASSERT_THAT(cookies, testing::SizeIs(1));
-    EXPECT_EQ("cookie-name", cookies[0].Name());
-    EXPECT_EQ("cookie-value", cookies[0].Value());
+    EXPECT_THAT(cookies, UnorderedElementsAre(MatchesCookieNameValue(
+                             "cookie-name", "cookie-value")));
   } else {
-    ASSERT_THAT(cookies, testing::SizeIs(2));
-    EXPECT_EQ("cookie-name", cookies[0].Name());
-    EXPECT_EQ("cookie-value", cookies[0].Value());
-
-    EXPECT_EQ("cookie-name-http", cookies[1].Name());
-    EXPECT_EQ("cookie-value-2", cookies[1].Value());
+    EXPECT_THAT(
+        cookies,
+        UnorderedElementsAre(
+            MatchesCookieNameValue("cookie-name", "cookie-value"),
+            MatchesCookieNameValue("cookie-name-http", "cookie-value-2")));
   }
 }
 
@@ -584,12 +580,12 @@
   options->name = "";
   options->match_type = mojom::CookieMatchType::STARTS_WITH;
   ExpectBadMessage();
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://not-example.com/test/"), GURL("https://example.com"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://not-example.com/test/"), GURL("https://example.com"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      IsEmpty());
   EXPECT_TRUE(received_bad_message());
-
-  ASSERT_THAT(cookies, testing::SizeIs(0));
 }
 
 TEST_P(RestrictedCookieManagerTest, GetAllForUrlFromOpaqueOrigin) {
@@ -603,12 +599,12 @@
   options->name = "";
   options->match_type = mojom::CookieMatchType::STARTS_WITH;
   ExpectBadMessage();
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://example.com/test/"), GURL("https://example.com"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://example.com/test/"), GURL("https://example.com"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      IsEmpty());
   EXPECT_TRUE(received_bad_message());
-
-  ASSERT_THAT(cookies, testing::SizeIs(0));
 }
 
 TEST_P(RestrictedCookieManagerTest, GetCookieStringFromWrongOrigin) {
@@ -624,7 +620,7 @@
       net::SiteForCookies::FromUrl(GURL("https://example.com")),
       url::Origin::Create(GURL("https://example.com")), &cookies_out));
   EXPECT_TRUE(received_bad_message());
-  EXPECT_TRUE(cookies_out.empty());
+  EXPECT_THAT(cookies_out, IsEmpty());
 }
 
 TEST_P(RestrictedCookieManagerTest, GetAllForUrlPolicy) {
@@ -638,23 +634,21 @@
     options->name = "cookie-name";
     options->match_type = mojom::CookieMatchType::STARTS_WITH;
 
-    std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-        GURL("https://example.com/test/"), GURL("https://notexample.com"),
-        url::Origin::Create(GURL("https://example.com")), std::move(options));
-    ASSERT_THAT(cookies, testing::SizeIs(1));
-    EXPECT_EQ("cookie-name", cookies[0].Name());
-    EXPECT_EQ("cookie-value", cookies[0].Value());
+    EXPECT_THAT(
+        sync_service_->GetAllForUrl(
+            GURL("https://example.com/test/"), GURL("https://notexample.com"),
+            url::Origin::Create(GURL("https://example.com")),
+            std::move(options)),
+        ElementsAre(MatchesCookieNameValue("cookie-name", "cookie-value")));
   }
 
-  ASSERT_EQ(1u, recorded_activity().size());
-  EXPECT_EQ(recorded_activity()[0].get, true);
-  EXPECT_EQ(recorded_activity()[0].url, "https://example.com/test/");
-  EXPECT_EQ(recorded_activity()[0].site_for_cookies, "https://notexample.com/");
-  EXPECT_THAT(recorded_activity()[0].cookie_or_line,
-              CookieOrLine("cookie-name=cookie-value",
-                           mojom::CookieOrLine::Tag::COOKIE));
-  EXPECT_TRUE(recorded_activity()[0].status.IsInclude());
-  EXPECT_FALSE(recorded_activity()[0].status.ShouldWarn());
+  EXPECT_THAT(recorded_activity(),
+              ElementsAre(MatchesCookieOp(
+                  mojom::CookieAccessDetails::Type::kRead,
+                  "https://example.com/test/", "https://notexample.com/",
+                  CookieOrLine("cookie-name=cookie-value",
+                               mojom::CookieOrLine::Tag::COOKIE),
+                  testing::AllOf(IsInclude(), Not(ShouldWarn())))));
 
   // Disabing getting third-party cookies works correctly.
   cookie_settings_.set_block_third_party_cookies(true);
@@ -663,22 +657,26 @@
     options->name = "cookie-name";
     options->match_type = mojom::CookieMatchType::STARTS_WITH;
 
-    std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-        GURL("https://example.com/test/"), GURL("https://notexample.com"),
-        url::Origin::Create(GURL("https://example.com")), std::move(options));
-    ASSERT_THAT(cookies, testing::SizeIs(0));
+    EXPECT_THAT(
+        sync_service_->GetAllForUrl(
+            GURL("https://example.com/test/"), GURL("https://notexample.com"),
+            url::Origin::Create(GURL("https://example.com")),
+            std::move(options)),
+        IsEmpty());
   }
 
-  ASSERT_EQ(2u, recorded_activity().size());
-  EXPECT_EQ(recorded_activity()[1].get, true);
-  EXPECT_EQ(recorded_activity()[1].url, "https://example.com/test/");
-  EXPECT_EQ(recorded_activity()[1].site_for_cookies, "https://notexample.com/");
-  EXPECT_THAT(recorded_activity()[1].cookie_or_line,
+  EXPECT_THAT(
+      recorded_activity(),
+      ElementsAre(
+          testing::_,
+          MatchesCookieOp(
+              mojom::CookieAccessDetails::Type::kRead,
+              "https://example.com/test/", "https://notexample.com/",
               CookieOrLine("cookie-name=cookie-value",
-                           mojom::CookieOrLine::Tag::COOKIE));
-  EXPECT_TRUE(
-      recorded_activity()[1].status.HasExactlyExclusionReasonsForTesting(
-          {net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES}));
+                           mojom::CookieOrLine::Tag::COOKIE),
+              HasExactlyExclusionReasonsForTesting(
+                  std::vector<net::CookieInclusionStatus::ExclusionReason>{
+                      net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES}))));
 }
 
 TEST_P(RestrictedCookieManagerTest, GetAllForUrlPolicyWarnActual) {
@@ -709,23 +707,24 @@
     options->name = "cookie-name";
     options->match_type = mojom::CookieMatchType::STARTS_WITH;
 
-    std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-        GURL("https://example.com/test/"), GURL("https://notexample.com"),
-        url::Origin::Create(GURL("https://example.com")), std::move(options));
-    EXPECT_TRUE(cookies.empty());
+    EXPECT_THAT(
+        sync_service_->GetAllForUrl(
+            GURL("https://example.com/test/"), GURL("https://notexample.com"),
+            url::Origin::Create(GURL("https://example.com")),
+            std::move(options)),
+        IsEmpty());
   }
 
-  ASSERT_EQ(1u, recorded_activity().size());
-
-  EXPECT_EQ(recorded_activity()[0].get, true);
-  EXPECT_EQ(recorded_activity()[0].url, "https://example.com/test/");
-  EXPECT_EQ(recorded_activity()[0].site_for_cookies, "https://notexample.com/");
-  EXPECT_THAT(recorded_activity()[0].cookie_or_line,
-              CookieOrLine("cookie-name=cookie-value",
-                           mojom::CookieOrLine::Tag::COOKIE));
-  EXPECT_TRUE(
-      recorded_activity()[0].status.HasExactlyExclusionReasonsForTesting(
-          {net::CookieInclusionStatus::EXCLUDE_SAMESITE_NONE_INSECURE}));
+  EXPECT_THAT(recorded_activity(),
+              ElementsAre(MatchesCookieOp(
+                  mojom::CookieAccessDetails::Type::kRead,
+                  "https://example.com/test/", "https://notexample.com/",
+                  CookieOrLine("cookie-name=cookie-value",
+                               mojom::CookieOrLine::Tag::COOKIE),
+                  HasExactlyExclusionReasonsForTesting(
+                      std::vector<net::CookieInclusionStatus::ExclusionReason>{
+                          net::CookieInclusionStatus::
+                              EXCLUDE_SAMESITE_NONE_INSECURE}))));
 }
 
 TEST_P(SamePartyEnabledRestrictedCookieManagerTest, GetAllForUrlSameParty) {
@@ -736,14 +735,12 @@
     options->name = "cookie-name";
     options->match_type = mojom::CookieMatchType::STARTS_WITH;
 
-    std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-        GURL("https://example.com/test/"), GURL("https://example.com"),
-        url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-    ASSERT_THAT(cookies, testing::SizeIs(1));
-
-    EXPECT_EQ("cookie-name", cookies[0].Name());
-    EXPECT_EQ("cookie-value", cookies[0].Value());
+    EXPECT_THAT(
+        sync_service_->GetAllForUrl(
+            GURL("https://example.com/test/"), GURL("https://example.com"),
+            url::Origin::Create(GURL("https://example.com")),
+            std::move(options)),
+        ElementsAre(MatchesCookieNameValue("cookie-name", "cookie-value")));
   }
   // Same Party. `party_context` contains fps site.
   {
@@ -758,14 +755,12 @@
     options->name = "cookie-name";
     options->match_type = mojom::CookieMatchType::STARTS_WITH;
 
-    std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-        GURL("https://example.com/test/"), GURL(),
-        url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-    ASSERT_THAT(cookies, testing::SizeIs(1));
-
-    EXPECT_EQ("cookie-name", cookies[0].Name());
-    EXPECT_EQ("cookie-value", cookies[0].Value());
+    EXPECT_THAT(
+        sync_service_->GetAllForUrl(
+            GURL("https://example.com/test/"), GURL(),
+            url::Origin::Create(GURL("https://example.com")),
+            std::move(options)),
+        ElementsAre(MatchesCookieNameValue("cookie-name", "cookie-value")));
   }
 
   // Cross Party
@@ -782,17 +777,24 @@
     options->name = "cookie-name";
     options->match_type = mojom::CookieMatchType::STARTS_WITH;
 
-    std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-        GURL("https://example.com/test/"), GURL(),
-        url::Origin::Create(GURL("https://example.com")), std::move(options));
+    EXPECT_THAT(sync_service_->GetAllForUrl(
+                    GURL("https://example.com/test/"), GURL(),
+                    url::Origin::Create(GURL("https://example.com")),
+                    std::move(options)),
+                IsEmpty());
 
-    EXPECT_THAT(cookies, testing::IsEmpty());
-
-    ASSERT_EQ(3u, recorded_activity().size());
-    EXPECT_TRUE(
-        recorded_activity()[2].status.HasExactlyExclusionReasonsForTesting(
-            {net::CookieInclusionStatus::
-                 EXCLUDE_SAMEPARTY_CROSS_PARTY_CONTEXT}));
+    EXPECT_THAT(
+        recorded_activity(),
+        ElementsAre(
+            testing::_, testing::_,
+            MatchesCookieOp(
+                testing::_ /* type */, testing::_ /* url */,
+                testing::_ /* site_for_cookies */,
+                testing::_ /* cookie_or_line */,
+                HasExactlyExclusionReasonsForTesting(
+                    std::vector<net::CookieInclusionStatus::ExclusionReason>{
+                        net::CookieInclusionStatus::
+                            EXCLUDE_SAMEPARTY_CROSS_PARTY_CONTEXT}))));
   }
 }
 
@@ -809,14 +811,11 @@
   auto options = mojom::CookieManagerGetOptions::New();
   options->name = "new-name";
   options->match_type = mojom::CookieMatchType::EQUALS;
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://example.com/test/"), GURL("https://example.com"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-  ASSERT_THAT(cookies, testing::SizeIs(1));
-
-  EXPECT_EQ("new-name", cookies[0].Name());
-  EXPECT_EQ("new-value", cookies[0].Value());
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://example.com/test/"), GURL("https://example.com"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      ElementsAre(MatchesCookieNameValue("new-name", "new-value")));
 }
 
 TEST_P(RestrictedCookieManagerTest, SetCanonicalCookieHttpOnly) {
@@ -838,12 +837,10 @@
       url::Origin::Create(GURL("https://example.com")), std::move(options));
 
   if (GetParam() == mojom::RestrictedCookieManagerRole::SCRIPT) {
-    ASSERT_THAT(cookies, testing::SizeIs(0));
+    EXPECT_THAT(cookies, IsEmpty());
   } else {
-    ASSERT_THAT(cookies, testing::SizeIs(1));
-
-    EXPECT_EQ("new-name", cookies[0].Name());
-    EXPECT_EQ("new-value", cookies[0].Value());
+    EXPECT_THAT(cookies,
+                ElementsAre(MatchesCookieNameValue("new-name", "new-value")));
   }
 }
 
@@ -856,14 +853,11 @@
   auto options = mojom::CookieManagerGetOptions::New();
   options->name = "new-name";
   options->match_type = mojom::CookieMatchType::EQUALS;
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://example.com/test/"), GURL("https://example.com"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-  ASSERT_THAT(cookies, testing::SizeIs(1));
-
-  EXPECT_EQ("new-name", cookies[0].Name());
-  EXPECT_EQ("new-value", cookies[0].Value());
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://example.com/test/"), GURL("https://example.com"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      ElementsAre(MatchesCookieNameValue("new-name", "new-value")));
 }
 
 TEST_P(RestrictedCookieManagerTest, SetCanonicalCookieFromWrongOrigin) {
@@ -932,14 +926,12 @@
         url::Origin::Create(GURL("https://example.com"))));
   }
 
-  ASSERT_EQ(1u, recorded_activity().size());
-  EXPECT_EQ(recorded_activity()[0].get, false);
-  EXPECT_EQ(recorded_activity()[0].url, "https://example.com/");
-  EXPECT_EQ(recorded_activity()[0].site_for_cookies, "https://notexample.com/");
-  EXPECT_THAT(recorded_activity()[0].cookie_or_line,
-              CookieOrLine("A=B", mojom::CookieOrLine::Tag::COOKIE));
-  EXPECT_TRUE(recorded_activity()[0].status.IsInclude());
-  EXPECT_FALSE(recorded_activity()[0].status.ShouldWarn());
+  EXPECT_THAT(recorded_activity(),
+              ElementsAre(MatchesCookieOp(
+                  mojom::CookieAccessDetails::Type::kChange,
+                  "https://example.com/", "https://notexample.com/",
+                  CookieOrLine("A=B", mojom::CookieOrLine::Tag::COOKIE),
+                  testing::AllOf(IsInclude(), Not(ShouldWarn())))));
 
   service_->OverrideSiteForCookiesForTesting(
       net::SiteForCookies::FromUrl(GURL("https://otherexample.com")));
@@ -954,16 +946,17 @@
         url::Origin::Create(GURL("https://example.com"))));
   }
 
-  ASSERT_EQ(2u, recorded_activity().size());
-  EXPECT_EQ(recorded_activity()[1].get, false);
-  EXPECT_EQ(recorded_activity()[1].url, "https://example.com/");
-  EXPECT_EQ(recorded_activity()[1].site_for_cookies,
-            "https://otherexample.com/");
-  EXPECT_THAT(recorded_activity()[1].cookie_or_line,
-              CookieOrLine("A2=B2", mojom::CookieOrLine::Tag::COOKIE));
-  EXPECT_TRUE(
-      recorded_activity()[1].status.HasExactlyExclusionReasonsForTesting(
-          {net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES}));
+  EXPECT_THAT(
+      recorded_activity(),
+      ElementsAre(
+          testing::_,
+          MatchesCookieOp(
+              mojom::CookieAccessDetails::Type::kChange, "https://example.com/",
+              "https://otherexample.com/",
+              CookieOrLine("A2=B2", mojom::CookieOrLine::Tag::COOKIE),
+              HasExactlyExclusionReasonsForTesting(
+                  std::vector<net::CookieInclusionStatus::ExclusionReason>{
+                      net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES}))));
 
   // Read back, in first-party context
   auto options = mojom::CookieManagerGetOptions::New();
@@ -972,20 +965,20 @@
 
   service_->OverrideSiteForCookiesForTesting(
       net::SiteForCookies::FromUrl(GURL("https://example.com")));
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      GURL("https://example.com/test/"), GURL("https://example.com/"),
-      url::Origin::Create(GURL("https://example.com")), std::move(options));
-  ASSERT_THAT(cookies, testing::SizeIs(1));
-  EXPECT_EQ("A", cookies[0].Name());
-  EXPECT_EQ("B", cookies[0].Value());
+  EXPECT_THAT(
+      sync_service_->GetAllForUrl(
+          GURL("https://example.com/test/"), GURL("https://example.com/"),
+          url::Origin::Create(GURL("https://example.com")), std::move(options)),
+      ElementsAre(MatchesCookieNameValue("A", "B")));
 
-  ASSERT_EQ(3u, recorded_activity().size());
-  EXPECT_EQ(recorded_activity()[2].get, true);
-  EXPECT_EQ(recorded_activity()[2].url, "https://example.com/test/");
-  EXPECT_EQ(recorded_activity()[2].site_for_cookies, "https://example.com/");
-  EXPECT_THAT(recorded_activity()[2].cookie_or_line,
-              CookieOrLine("A=B", mojom::CookieOrLine::Tag::COOKIE));
-  EXPECT_TRUE(recorded_activity()[2].status.IsInclude());
+  EXPECT_THAT(
+      recorded_activity(),
+      ElementsAre(
+          testing::_, testing::_,
+          MatchesCookieOp(mojom::CookieAccessDetails::Type::kRead,
+                          "https://example.com/test/", "https://example.com/",
+                          CookieOrLine("A=B", mojom::CookieOrLine::Tag::COOKIE),
+                          IsInclude())));
 }
 
 TEST_P(RestrictedCookieManagerTest, SetCanonicalCookiePolicyWarnActual) {
@@ -1003,16 +996,15 @@
       *cookie, GURL("https://example.com"), GURL("https://notexample.com"),
       url::Origin::Create(GURL("https://example.com"))));
 
-  ASSERT_EQ(1u, recorded_activity().size());
-  EXPECT_EQ(recorded_activity()[0].get, false);
-  EXPECT_EQ(recorded_activity()[0].url, "https://example.com/");
-  EXPECT_EQ(recorded_activity()[0].site_for_cookies, "https://notexample.com/");
-  EXPECT_THAT(recorded_activity()[0].cookie_or_line,
-              CookieOrLine("A=B", mojom::CookieOrLine::Tag::COOKIE));
-  EXPECT_TRUE(
-      recorded_activity()[0].status.HasExactlyExclusionReasonsForTesting(
-          {net::CookieInclusionStatus::
-               EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX}));
+  EXPECT_THAT(recorded_activity(),
+              ElementsAre(MatchesCookieOp(
+                  mojom::CookieAccessDetails::Type::kChange,
+                  "https://example.com/", "https://notexample.com/",
+                  CookieOrLine("A=B", mojom::CookieOrLine::Tag::COOKIE),
+                  HasExactlyExclusionReasonsForTesting(
+                      std::vector<net::CookieInclusionStatus::ExclusionReason>{
+                          net::CookieInclusionStatus::
+                              EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX}))));
 }
 
 TEST_P(SamePartyEnabledRestrictedCookieManagerTest,
@@ -1024,14 +1016,14 @@
 
   EXPECT_THAT(
       recorded_activity(),
-      testing::ElementsAre(MatchesCookieOp(
-          false /* get */, GURL("https://example.com/test/"), GURL(),
+      ElementsAre(MatchesCookieOp(
+          mojom::CookieAccessDetails::Type::kChange,
+          GURL("https://example.com/test/"), GURL(),
           CookieOrLine("name=value;SameParty",
                        mojom::CookieOrLine::Tag::COOKIE_STRING),
           HasExactlyExclusionReasonsForTesting(
               std::vector<net::CookieInclusionStatus::ExclusionReason>{
-                  net::CookieInclusionStatus::EXCLUDE_INVALID_SAMEPARTY}),
-          testing::_)));
+                  net::CookieInclusionStatus::EXCLUDE_INVALID_SAMEPARTY}))));
 }
 
 TEST_P(SamePartyEnabledRestrictedCookieManagerTest,
@@ -1060,14 +1052,11 @@
     auto options = mojom::CookieManagerGetOptions::New();
     options->name = "new-name";
     options->match_type = mojom::CookieMatchType::EQUALS;
-    std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-        GURL("https://member1.com/test/"), GURL(),
-        url::Origin::Create(GURL("https://example.com")), std::move(options));
-
-    ASSERT_THAT(cookies, testing::SizeIs(1));
-
-    EXPECT_EQ("new-name", cookies[0].Name());
-    EXPECT_EQ("new-value", cookies[0].Value());
+    EXPECT_THAT(sync_service_->GetAllForUrl(
+                    GURL("https://member1.com/test/"), GURL(),
+                    url::Origin::Create(GURL("https://example.com")),
+                    std::move(options)),
+                ElementsAre(MatchesCookieNameValue("new-name", "new-value")));
   }
 
   // Cross Party
@@ -1092,17 +1081,19 @@
         GURL("https://example.com/test/"), GURL(),
         url::Origin::Create(GURL("https://example.com"))));
 
-    ASSERT_EQ(3u, recorded_activity().size());
-    EXPECT_EQ(recorded_activity()[2].get, false);
-    EXPECT_EQ(recorded_activity()[2].url, "https://example.com/test/");
-    EXPECT_EQ(recorded_activity()[2].site_for_cookies, GURL());
     EXPECT_THAT(
-        recorded_activity()[2].cookie_or_line,
-        CookieOrLine("new-name=new-value", mojom::CookieOrLine::Tag::COOKIE));
-    EXPECT_TRUE(
-        recorded_activity()[2].status.HasExactlyExclusionReasonsForTesting(
-            {net::CookieInclusionStatus::
-                 EXCLUDE_SAMEPARTY_CROSS_PARTY_CONTEXT}));
+        recorded_activity(),
+        ElementsAre(
+            testing::_, testing::_,
+            MatchesCookieOp(
+                mojom::CookieAccessDetails::Type::kChange,
+                "https://example.com/test/", GURL(),
+                CookieOrLine("new-name=new-value",
+                             mojom::CookieOrLine::Tag::COOKIE),
+                HasExactlyExclusionReasonsForTesting(
+                    std::vector<net::CookieInclusionStatus::ExclusionReason>{
+                        net::CookieInclusionStatus::
+                            EXCLUDE_SAMEPARTY_CROSS_PARTY_CONTEXT}))));
   }
 }
 
@@ -1173,9 +1164,9 @@
   auto options = mojom::CookieManagerGetOptions::New();
   options->name = "";
   options->match_type = mojom::CookieMatchType::STARTS_WITH;
-  std::vector<net::CanonicalCookie> cookies = sync_service_->GetAllForUrl(
-      https_url, chrome_url, https_origin, std::move(options));
-  EXPECT_THAT(cookies, testing::SizeIs(2));
+  EXPECT_THAT(sync_service_->GetAllForUrl(https_url, chrome_url, https_origin,
+                                          std::move(options)),
+              testing::SizeIs(2));
 
   // Test if site_for_cookies is chrome, then SameSite cookies cannot be
   // set and gotten if the origin is not secure.
@@ -1199,9 +1190,9 @@
   options = mojom::CookieManagerGetOptions::New();
   options->name = "";
   options->match_type = mojom::CookieMatchType::STARTS_WITH;
-  cookies = sync_service_->GetAllForUrl(http_url, chrome_url, http_origin,
-                                        std::move(options));
-  EXPECT_THAT(cookies, testing::SizeIs(0));
+  EXPECT_THAT(sync_service_->GetAllForUrl(http_url, chrome_url, http_origin,
+                                          std::move(options)),
+              IsEmpty());
 }
 
 namespace {
@@ -1209,7 +1200,7 @@
 // Stashes the cookie changes it receives, for testing.
 class TestCookieChangeListener : public network::mojom::CookieChangeListener {
  public:
-  TestCookieChangeListener(
+  explicit TestCookieChangeListener(
       mojo::PendingReceiver<network::mojom::CookieChangeListener> receiver)
       : receiver_(this, std::move(receiver)) {}
   ~TestCookieChangeListener() override = default;
@@ -1263,8 +1254,8 @@
   ASSERT_THAT(listener.observed_changes(), testing::SizeIs(1));
   EXPECT_EQ(net::CookieChangeCause::INSERTED,
             listener.observed_changes()[0].cause);
-  EXPECT_EQ("cookie-name", listener.observed_changes()[0].cookie.Name());
-  EXPECT_EQ("cookie-value", listener.observed_changes()[0].cookie.Value());
+  EXPECT_THAT(listener.observed_changes()[0].cookie,
+              MatchesCookieNameValue("cookie-name", "cookie-value"));
 }
 
 TEST_P(RestrictedCookieManagerTest, ChangeSettings) {
@@ -1279,12 +1270,12 @@
       std::move(listener_remote));
   TestCookieChangeListener listener(std::move(receiver));
 
-  ASSERT_THAT(listener.observed_changes(), testing::SizeIs(0));
+  EXPECT_THAT(listener.observed_changes(), IsEmpty());
 
   cookie_settings_.set_block_third_party_cookies(true);
   SetSessionCookie("cookie-name", "cookie-value", "example.com", "/");
   base::RunLoop().RunUntilIdle();
-  ASSERT_THAT(listener.observed_changes(), testing::SizeIs(0));
+  EXPECT_THAT(listener.observed_changes(), IsEmpty());
 }
 
 TEST_P(RestrictedCookieManagerTest, AddChangeListenerFromWrongOrigin) {
@@ -1309,21 +1300,21 @@
       std::move(good_listener_remote));
   TestCookieChangeListener good_listener(std::move(good_receiver));
 
-  ASSERT_THAT(bad_listener.observed_changes(), testing::SizeIs(0));
-  ASSERT_THAT(good_listener.observed_changes(), testing::SizeIs(0));
+  ASSERT_THAT(bad_listener.observed_changes(), IsEmpty());
+  ASSERT_THAT(good_listener.observed_changes(), IsEmpty());
 
   SetSessionCookie("other-cookie-name", "other-cookie-value", "not-example.com",
                    "/");
   SetSessionCookie("cookie-name", "cookie-value", "example.com", "/");
   good_listener.WaitForChange();
 
-  EXPECT_THAT(bad_listener.observed_changes(), testing::SizeIs(0));
+  EXPECT_THAT(bad_listener.observed_changes(), IsEmpty());
 
   ASSERT_THAT(good_listener.observed_changes(), testing::SizeIs(1));
   EXPECT_EQ(net::CookieChangeCause::INSERTED,
             good_listener.observed_changes()[0].cause);
-  EXPECT_EQ("cookie-name", good_listener.observed_changes()[0].cookie.Name());
-  EXPECT_EQ("cookie-value", good_listener.observed_changes()[0].cookie.Value());
+  EXPECT_THAT(good_listener.observed_changes()[0].cookie,
+              MatchesCookieNameValue("cookie-name", "cookie-value"));
 }
 
 TEST_P(RestrictedCookieManagerTest, AddChangeListenerFromOpaqueOrigin) {
@@ -1342,7 +1333,7 @@
   EXPECT_TRUE(received_bad_message());
 
   TestCookieChangeListener bad_listener(std::move(bad_receiver));
-  ASSERT_THAT(bad_listener.observed_changes(), testing::SizeIs(0));
+  ASSERT_THAT(bad_listener.observed_changes(), IsEmpty());
 }
 
 TEST_P(SamePartyEnabledRestrictedCookieManagerTest,
@@ -1365,7 +1356,7 @@
         std::move(listener_remote));
     TestCookieChangeListener listener(std::move(receiver));
 
-    ASSERT_THAT(listener.observed_changes(), testing::IsEmpty());
+    ASSERT_THAT(listener.observed_changes(), IsEmpty());
 
     SetSamePartyCookie("cookie-name", "cookie-value", "example.com", "/");
     listener.WaitForChange();
@@ -1373,8 +1364,8 @@
     ASSERT_THAT(listener.observed_changes(), testing::SizeIs(1));
     EXPECT_EQ(net::CookieChangeCause::INSERTED,
               listener.observed_changes()[0].cause);
-    EXPECT_EQ("cookie-name", listener.observed_changes()[0].cookie.Name());
-    EXPECT_EQ("cookie-value", listener.observed_changes()[0].cookie.Value());
+    EXPECT_THAT(listener.observed_changes()[0].cookie,
+                MatchesCookieNameValue("cookie-name", "cookie-value"));
   }
   // Cross Party.
   {
@@ -1394,9 +1385,9 @@
         std::move(listener_remote));
     TestCookieChangeListener listener(std::move(receiver));
 
-    EXPECT_THAT(listener.observed_changes(), testing::IsEmpty());
+    EXPECT_THAT(listener.observed_changes(), IsEmpty());
     SetSamePartyCookie("cookie-name", "cookie-value", "example.com", "/");
-    EXPECT_THAT(listener.observed_changes(), testing::IsEmpty());
+    EXPECT_THAT(listener.observed_changes(), IsEmpty());
   }
 }
 
@@ -1427,7 +1418,7 @@
       std::move(listener_remote));
   TestCookieChangeListener listener(std::move(receiver));
 
-  ASSERT_THAT(listener.observed_changes(), testing::SizeIs(0));
+  ASSERT_THAT(listener.observed_changes(), IsEmpty());
 
   GURL cookie_url("https://example.com");
   auto cookie = net::CanonicalCookie::Create(
diff --git a/services/network/test/test_network_service_client.cc b/services/network/test/test_network_service_client.cc
index 5a6fef8a..74f21d2 100644
--- a/services/network/test/test_network_service_client.cc
+++ b/services/network/test/test_network_service_client.cc
@@ -43,7 +43,8 @@
     const std::string& devtools_request_id,
     const net::CookieAndLineAccessResultList& cookies_with_access_result,
     std::vector<network::mojom::HttpRawHeaderPairPtr> headers,
-    const base::Optional<std::string>& raw_response_headers) {}
+    const base::Optional<std::string>& raw_response_headers,
+    network::mojom::IPAddressSpace resource_address_space) {}
 
 void TestNetworkServiceClient::OnCorsPreflightRequest(
     int32_t process_id,
diff --git a/services/network/test/test_network_service_client.h b/services/network/test/test_network_service_client.h
index a277f71..26983b7 100644
--- a/services/network/test/test_network_service_client.h
+++ b/services/network/test/test_network_service_client.h
@@ -45,7 +45,8 @@
       const std::string& devtools_request_id,
       const net::CookieAndLineAccessResultList& cookies_with_access_result,
       std::vector<network::mojom::HttpRawHeaderPairPtr> headers,
-      const base::Optional<std::string>& raw_response_headers) override;
+      const base::Optional<std::string>& raw_response_headers,
+      network::mojom::IPAddressSpace resource_address_space) override;
   void OnCorsPreflightRequest(
       int32_t process_id,
       int32_t routing_id,
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc
index f13f1d76..073d59a 100644
--- a/services/network/url_loader.cc
+++ b/services/network/url_loader.cc
@@ -2138,7 +2138,8 @@
     network_service_client_->OnRawResponse(
         GetProcessId(), GetRenderFrameId(), devtools_request_id().value(),
         url_request_->maybe_stored_cookies(), std::move(header_array),
-        raw_response_headers);
+        raw_response_headers,
+        IPAddressToIPAddressSpace(response_info.remote_endpoint.address()));
   }
 
   if (cookie_observer_) {
diff --git a/services/network/url_loader.h b/services/network/url_loader.h
index 7d0dc66..3a717c0 100644
--- a/services/network/url_loader.h
+++ b/services/network/url_loader.h
@@ -36,6 +36,7 @@
 #include "services/network/public/mojom/cross_origin_embedder_policy.mojom-forward.h"
 #include "services/network/public/mojom/fetch_api.mojom.h"
 #include "services/network/public/mojom/ip_address_space.mojom-forward.h"
+#include "services/network/public/mojom/ip_address_space.mojom-shared.h"
 #include "services/network/public/mojom/network_service.mojom.h"
 #include "services/network/public/mojom/trust_tokens.mojom-shared.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
diff --git a/services/network/url_loader_unittest.cc b/services/network/url_loader_unittest.cc
index 29eac77..9fd4a99 100644
--- a/services/network/url_loader_unittest.cc
+++ b/services/network/url_loader_unittest.cc
@@ -82,6 +82,7 @@
 #include "services/network/public/cpp/resource_request.h"
 #include "services/network/public/mojom/cookie_access_observer.mojom-forward.h"
 #include "services/network/public/mojom/cookie_access_observer.mojom.h"
+#include "services/network/public/mojom/ip_address_space.mojom-shared.h"
 #include "services/network/public/mojom/ip_address_space.mojom.h"
 #include "services/network/public/mojom/network_context.mojom.h"
 #include "services/network/public/mojom/origin_policy_manager.mojom.h"
@@ -3312,12 +3313,14 @@
       const std::string& devtools_request_id,
       const net::CookieAndLineAccessResultList& cookies_with_access_result,
       std::vector<network::mojom::HttpRawHeaderPairPtr> headers,
-      const base::Optional<std::string>& raw_response_headers) override {
+      const base::Optional<std::string>& raw_response_headers,
+      network::mojom::IPAddressSpace resource_address_space) override {
     raw_response_cookies_.insert(raw_response_cookies_.end(),
                                  cookies_with_access_result.begin(),
                                  cookies_with_access_result.end());
-
+    got_raw_response_ = true;
     devtools_request_id_ = devtools_request_id;
+    resource_address_space_ = resource_address_space;
 
     raw_response_headers_ = raw_response_headers;
 
@@ -3328,7 +3331,7 @@
   }
 
   void WaitUntilRawResponse(size_t goal) {
-    if (raw_response_cookies_.size() < goal) {
+    if (raw_response_cookies_.size() < goal || !got_raw_response_) {
       wait_for_raw_response_goal_ = goal;
       base::RunLoop run_loop;
       wait_for_raw_response_ = run_loop.QuitClosure();
@@ -3365,10 +3368,16 @@
     return client_security_state_;
   }
 
+  network::mojom::IPAddressSpace resource_address_space() const {
+    return resource_address_space_;
+  }
+
  private:
   net::CookieAndLineAccessResultList raw_response_cookies_;
   base::OnceClosure wait_for_raw_response_;
   size_t wait_for_raw_response_goal_ = 0u;
+  bool got_raw_response_ = false;
+  network::mojom::IPAddressSpace resource_address_space_;
   std::string devtools_request_id_;
   base::Optional<std::string> raw_response_headers_;
 
@@ -6282,6 +6291,41 @@
   ASSERT_FALSE(network_service_client.client_security_state());
 }
 
+TEST_F(URLLoaderTest, OnRawResponseIPAddressSpace) {
+  MockNetworkServiceClient network_service_client;
+
+  ResourceRequest request =
+      CreateResourceRequest("GET", test_server()->GetURL("/simple_page.html"));
+  request.devtools_request_id = "fake-id";
+
+  mojom::URLLoaderFactoryParams params;
+  params.process_id = kProcessId;
+  params.is_corb_enabled = false;
+
+  base::RunLoop delete_run_loop;
+  mojo::PendingRemote<mojom::URLLoader> loader;
+  std::unique_ptr<URLLoader> url_loader = std::make_unique<URLLoader>(
+      context(), &network_service_client, /* network_context_client */ nullptr,
+      DeleteLoaderCallback(&delete_run_loop, &url_loader),
+      loader.InitWithNewPipeAndPassReceiver(), 0, request,
+      client()->CreateRemote(), /*reponse_body_use_tracker=*/base::nullopt,
+      TRAFFIC_ANNOTATION_FOR_TESTS, &params,
+      /*coep_reporter=*/nullptr, 0 /* request_id */,
+      0 /* keepalive_request_size */, false /* require_network_isolation_key */,
+      resource_scheduler_client(), nullptr,
+      nullptr /* network_usage_accumulator */, nullptr /* header_client */,
+      nullptr /* origin_policy_manager */, nullptr /* trust_token_helper */,
+      kEmptyOriginAccessList /* origin_access_list */,
+      mojo::NullRemote() /* cookie_observer */);
+  delete_run_loop.Run();
+  client()->RunUntilComplete();
+  EXPECT_EQ(net::OK, client()->completion_status().error_code);
+
+  network_service_client.WaitUntilRawResponse(0);
+  ASSERT_EQ(network_service_client.resource_address_space(),
+            mojom::IPAddressSpace::kLocal);
+}
+
 TEST_F(URLLoaderMockSocketTest,
        CorbDoesNotCloseSocketsWhenResourcesNotBlocked) {
   corb_enabled_ = true;
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index 2140371..93e5bc7 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -210,6 +210,14 @@
 #define SK_DISABLE_REDUCE_OPLIST_SPLITTING
 #endif
 
+#ifndef SK_SUPPORT_LEGACY_DRAWBITMAP
+#define SK_SUPPORT_LEGACY_DRAWBITMAP
+#endif
+
+#ifndef SK_SUPPORT_LEGACY_DRAWIMAGE_NOSAMPLING
+#define SK_SUPPORT_LEGACY_DRAWIMAGE_NOSAMPLING
+#endif
+
 // Max. verb count for paths rendered by the edge-AA tessellating path renderer.
 #define GR_AA_TESSELLATOR_MAX_VERB_COUNT 100
 
diff --git a/sql/database.h b/sql/database.h
index b4eeb9b..35601a48 100644
--- a/sql/database.h
+++ b/sql/database.h
@@ -56,6 +56,19 @@
 
   // If true, the database can only be opened by one process at a time.
   //
+  // SQLite supports a locking protocol that allows multiple processes to safely
+  // operate on the same database at the same time. The locking protocol is used
+  // on every transaction, and comes with a small performance penalty.
+  //
+  // Setting this to true causes the locking protocol to be used once, when the
+  // database is opened. No other process will be able to access the database at
+  // the same time.
+  //
+  // More details at https://www.sqlite.org/pragma.html#pragma_locking_mode
+  //
+  // SQLite's locking protocol is summarized at
+  // https://www.sqlite.org/c3ref/io_methods.html
+  //
   // Exclusive mode is strongly recommended. It reduces the I/O cost of setting
   // up a transaction. It also removes the need of handling transaction failures
   // due to lock contention.
@@ -67,6 +80,13 @@
   // Chrome features yet. In particular, our custom database recovery code does
   // not support the WAL log file.
   //
+  // WAL mode is currently not fully supported on FuchsiaOS. It will only be
+  // turned on if the database is also using exclusive locking mode.
+  // (https://crbug.com/1082059)
+  //
+  // Note: Changing page size is not supported when in WAL mode. So running
+  // 'PRAGMA page_size = <new-size>' will result in no-ops.
+  //
   // More details at https://www.sqlite.org/wal.html
   bool wal_mode =
       base::FeatureList::IsEnabled(sql::features::kEnableWALModeByDefault);
@@ -76,6 +96,8 @@
   // Larger page sizes result in shallower B-trees, because they allow an inner
   // page to hold more keys. On the flip side, larger page sizes may result in
   // more I/O when making small changes to existing records.
+  //
+  // Must be a power of two between 512 and 65536 inclusive.
   int page_size = kDefaultPageSize;
 
   // The size of in-memory cache, in pages.
@@ -116,70 +138,12 @@
 
   // Pre-init configuration ----------------------------------------------------
 
-  // Sets the page size that will be used when creating a new database. This
-  // must be called before Init(), and will only have an effect on new
-  // databases.
-  //
-  // The page size must be a power of two between 512 and 65536 inclusive.
-  void set_page_size(int page_size) {
-    DCHECK_GE(page_size, 512);
-    DCHECK_LE(page_size, 65536);
-    DCHECK(!(page_size & (page_size - 1)))
-        << "page_size must be a power of two";
-
-    options_.page_size = page_size;
-  }
-
   // The page size that will be used when creating a new database.
   int page_size() const { return options_.page_size; }
 
-  // Sets the number of pages that will be cached in memory by sqlite. The
-  // total cache size in bytes will be page_size * cache_size. This must be
-  // called before Open() to have an effect.
-  void set_cache_size(int cache_size) {
-    DCHECK_GE(cache_size, 0);
-
-    options_.cache_size = cache_size;
-  }
-
   // Returns whether a database will be opened in WAL mode.
   bool UseWALMode() const;
 
-  // Enables/disables WAL mode (https://www.sqlite.org/wal.html) when
-  // opening a new database.
-  //
-  // WAL mode is currently not fully supported on FuchsiaOS. It will only be
-  // turned on if the database is also using exclusive locking mode.
-  // (https://crbug.com/1082059)
-  //
-  // Note: Changing page size is not supported when in WAL mode. So running
-  // 'PRAGMA page_size = <new-size>' or using set_page_size will result in
-  // no-ops.
-  //
-  // This must be called before Open() to have an effect.
-  void want_wal_mode(bool enabled) { options_.wal_mode = enabled; }
-
-  // Makes database accessible by only one process at a time.
-  //
-  // TODO(https://crbug.com/1120969): This should be the default mode. The
-  //                                  "NORMAL" mode should be opt-in.
-  //
-  // SQLite supports a locking protocol that allows multiple processes to safely
-  // operate on the same database at the same time. The locking protocol is used
-  // on every transaction, and comes with a small performance penalty.
-  //
-  // Calling this method causes the locking protocol to be used once, when the
-  // database is opened. No other process will be able to access the database at
-  // the same time.
-  //
-  // This method must be called before Open() to have an effect.
-  //
-  // More details at https://www.sqlite.org/pragma.html#pragma_locking_mode
-  //
-  // SQLite's locking protocol is summarized at
-  // https://www.sqlite.org/c3ref/io_methods.html
-  void set_exclusive_locking() { options_.exclusive_locking = true; }
-
   // Call to use alternative status-tracking for mmap.  Usually this is tracked
   // in the meta table, but some databases have no meta table.
   // TODO(shess): Maybe just have all databases use the alt option?
diff --git a/storage/browser/database/database_tracker_unittest.cc b/storage/browser/database/database_tracker_unittest.cc
index ec03e3dc..9810a86 100644
--- a/storage/browser/database/database_tracker_unittest.cc
+++ b/storage/browser/database/database_tracker_unittest.cc
@@ -144,10 +144,11 @@
                             const url::Origin& origin,
                             blink::mojom::StorageType type,
                             bool enabled) override {}
-  void GetUsageAndQuota(base::SequencedTaskRunner* original_task_runner,
-                        const url::Origin& origin,
-                        blink::mojom::StorageType type,
-                        UsageAndQuotaCallback callback) override {}
+  void GetUsageAndQuota(
+      const url::Origin& origin,
+      blink::mojom::StorageType type,
+      scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
+      UsageAndQuotaCallback callback) override {}
 
   void SimulateQuotaManagerDestroyed() {
     if (registered_client_) {
diff --git a/storage/browser/file_system/file_system_operation_impl.cc b/storage/browser/file_system/file_system_operation_impl.cc
index 20ed0a5..a897d6f 100644
--- a/storage/browser/file_system/file_system_operation_impl.cc
+++ b/storage/browser/file_system/file_system_operation_impl.cc
@@ -416,8 +416,8 @@
 
   DCHECK(quota_manager_proxy);
   quota_manager_proxy->GetUsageAndQuota(
-      base::SequencedTaskRunnerHandle::Get().get(), url.origin(),
-      FileSystemTypeToQuotaStorageType(url.type()),
+      url.origin(), FileSystemTypeToQuotaStorageType(url.type()),
+      base::SequencedTaskRunnerHandle::Get(),
       base::BindOnce(&FileSystemOperationImpl::DidGetUsageAndQuotaAndRunTask,
                      weak_ptr_, std::move(task), std::move(error_callback)));
 }
diff --git a/storage/browser/file_system/quota/quota_backend_impl.cc b/storage/browser/file_system/quota/quota_backend_impl.cc
index aabc79b..9a3af57 100644
--- a/storage/browser/file_system/quota/quota_backend_impl.cc
+++ b/storage/browser/file_system/quota/quota_backend_impl.cc
@@ -47,7 +47,7 @@
   }
   DCHECK(quota_manager_proxy_.get());
   quota_manager_proxy_->GetUsageAndQuota(
-      file_task_runner_.get(), origin, FileSystemTypeToQuotaStorageType(type),
+      origin, FileSystemTypeToQuotaStorageType(type), file_task_runner_,
       base::BindOnce(&QuotaBackendImpl::DidGetUsageAndQuotaForReserveQuota,
                      weak_ptr_factory_.GetWeakPtr(),
                      QuotaReservationInfo(origin, type, delta),
diff --git a/storage/browser/file_system/quota/quota_backend_impl_unittest.cc b/storage/browser/file_system/quota/quota_backend_impl_unittest.cc
index 33347ca..cdc4d125 100644
--- a/storage/browser/file_system/quota/quota_backend_impl_unittest.cc
+++ b/storage/browser/file_system/quota/quota_backend_impl_unittest.cc
@@ -11,10 +11,12 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/check.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/run_loop.h"
+#include "base/sequenced_task_runner.h"
 #include "base/test/task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "storage/browser/file_system/file_system_usage_cache.h"
@@ -65,10 +67,13 @@
     ASSERT_LE(usage_, quota_);
   }
 
-  void GetUsageAndQuota(base::SequencedTaskRunner* original_task_runner,
-                        const url::Origin& origin,
-                        blink::mojom::StorageType type,
-                        UsageAndQuotaCallback callback) override {
+  void GetUsageAndQuota(
+      const url::Origin& origin,
+      blink::mojom::StorageType type,
+      scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
+      UsageAndQuotaCallback callback) override {
+    DCHECK(callback_task_runner);
+    DCHECK(callback_task_runner->RunsTasksInCurrentSequence());
     std::move(callback).Run(blink::mojom::QuotaStatusCode::kOk, usage_, quota_);
   }
 
diff --git a/storage/browser/file_system/sandbox_file_stream_writer.cc b/storage/browser/file_system/sandbox_file_stream_writer.cc
index 7026002..32c6e601 100644
--- a/storage/browser/file_system/sandbox_file_stream_writer.cc
+++ b/storage/browser/file_system/sandbox_file_stream_writer.cc
@@ -181,8 +181,8 @@
 
   DCHECK(quota_manager_proxy);
   quota_manager_proxy->GetUsageAndQuota(
-      base::SequencedTaskRunnerHandle::Get().get(), url_.origin(),
-      FileSystemTypeToQuotaStorageType(url_.type()),
+      url_.origin(), FileSystemTypeToQuotaStorageType(url_.type()),
+      base::SequencedTaskRunnerHandle::Get(),
       base::BindOnce(&SandboxFileStreamWriter::DidGetUsageAndQuota,
                      weak_factory_.GetWeakPtr(), std::move(callback)));
 }
diff --git a/storage/browser/quota/quota_manager_proxy.cc b/storage/browser/quota/quota_manager_proxy.cc
index 553f0228..b3938984 100644
--- a/storage/browser/quota/quota_manager_proxy.cc
+++ b/storage/browser/quota/quota_manager_proxy.cc
@@ -172,47 +172,45 @@
 
 namespace {
 
-void DidGetUsageAndQuota(base::SequencedTaskRunner* original_task_runner,
-                         QuotaManagerProxy::UsageAndQuotaCallback callback,
-                         blink::mojom::QuotaStatusCode status,
-                         int64_t usage,
-                         int64_t quota) {
-  if (original_task_runner->RunsTasksInCurrentSequence()) {
+void DidGetUsageAndQuota(
+    scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
+    QuotaManagerProxy::UsageAndQuotaCallback callback,
+    blink::mojom::QuotaStatusCode status,
+    int64_t usage,
+    int64_t quota) {
+  if (callback_task_runner->RunsTasksInCurrentSequence()) {
     std::move(callback).Run(status, usage, quota);
     return;
   }
-  original_task_runner->PostTask(
-      FROM_HERE, base::BindOnce(&DidGetUsageAndQuota,
-                                base::RetainedRef(original_task_runner),
-                                std::move(callback), status, usage, quota));
+  callback_task_runner->PostTask(
+      FROM_HERE, base::BindOnce(std::move(callback), status, usage, quota));
 }
 
 }  // namespace
 
 void QuotaManagerProxy::GetUsageAndQuota(
-    base::SequencedTaskRunner* original_task_runner,
     const url::Origin& origin,
     blink::mojom::StorageType type,
+    scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
     UsageAndQuotaCallback callback) {
   if (!quota_manager_impl_task_runner_->RunsTasksInCurrentSequence()) {
     quota_manager_impl_task_runner_->PostTask(
-        FROM_HERE, base::BindOnce(&QuotaManagerProxy::GetUsageAndQuota, this,
-                                  base::RetainedRef(original_task_runner),
-                                  origin, type, std::move(callback)));
+        FROM_HERE,
+        base::BindOnce(&QuotaManagerProxy::GetUsageAndQuota, this, origin, type,
+                       std::move(callback_task_runner), std::move(callback)));
     return;
   }
 
   DCHECK_CALLED_ON_VALID_SEQUENCE(quota_manager_impl_sequence_checker_);
   if (!quota_manager_impl_) {
-    DidGetUsageAndQuota(original_task_runner, std::move(callback),
+    DidGetUsageAndQuota(std::move(callback_task_runner), std::move(callback),
                         blink::mojom::QuotaStatusCode::kErrorAbort, 0, 0);
     return;
   }
 
   quota_manager_impl_->GetUsageAndQuota(
       origin, type,
-      base::BindOnce(&DidGetUsageAndQuota,
-                     base::RetainedRef(original_task_runner),
+      base::BindOnce(&DidGetUsageAndQuota, std::move(callback_task_runner),
                      std::move(callback)));
 }
 
diff --git a/storage/browser/quota/quota_manager_proxy.h b/storage/browser/quota/quota_manager_proxy.h
index e9f5693..ce7649d 100644
--- a/storage/browser/quota/quota_manager_proxy.h
+++ b/storage/browser/quota/quota_manager_proxy.h
@@ -91,10 +91,11 @@
                                     const url::Origin& origin,
                                     blink::mojom::StorageType type,
                                     bool enabled);
-  virtual void GetUsageAndQuota(base::SequencedTaskRunner* original_task_runner,
-                                const url::Origin& origin,
-                                blink::mojom::StorageType type,
-                                UsageAndQuotaCallback callback);
+  virtual void GetUsageAndQuota(
+      const url::Origin& origin,
+      blink::mojom::StorageType type,
+      scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
+      UsageAndQuotaCallback callback);
 
   virtual void IsStorageUnlimited(
       const url::Origin& origin,
diff --git a/storage/browser/test/mock_quota_manager_proxy.cc b/storage/browser/test/mock_quota_manager_proxy.cc
index 573ca6f..0f7b0b2 100644
--- a/storage/browser/test/mock_quota_manager_proxy.cc
+++ b/storage/browser/test/mock_quota_manager_proxy.cc
@@ -52,9 +52,9 @@
 }
 
 void MockQuotaManagerProxy::GetUsageAndQuota(
-    base::SequencedTaskRunner* original_task_runner,
     const url::Origin& origin,
     blink::mojom::StorageType type,
+    scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
     QuotaManager::UsageAndQuotaCallback callback) {
   if (mock_quota_manager_) {
     mock_quota_manager_->GetUsageAndQuota(origin, type, std::move(callback));
diff --git a/storage/browser/test/mock_quota_manager_proxy.h b/storage/browser/test/mock_quota_manager_proxy.h
index 21b7a3a2..9879d908 100644
--- a/storage/browser/test/mock_quota_manager_proxy.h
+++ b/storage/browser/test/mock_quota_manager_proxy.h
@@ -53,10 +53,11 @@
                             const url::Origin& origin,
                             blink::mojom::StorageType type,
                             bool enabled) override {}
-  void GetUsageAndQuota(base::SequencedTaskRunner* original_task_runner,
-                        const url::Origin& origin,
-                        blink::mojom::StorageType type,
-                        QuotaManager::UsageAndQuotaCallback callback) override;
+  void GetUsageAndQuota(
+      const url::Origin& origin,
+      blink::mojom::StorageType type,
+      scoped_refptr<base::SequencedTaskRunner> callback_task_runner,
+      UsageAndQuotaCallback callback) override;
 
   // Validates the |client_id| and updates the internal access count
   // which can be accessed via notify_storage_accessed_count().
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 32ee3d2..9fc69b08 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -4624,7 +4624,7 @@
       },
       {
         "args": [
-          "--gtest_filter=-NetExportFileWriterTest*"
+          "--test-launcher-filter-file=../../testing/buildbot/filters/lacros.components_unittests.filter"
         ],
         "merge": {
           "args": [],
@@ -4964,7 +4964,7 @@
       },
       {
         "args": [
-          "--gtest_filter=-NetExportFileWriterTest*"
+          "--test-launcher-filter-file=../../testing/buildbot/filters/lacros.components_unittests.filter"
         ],
         "merge": {
           "args": [],
diff --git a/testing/buildbot/filters/BUILD.gn b/testing/buildbot/filters/BUILD.gn
index 3ab0cb24f..075f1a0 100644
--- a/testing/buildbot/filters/BUILD.gn
+++ b/testing/buildbot/filters/BUILD.gn
@@ -80,6 +80,12 @@
   ]
 }
 
+source_set("components_unittests_filters") {
+  testonly = true
+
+  data = [ "//testing/buildbot/filters/lacros.components_unittests.filter" ]
+}
+
 source_set("content_browsertests_filters") {
   testonly = true
 
diff --git a/testing/buildbot/filters/lacros.components_unittests.filter b/testing/buildbot/filters/lacros.components_unittests.filter
new file mode 100644
index 0000000..16d6081
--- /dev/null
+++ b/testing/buildbot/filters/lacros.components_unittests.filter
@@ -0,0 +1,2 @@
+# TODO(crbug.com/1111979) Enable all tests on lacros.
+-NetExportFileWriterTest*
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 60a54ce6..94b0e5f 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -945,13 +945,13 @@
       # https://crbug.com/1111979,
       'linux-lacros-rel': {
         'args': [
-          '--gtest_filter=-NetExportFileWriterTest*',
+          '--test-launcher-filter-file=../../testing/buildbot/filters/lacros.components_unittests.filter',
         ],
       },
       # https://crbug.com/1111979,
       'linux-lacros-tester-rel': {
         'args': [
-          '--gtest_filter=-NetExportFileWriterTest*',
+          '--test-launcher-filter-file=../../testing/buildbot/filters/lacros.components_unittests.filter',
         ],
       },
     },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 42b73d87..981f4c6 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1217,16 +1217,15 @@
             ]
         }
     ],
-    "ButterForPayments": [
+    "ButterForPaymentsStage2": [
         {
             "platforms": [
                 "android"
             ],
             "experiments": [
                 {
-                    "name": "Enabled_Butter_IndicationForAllUsers_Stage2",
+                    "name": "Enabled_Butter_IndicationForAllUsers",
                     "enable_features": [
-                        "AutofillEnableAccountWalletStorage",
                         "AutofillEnableInfoBarAccountIndicationFooterForSingleAccountUsers",
                         "AutofillEnableInfoBarAccountIndicationFooterForSyncUsers",
                         "AutofillEnableSaveCardInfoBarAccountIndicationFooter"
@@ -5303,7 +5302,7 @@
                     "name": "Enabled_empty",
                     "params": {
                         "asset-key": "empty",
-                        "max-probability-per-million": "20000",
+                        "max-probability-per-million": "10000",
                         "moratorium-length-millis": "345600000",
                         "ramp-up-length-millis": "1814400000"
                     },
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index c3c0fabf..091cad6 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -161,6 +161,10 @@
     &kPrerender2, "activation", Prerender2ActivationMode::kEnabled,
     &prerender2_types};
 
+bool IsPrerender2Enabled() {
+  return base::FeatureList::IsEnabled(blink::features::kPrerender2);
+}
+
 // Enable limiting previews loading hints to specific resource types.
 const base::Feature kPreviewsResourceLoadingHintsSpecificResourceTypes{
     "PreviewsResourceLoadingHintsSpecificResourceTypes",
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index b3b7419b..2c2520a 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -53,6 +53,9 @@
 BLINK_COMMON_EXPORT extern const base::FeatureParam<Prerender2ActivationMode>
     kPrerender2Param;
 
+// Returns true when Prerender2 feature is enabled.
+BLINK_COMMON_EXPORT bool IsPrerender2Enabled();
+
 BLINK_COMMON_EXPORT extern const base::Feature
     kPreviewsResourceLoadingHintsSpecificResourceTypes;
 BLINK_COMMON_EXPORT extern const base::Feature
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 09f0e013..75da6352 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -5618,6 +5618,9 @@
       array of BlockedSetCookieWithReason blockedCookies
       # Raw response headers as they were received over the wire.
       Headers headers
+      # The IP address space of the resource. The address space can only be determined once the transport
+      # established the connection, so we can't send it in `requestWillBeSentExtraInfo`.
+      IPAddressSpace resourceIPAddressSpace
       # Raw response header text as it was received over the wire. The raw text may not always be
       # available, such as in the case of HTTP/2 or QUIC.
       optional string headersText
diff --git a/third_party/blink/public/mojom/worker/shared_worker_info.mojom b/third_party/blink/public/mojom/worker/shared_worker_info.mojom
index 6222600..7936ec2 100644
--- a/third_party/blink/public/mojom/worker/shared_worker_info.mojom
+++ b/third_party/blink/public/mojom/worker/shared_worker_info.mojom
@@ -17,8 +17,7 @@
 struct SharedWorkerInfo {
   url.mojom.Url url;
   WorkerOptions options;
-  string content_security_policy;
-  network.mojom.ContentSecurityPolicyType content_security_policy_type;
+  array<network.mojom.ContentSecurityPolicy> content_security_policies;
   network.mojom.IPAddressSpace creation_address_space;
   FetchClientSettingsObject outside_fetch_client_settings_object;
 };
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h
index 917d2d5..7e743f3 100644
--- a/third_party/blink/public/platform/web_runtime_features.h
+++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -70,6 +70,7 @@
 
   BLINK_PLATFORM_EXPORT static void EnableAOMAriaRelationshipProperties(bool);
   BLINK_PLATFORM_EXPORT static void EnableAccelerated2dCanvas(bool);
+  BLINK_PLATFORM_EXPORT static void EnableAccessibilityAriaVirtualContent(bool);
   BLINK_PLATFORM_EXPORT static void EnableAccessibilityExposeDisplayNone(bool);
   BLINK_PLATFORM_EXPORT static void EnableAccessibilityExposeHTMLElement(bool);
   BLINK_PLATFORM_EXPORT static void EnableAccessibilityExposeIgnoredNodes(bool);
diff --git a/third_party/blink/public/strings/translations/blink_strings_iw.xtb b/third_party/blink/public/strings/translations/blink_strings_iw.xtb
index 770e581..7068ad78 100644
--- a/third_party/blink/public/strings/translations/blink_strings_iw.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_iw.xtb
@@ -218,7 +218,7 @@
 <translation id="6941933287844615239">הורדת מדיה</translation>
 <translation id="6981594929165378967">הוספה</translation>
 <translation id="698788488269350478">מורחב.</translation>
-<translation id="6989848892321993519">עליך להאריך את הטקסט ל-<ph name="MIN_CHARACTERS" /> תווים או יותר (אתה משתמש כרגע בתו אחד).</translation>
+<translation id="6989848892321993519">עליך להאריך את הטקסט ל-<ph name="MIN_CHARACTERS" /> תווים או יותר (כרגע יש תו אחד).</translation>
 <translation id="7034405885550056553">הצעה</translation>
 <translation id="709897737746224366">יש להתאים את הפורמט המבוקש.</translation>
 <translation id="7102274145889307184">המיקום הנוכחי</translation>
diff --git a/third_party/blink/public/web/web_shared_worker.h b/third_party/blink/public/web/web_shared_worker.h
index d744c1bb..6f7f2698 100644
--- a/third_party/blink/public/web/web_shared_worker.h
+++ b/third_party/blink/public/web/web_shared_worker.h
@@ -47,6 +47,7 @@
 #include "third_party/blink/public/platform/cross_variant_mojo_util.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/public/platform/web_common.h"
+#include "third_party/blink/public/platform/web_content_security_policy_struct.h"
 #include "third_party/blink/public/platform/web_security_origin.h"
 
 namespace blink {
@@ -75,8 +76,7 @@
       WebSecurityOrigin constructor_origin,
       const WebString& user_agent,
       const UserAgentMetadata& ua_metadata,
-      const WebString& content_security_policy,
-      network::mojom::ContentSecurityPolicyType,
+      const WebVector<WebContentSecurityPolicy>& content_security_policies,
       network::mojom::IPAddressSpace,
       const WebFetchClientSettingsObject& outside_fetch_client_settings_object,
       const base::UnguessableToken& appcache_host_id,
diff --git a/third_party/blink/renderer/bindings/BUILD.gn b/third_party/blink/renderer/bindings/BUILD.gn
index dd6c7397b..61c9e7f 100644
--- a/third_party/blink/renderer/bindings/BUILD.gn
+++ b/third_party/blink/renderer/bindings/BUILD.gn
@@ -17,8 +17,7 @@
 
 visibility = [ "//third_party/blink/renderer/*" ]
 
-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-python2_action("interfaces_info") {
+action("interfaces_info") {
   script = "$bindings_scripts_dir/compute_interfaces_info_overall.py"
 
   inputs = [
@@ -66,9 +65,6 @@
 
 template("collect_idl_files") {
   action_with_pydeps(target_name) {
-    # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-    run_under_python2 = true
-
     script = "${bindings_scripts_dir}/collect_idl_files.py"
 
     inputs = invoker.inputs
@@ -141,9 +137,6 @@
 action_with_pydeps("web_idl_database") {
   visibility += [ "//tools/privacy_budget/blink_apis:*" ]
 
-  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-  run_under_python2 = true
-
   script = "${bindings_scripts_dir}/build_web_idl_database.py"
 
   input_data_files = get_target_outputs(":web_idl_in_core") +
@@ -172,9 +165,6 @@
 
 template("generate_bindings") {
   action_with_pydeps(target_name) {
-    # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-    run_under_python2 = true
-
     script = "${bindings_scripts_dir}/generate_bindings.py"
 
     if (defined(invoker.pool)) {
diff --git a/third_party/blink/renderer/bindings/modules/v8/BUILD.gn b/third_party/blink/renderer/bindings/modules/v8/BUILD.gn
index 5a69c4c..fd8e73f 100644
--- a/third_party/blink/renderer/bindings/modules/v8/BUILD.gn
+++ b/third_party/blink/renderer/bindings/modules/v8/BUILD.gn
@@ -251,8 +251,7 @@
   ]
 }
 
-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-python2_action("generate_v8_context_snapshot_external_references") {
+action("generate_v8_context_snapshot_external_references") {
   script = "$bindings_scripts_dir/generate_v8_context_snapshot_external_references.py"
   idl_files =
       core_interface_idl_files_core_only +
diff --git a/third_party/blink/renderer/bindings/scripts/scripts.gni b/third_party/blink/renderer/bindings/scripts/scripts.gni
index af34ef23..4db6bccd 100644
--- a/third_party/blink/renderer/bindings/scripts/scripts.gni
+++ b/third_party/blink/renderer/bindings/scripts/scripts.gni
@@ -66,8 +66,7 @@
 #   component_info_file = output pickle file for component wide info.
 #   deps = dependencies
 template("compute_interfaces_info") {
-  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-  python2_action(target_name) {
+  action(target_name) {
     script = "$bindings_scripts_dir/compute_interfaces_info_individual.py"
     if (defined(invoker.visibility)) {
       visibility = invoker.visibility
@@ -114,8 +113,7 @@
 #   output_file = The .in file to write, relative to the blink_gen_dir.
 #   suffix = (Optional) String to be passed to script via --suffix
 template("generate_event_interfaces") {
-  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-  python2_action(target_name) {
+  action(target_name) {
     # Write the file list to a unique temp file to avoid blowing out the
     # command line length limit.
     idl_files_list = "$target_gen_dir/${target_name}_file_list.tmp"
@@ -199,8 +197,7 @@
 
   # Spawning a python process per IDL file is slow. Use a single action
   # instead (crbug.com/821256).
-  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-  python2_action(target_name) {
+  action(target_name) {
     script = _script
     inputs = _inputs
     public_deps = _public_deps
@@ -249,8 +246,7 @@
 template("idl_impl") {
   dictionary_impl_output_dir = "$root_gen_dir/third_party/blink/renderer/"
 
-  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-  python2_action(target_name) {
+  action(target_name) {
     script = "//third_party/blink/renderer/bindings/scripts/idl_compiler.py"
     idl_files_list = "$target_gen_dir/${target_name}_file_list.tmp"
     write_file(idl_files_list, rebase_path(invoker.dict_idls, root_build_dir))
@@ -444,8 +440,7 @@
 #   deps = dependencies
 #
 template("generate_origin_trial_features") {
-  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-  python2_action(target_name) {
+  action(target_name) {
     script = "//third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py"
 
     # Write the file list to a unique temp file to avoid blowing out the
diff --git a/third_party/blink/renderer/build/scripts/scripts.gni b/third_party/blink/renderer/build/scripts/scripts.gni
index 7700c07..be6bab77 100644
--- a/third_party/blink/renderer/build/scripts/scripts.gni
+++ b/third_party/blink/renderer/build/scripts/scripts.gni
@@ -92,8 +92,7 @@
 #  - //third_party/blink/renderer/build/scripts
 #  - //third_party
 template("blink_python_runner") {
-  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
-  python2_action(target_name) {
+  action(target_name) {
     script = "$_scripts_dir/run_with_pythonpath.py"
     sources = [ invoker.script ]
     if (defined(invoker.sources)) {
diff --git a/third_party/blink/renderer/core/animation/compositor_animations.h b/third_party/blink/renderer/core/animation/compositor_animations.h
index ad0abb24..c107d8b 100644
--- a/third_party/blink/renderer/core/animation/compositor_animations.h
+++ b/third_party/blink/renderer/core/animation/compositor_animations.h
@@ -47,6 +47,7 @@
 class CompositorAnimation;
 class Element;
 class KeyframeEffectModelBase;
+class Node;
 class PaintArtifactCompositor;
 class SVGElement;
 
diff --git a/third_party/blink/renderer/core/animation/worklet_animation_controller.h b/third_party/blink/renderer/core/animation/worklet_animation_controller.h
index b527974..b365819 100644
--- a/third_party/blink/renderer/core/animation/worklet_animation_controller.h
+++ b/third_party/blink/renderer/core/animation/worklet_animation_controller.h
@@ -20,6 +20,7 @@
 class AnimationWorkletMutatorDispatcherImpl;
 class Document;
 class MainThreadMutatorClient;
+class Node;
 class WorkletAnimationBase;
 
 // Handles AnimationWorklet animations on the main-thread.
@@ -36,7 +37,7 @@
     : public GarbageCollected<WorkletAnimationController>,
       public MutatorClient {
  public:
-  WorkletAnimationController(Document*);
+  explicit WorkletAnimationController(Document*);
   ~WorkletAnimationController() override;
 
   void AttachAnimation(WorkletAnimationBase&);
diff --git a/third_party/blink/renderer/core/dom/abstract_range.h b/third_party/blink/renderer/core/dom/abstract_range.h
index 847a15b..bac6bb9 100644
--- a/third_party/blink/renderer/core/dom/abstract_range.h
+++ b/third_party/blink/renderer/core/dom/abstract_range.h
@@ -10,6 +10,8 @@
 
 namespace blink {
 
+class Node;
+
 class CORE_EXPORT AbstractRange : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
 
diff --git a/third_party/blink/renderer/core/dom/events/event.h b/third_party/blink/renderer/core/dom/events/event.h
index b8e8844..d6a612f 100644
--- a/third_party/blink/renderer/core/dom/events/event.h
+++ b/third_party/blink/renderer/core/dom/events/event.h
@@ -39,6 +39,7 @@
 class EventInit;
 class EventPath;
 class EventTarget;
+class Node;
 class ScriptState;
 class ScriptValue;
 
diff --git a/third_party/blink/renderer/core/dom/shadow_root.h b/third_party/blink/renderer/core/dom/shadow_root.h
index 08d0c8a..cfed3721 100644
--- a/third_party/blink/renderer/core/dom/shadow_root.h
+++ b/third_party/blink/renderer/core/dom/shadow_root.h
@@ -51,6 +51,7 @@
 
  public:
   ShadowRoot(Document&, ShadowRootType);
+  ~ShadowRoot() override;
   ShadowRoot(const ShadowRoot&) = delete;
   ShadowRoot& operator=(const ShadowRoot&) = delete;
 
@@ -164,8 +165,6 @@
   void Trace(Visitor*) const override;
 
  private:
-  ~ShadowRoot() override;
-
   void ChildrenChanged(const ChildrenChange&) override;
 
   SlotAssignment& EnsureSlotAssignment();
diff --git a/third_party/blink/renderer/core/dom/synchronous_mutation_observer.h b/third_party/blink/renderer/core/dom/synchronous_mutation_observer.h
index e574de51..65ff054 100644
--- a/third_party/blink/renderer/core/dom/synchronous_mutation_observer.h
+++ b/third_party/blink/renderer/core/dom/synchronous_mutation_observer.h
@@ -13,6 +13,7 @@
 class CharacterData;
 class ContainerNode;
 class Document;
+class Node;
 class NodeWithIndex;
 class Text;
 
diff --git a/third_party/blink/renderer/core/dom/tree_scope.h b/third_party/blink/renderer/core/dom/tree_scope.h
index 920f4d5..3d63306 100644
--- a/third_party/blink/renderer/core/dom/tree_scope.h
+++ b/third_party/blink/renderer/core/dom/tree_scope.h
@@ -45,6 +45,7 @@
 class HTMLMapElement;
 class HitTestResult;
 class IdTargetObserverRegistry;
+class Node;
 class SVGTreeScopeResources;
 class ScopedStyleResolver;
 
diff --git a/third_party/blink/renderer/core/dom/whitespace_attacher.h b/third_party/blink/renderer/core/dom/whitespace_attacher.h
index 15563de..98054fd0 100644
--- a/third_party/blink/renderer/core/dom/whitespace_attacher.h
+++ b/third_party/blink/renderer/core/dom/whitespace_attacher.h
@@ -12,6 +12,7 @@
 
 class Element;
 class LayoutObject;
+class Node;
 class Text;
 
 // The WhitespaceAttacher is used during the layout tree rebuild to lazily re-
diff --git a/third_party/blink/renderer/core/editing/commands/remove_css_property_command.h b/third_party/blink/renderer/core/editing/commands/remove_css_property_command.h
index c02fc82..def9c50 100644
--- a/third_party/blink/renderer/core/editing/commands/remove_css_property_command.h
+++ b/third_party/blink/renderer/core/editing/commands/remove_css_property_command.h
@@ -36,12 +36,11 @@
 class RemoveCSSPropertyCommand final : public SimpleEditCommand {
  public:
   RemoveCSSPropertyCommand(Document&, Element*, CSSPropertyID);
+  ~RemoveCSSPropertyCommand() override;
 
   void Trace(Visitor*) const override;
 
  private:
-  ~RemoveCSSPropertyCommand() override;
-
   void DoApply(EditingState*) override;
   void DoUnapply() override;
 
diff --git a/third_party/blink/renderer/core/editing/iterators/text_iterator_text_state.h b/third_party/blink/renderer/core/editing/iterators/text_iterator_text_state.h
index b508e5ad..2dfa572 100644
--- a/third_party/blink/renderer/core/editing/iterators/text_iterator_text_state.h
+++ b/third_party/blink/renderer/core/editing/iterators/text_iterator_text_state.h
@@ -36,6 +36,7 @@
 
 class ContainerNode;
 class HTMLElement;
+class Node;
 class Text;
 
 class CORE_EXPORT TextIteratorTextState {
diff --git a/third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.h b/third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.h
index 3484dbb..df8e2ed 100644
--- a/third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.h
+++ b/third_party/blink/renderer/core/editing/markers/text_match_marker_list_impl.h
@@ -11,6 +11,7 @@
 namespace blink {
 
 class IntRect;
+class Node;
 
 // Implementation of TextMarkerBaseListImpl for TextMatch markers.
 // Markers are kept sorted by start offset, under the assumption that
diff --git a/third_party/blink/renderer/core/events/promise_rejection_event.h b/third_party/blink/renderer/core/events/promise_rejection_event.h
index 4dfbd60..bb3aae10 100644
--- a/third_party/blink/renderer/core/events/promise_rejection_event.h
+++ b/third_party/blink/renderer/core/events/promise_rejection_event.h
@@ -32,6 +32,7 @@
   PromiseRejectionEvent(ScriptState*,
                         const AtomicString&,
                         const PromiseRejectionEventInit*);
+  ~PromiseRejectionEvent() override;
 
   ScriptValue reason(ScriptState*) const;
   ScriptPromise promise(ScriptState*) const;
@@ -45,8 +46,6 @@
   void Trace(Visitor*) const override;
 
  private:
-  ~PromiseRejectionEvent() override;
-
   scoped_refptr<DOMWrapperWorld> world_;
   TraceWrapperV8Reference<v8::Value> promise_;
   TraceWrapperV8Reference<v8::Value> reason_;
diff --git a/third_party/blink/renderer/core/exported/web_page_popup_impl.h b/third_party/blink/renderer/core/exported/web_page_popup_impl.h
index 62ef7c4..675700f 100644
--- a/third_party/blink/renderer/core/exported/web_page_popup_impl.h
+++ b/third_party/blink/renderer/core/exported/web_page_popup_impl.h
@@ -54,6 +54,7 @@
 
 namespace blink {
 class Element;
+class Node;
 class Page;
 class PagePopupChromeClient;
 class PagePopupClient;
diff --git a/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc b/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
index c0d1313..e4d44c8 100644
--- a/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
@@ -53,6 +53,7 @@
 #include "third_party/blink/public/web/web_settings.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/events/message_event.h"
+#include "third_party/blink/renderer/core/frame/csp/conversion_util.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/core/inspector/worker_devtools_params.h"
 #include "third_party/blink/renderer/core/script/script.h"
@@ -196,8 +197,7 @@
     WebSecurityOrigin constructor_origin,
     const WebString& user_agent,
     const UserAgentMetadata& ua_metadata,
-    const WebString& content_security_policy,
-    network::mojom::ContentSecurityPolicyType policy_type,
+    const WebVector<WebContentSecurityPolicy>& content_security_policies,
     network::mojom::IPAddressSpace creation_address_space,
     const WebFetchClientSettingsObject& outside_fetch_client_settings_object,
     const base::UnguessableToken& devtools_worker_token,
@@ -245,18 +245,13 @@
       false /* strictly_block_blockable_mixed_content */,
       GenericFontFamilySettings());
 
-  // CSP headers for parent Window's CSP.
-  Vector<CSPHeaderAndType> outside_csp_headers;
-  outside_csp_headers.ReserveInitialCapacity(1);
-  outside_csp_headers.UncheckedAppend(
-      CSPHeaderAndType(content_security_policy, policy_type));
-
   // Some params (e.g. address space) passed to GlobalScopeCreationParams are
   // dummy values. They will be updated after worker script fetch on the worker
   // thread.
   auto creation_params = std::make_unique<GlobalScopeCreationParams>(
       script_request_url, script_type, name, user_agent, ua_metadata,
-      std::move(web_worker_fetch_context), outside_csp_headers,
+      std::move(web_worker_fetch_context),
+      ConvertToMojoBlink(content_security_policies),
       outside_settings_object->GetReferrerPolicy(),
       outside_settings_object->GetSecurityOrigin(), constructor_secure_context,
       outside_settings_object->GetHttpsState(),
@@ -334,8 +329,7 @@
     WebSecurityOrigin constructor_origin,
     const WebString& user_agent,
     const UserAgentMetadata& ua_metadata,
-    const WebString& content_security_policy,
-    network::mojom::ContentSecurityPolicyType policy_type,
+    const WebVector<WebContentSecurityPolicy>& content_security_policies,
     network::mojom::IPAddressSpace creation_address_space,
     const WebFetchClientSettingsObject& outside_fetch_client_settings_object,
     const base::UnguessableToken& appcache_host_id,
@@ -355,8 +349,8 @@
       token, appcache_host_id, std::move(host), client));
   worker->StartWorkerContext(
       script_request_url, script_type, credentials_mode, name,
-      constructor_origin, user_agent, ua_metadata, content_security_policy,
-      policy_type, creation_address_space, outside_fetch_client_settings_object,
+      constructor_origin, user_agent, ua_metadata, content_security_policies,
+      creation_address_space, outside_fetch_client_settings_object,
       devtools_worker_token, std::move(content_settings),
       std::move(browser_interface_broker), pause_worker_context_on_start,
       std::move(worker_main_script_load_params),
diff --git a/third_party/blink/renderer/core/exported/web_shared_worker_impl.h b/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
index dcaa435..0fce768 100644
--- a/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
+++ b/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
@@ -103,8 +103,7 @@
       WebSecurityOrigin constructor_origin,
       const WebString& user_agent,
       const blink::UserAgentMetadata& ua_metadata,
-      const WebString& content_security_policy,
-      network::mojom::ContentSecurityPolicyType,
+      const WebVector<WebContentSecurityPolicy>& content_security_policies,
       network::mojom::IPAddressSpace,
       const WebFetchClientSettingsObject& outside_fetch_client_settings_object,
       const base::UnguessableToken& devtools_worker_token,
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
index 0809c5a..884a26b 100644
--- a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
+++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
@@ -342,6 +342,15 @@
   }
 }
 
+// static
+WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr>
+ContentSecurityPolicy::ParseHeaders(
+    const ContentSecurityPolicyResponseHeaders& headers) {
+  auto* content_security_policy = MakeGarbageCollected<ContentSecurityPolicy>();
+  content_security_policy->DidReceiveHeaders(headers);
+  return std::move(content_security_policy->policies_);
+}
+
 void ContentSecurityPolicy::DidReceiveHeader(
     const String& header,
     ContentSecurityPolicyType type,
@@ -358,11 +367,35 @@
     const String& header,
     ContentSecurityPolicyType type,
     ContentSecurityPolicySource source) {
+  for (network::mojom::blink::ContentSecurityPolicyPtr& policy :
+       Parse(header, type, source)) {
+    AddPolicy(std::move(policy));
+  }
+}
+
+void ContentSecurityPolicy::AddPolicies(
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr> policies) {
+  for (network::mojom::blink::ContentSecurityPolicyPtr& policy : policies)
+    AddPolicy(std::move(policy));
+}
+
+void ContentSecurityPolicy::AddPolicy(
+    network::mojom::blink::ContentSecurityPolicyPtr policy) {
+  ComputeInternalStateForParsedPolicy(*policy);
+  policies_.push_back(std::move(policy));
+}
+
+Vector<network::mojom::blink::ContentSecurityPolicyPtr>
+ContentSecurityPolicy::Parse(const String& header,
+                             ContentSecurityPolicyType type,
+                             ContentSecurityPolicySource source) {
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr> policies;
+
   // If this is a report-only header inside a <meta> element, bail out.
   if (source == ContentSecurityPolicySource::kMeta &&
       type == ContentSecurityPolicyType::kReport) {
     ReportReportOnlyInMeta(header);
-    return;
+    return policies;
   }
 
   Vector<UChar> characters;
@@ -382,15 +415,15 @@
     //        ^                  ^
     network::mojom::blink::ContentSecurityPolicyPtr policy =
         CSPDirectiveListParse(this, begin, position, type, source);
-    ComputeInternalStateForParsedPolicy(*policy);
 
-    policies_.push_back(std::move(policy));
+    policies.push_back(std::move(policy));
 
     // Skip the comma, and begin the next header from the current position.
     DCHECK(position == end || *position == ',');
     SkipExactly<UChar>(position, end, ',');
     begin = position;
   }
+  return policies;
 }
 
 void ContentSecurityPolicy::ComputeInternalStateForParsedPolicy(
@@ -443,7 +476,7 @@
 void ContentSecurityPolicy::ReportAccumulatedHeaders() const {
   WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr> policies;
   for (const auto& policy : policies_)
-    policies.push_back(ExposeForNavigationalChecks(policy));
+    policies.push_back(FillInSelf(policy));
 
   DCHECK(delegate_);
   delegate_->DidAddContentSecurityPolicies(std::move(policies));
@@ -467,8 +500,7 @@
   WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr> policies(
       policies_.size() - previous_policy_count);
   for (wtf_size_t i = previous_policy_count; i < policies_.size(); ++i) {
-    policies[i - previous_policy_count] =
-        ExposeForNavigationalChecks(policies_[i]);
+    policies[i - previous_policy_count] = FillInSelf(policies_[i]);
   }
 
   if (delegate_)
@@ -491,16 +523,6 @@
       /*is_host_wildcard=*/false, /*is_port_wildcard=*/false);
 }
 
-Vector<CSPHeaderAndType> ContentSecurityPolicy::Headers() const {
-  Vector<CSPHeaderAndType> headers;
-  headers.ReserveInitialCapacity(policies_.size());
-  for (const auto& policy : policies_) {
-    headers.UncheckedAppend(
-        CSPHeaderAndType(policy->header->header_value, policy->header->type));
-  }
-  return headers;
-}
-
 // static
 void ContentSecurityPolicy::FillInCSPHashValues(
     const String& source,
@@ -1763,15 +1785,15 @@
 }
 
 WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr>
-ContentSecurityPolicy::ExposeForNavigationalChecks() const {
+ContentSecurityPolicy::GetParsedPolicies() const {
   WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr> list;
   for (const auto& policy : policies_)
-    list.push_back(ExposeForNavigationalChecks(policy));
+    list.push_back(FillInSelf(policy));
   return list;
 }
 
 network::mojom::blink::ContentSecurityPolicyPtr
-ContentSecurityPolicy::ExposeForNavigationalChecks(
+ContentSecurityPolicy::FillInSelf(
     const network::mojom::blink::ContentSecurityPolicyPtr& csp) const {
   network::mojom::blink::ContentSecurityPolicyPtr clone = csp->Clone();
   clone->self_origin = GetSelfSource() ? GetSelfSource()->Clone() : nullptr;
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.h b/third_party/blink/renderer/core/frame/csp/content_security_policy.h
index 60d2c6f..4d00a6e 100644
--- a/third_party/blink/renderer/core/frame/csp/content_security_policy.h
+++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.h
@@ -75,8 +75,6 @@
 enum class ResourceType : uint8_t;
 
 typedef HeapVector<Member<ConsoleMessage>> ConsoleMessageVector;
-typedef std::pair<String, network::mojom::ContentSecurityPolicyType>
-    CSPHeaderAndType;
 using RedirectStatus = ResourceRequest::RedirectStatus;
 using network::mojom::blink::CSPDirectiveName;
 
@@ -186,6 +184,10 @@
 
   static const size_t kMaxSampleLength = 40;
 
+  // Parse raw Content Security Policy strings into mojo types.
+  static WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr>
+  ParseHeaders(const ContentSecurityPolicyResponseHeaders& headers);
+
   ContentSecurityPolicy();
   ~ContentSecurityPolicy();
   void Trace(Visitor*) const;
@@ -206,7 +208,9 @@
                                 network::mojom::ContentSecurityPolicySource);
   void ReportAccumulatedHeaders() const;
 
-  Vector<CSPHeaderAndType> Headers() const;
+  void AddPolicies(
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr> policies);
+  void AddPolicy(network::mojom::blink::ContentSecurityPolicyPtr policy);
 
   // Returns whether or not the Javascript code generation should call back the
   // CSP checker before any script evaluation from a string attempts.
@@ -438,12 +442,11 @@
   bool SupportsWasmEval() const { return supports_wasm_eval_; }
   void SetSupportsWasmEval(bool value) { supports_wasm_eval_ = value; }
 
-  // Sometimes we don't know the initiator or it might be destroyed already
-  // for certain navigational checks. We create a string version of the relevant
-  // CSP directives to be passed around with the request. This allows us to
-  // perform these checks in NavigationRequest::CheckContentSecurityPolicy.
+  // Retrieve a copy of the parsed policies.
+  // TODO(antoniosartori): Make this return a const reference once we remove
+  // SetupSelf and this does not need to modify anything in the parsed policies.
   WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr>
-  ExposeForNavigationalChecks() const;
+  GetParsedPolicies() const;
 
   // Retrieves the parsed sandbox flags. A lot of the time the execution
   // context will be used for all sandbox checks but there are situations
@@ -481,6 +484,10 @@
   FRIEND_TEST_ALL_PREFIXES(FrameFetchContextTest,
                            PopulateResourceRequestChecksReportOnlyCSP);
 
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr> Parse(
+      const String&,
+      network::mojom::ContentSecurityPolicyType,
+      network::mojom::ContentSecurityPolicySource);
   void ApplyPolicySideEffectsToDelegate();
   void ComputeInternalStateForParsedPolicy(
       const network::mojom::blink::ContentSecurityPolicy& csp);
@@ -542,7 +549,7 @@
   // Clone |csp| and set the self_origin to SelfOrigin().
   // TODO(antoniosartori): Get rid of this when we will correctly track
   // self_origin inside network::mojom::blink::ContentSecurityPolicy.
-  network::mojom::blink::ContentSecurityPolicyPtr ExposeForNavigationalChecks(
+  network::mojom::blink::ContentSecurityPolicyPtr FillInSelf(
       const network::mojom::blink::ContentSecurityPolicyPtr& csp) const;
 
   Member<ContentSecurityPolicyDelegate> delegate_;
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
index 8236caf7..74d8c11 100644
--- a/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
+++ b/third_party/blink/renderer/core/frame/csp/content_security_policy_test.cc
@@ -1174,7 +1174,6 @@
   auto* element =
       MakeGarbageCollected<HTMLScriptElement>(*document, CreateElementFlags());
 
-  EXPECT_TRUE(csp->Headers().IsEmpty());
   EXPECT_TRUE(csp->AllowInline(ContentSecurityPolicy::InlineType::kNavigation,
                                element, source, String() /* nonce */,
                                context_url, ordinal_number));
diff --git a/third_party/blink/renderer/core/frame/csp/conversion_util.cc b/third_party/blink/renderer/core/frame/csp/conversion_util.cc
index 8087eb6..5af83e0 100644
--- a/third_party/blink/renderer/core/frame/csp/conversion_util.cc
+++ b/third_party/blink/renderer/core/frame/csp/conversion_util.cc
@@ -188,4 +188,12 @@
       ConvertToWTF(policy_in.parsing_errors));
 }
 
+Vector<network::mojom::blink::ContentSecurityPolicyPtr> ConvertToMojoBlink(
+    const WebVector<WebContentSecurityPolicy>& list_in) {
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr> list_out;
+  for (const auto& element : list_in)
+    list_out.emplace_back(ConvertToMojoBlink(element));
+  return list_out;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/csp/conversion_util.h b/third_party/blink/renderer/core/frame/csp/conversion_util.h
index 86aed8d..b84c0bff 100644
--- a/third_party/blink/renderer/core/frame/csp/conversion_util.h
+++ b/third_party/blink/renderer/core/frame/csp/conversion_util.h
@@ -27,6 +27,11 @@
 network::mojom::blink::ContentSecurityPolicyPtr ConvertToMojoBlink(
     const WebContentSecurityPolicy& policy);
 
+// Helper function that applies ConvertToBlink above to a WebVector.
+CORE_EXPORT
+Vector<network::mojom::blink::ContentSecurityPolicyPtr> ConvertToMojoBlink(
+    const WebVector<WebContentSecurityPolicy>& policy);
+
 }  // namespace blink
 
 #endif
diff --git a/third_party/blink/renderer/core/frame/csp/conversion_util_fuzzer.cc b/third_party/blink/renderer/core/frame/csp/conversion_util_fuzzer.cc
index cd69d7f..400b61e 100644
--- a/third_party/blink/renderer/core/frame/csp/conversion_util_fuzzer.cc
+++ b/third_party/blink/renderer/core/frame/csp/conversion_util_fuzzer.cc
@@ -53,7 +53,7 @@
   csp->SetupSelf(*SecurityOrigin::Create(KURL(url)));
 
   Vector<network::mojom::blink::ContentSecurityPolicyPtr> parsed_policies =
-      csp->ExposeForNavigationalChecks();
+      csp->GetParsedPolicies();
   if (parsed_policies.size() > 0) {
     network::mojom::blink::ContentSecurityPolicyPtr converted_csp =
         ConvertToMojoBlink(ConvertToPublic(parsed_policies[0]->Clone()));
diff --git a/third_party/blink/renderer/core/frame/local_dom_window_test.cc b/third_party/blink/renderer/core/frame/local_dom_window_test.cc
index 1e6c317..a141adf 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window_test.cc
+++ b/third_party/blink/renderer/core/frame/local_dom_window_test.cc
@@ -219,6 +219,11 @@
   GetFrame().DomWindow()->GetContentSecurityPolicy()->DidReceiveHeader(
       kMainWorldCSP, ContentSecurityPolicyType::kEnforce,
       ContentSecurityPolicySource::kHTTP);
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr>
+      parsed_main_world_csp = GetFrame()
+                                  .DomWindow()
+                                  ->GetContentSecurityPolicy()
+                                  ->GetParsedPolicies();
 
   LocalFrame* frame = &GetFrame();
   ScriptState* main_world_script_state = ToScriptStateForMainWorld(frame);
@@ -243,18 +248,16 @@
       SecurityOrigin::Create(KURL("chrome-extension://123")));
 
   // Returns the csp headers being used for the current world.
-  auto get_csp_headers = [this]() {
+  auto get_csp = [this]() {
     auto* csp =
         GetFrame().DomWindow()->GetContentSecurityPolicyForCurrentWorld();
-    return csp->Headers();
+    return csp->GetParsedPolicies();
   };
 
   {
     SCOPED_TRACE("In main world.");
     ScriptState::Scope scope(main_world_script_state);
-    EXPECT_THAT(get_csp_headers(),
-                ElementsAre(CSPHeaderAndType(
-                    {kMainWorldCSP, ContentSecurityPolicyType::kEnforce})));
+    EXPECT_EQ(get_csp(), parsed_main_world_csp);
   }
 
   {
@@ -263,18 +266,14 @@
 
     // If we are in an isolated world with no CSP defined, we use the main world
     // CSP.
-    EXPECT_THAT(get_csp_headers(),
-                ElementsAre(CSPHeaderAndType(
-                    {kMainWorldCSP, ContentSecurityPolicyType::kEnforce})));
+    EXPECT_EQ(get_csp(), parsed_main_world_csp);
   }
 
   {
     SCOPED_TRACE("In isolated world with csp.");
     ScriptState::Scope scope(isolated_world_with_csp_script_state);
     // We use the isolated world's CSP if it specified one.
-    EXPECT_THAT(get_csp_headers(),
-                ElementsAre(CSPHeaderAndType(
-                    {kIsolatedWorldCSP, ContentSecurityPolicyType::kEnforce})));
+    EXPECT_EQ(get_csp()[0]->header->header_value, kIsolatedWorldCSP);
   }
 }
 
diff --git a/third_party/blink/renderer/core/html/aria_properties.json5 b/third_party/blink/renderer/core/html/aria_properties.json5
index b57f304..cda7160 100644
--- a/third_party/blink/renderer/core/html/aria_properties.json5
+++ b/third_party/blink/renderer/core/html/aria_properties.json5
@@ -128,6 +128,11 @@
       enum: ["ascending", "descending", "none", "other"],
       type: "token"
     },
+    {
+      name: "aria-touchpassthrough",
+      type: "boolean",
+      runtimeEnabled: "AriaTouchPassthrough"
+    },
     {name: "aria-valuemax", type: "decimal"},
     {name: "aria-valuemin", type: "decimal"},
     {name: "aria-valuenow", type: "decimal"},
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
index 4a888309..3b7e05b3 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -1067,6 +1067,32 @@
   }
 }
 
+bool HTMLCanvasElement::IsPresentationAttribute(
+    const QualifiedName& name) const {
+  if (name == html_names::kWidthAttr || name == html_names::kHeightAttr)
+    return true;
+  return HTMLElement::IsPresentationAttribute(name);
+}
+
+void HTMLCanvasElement::CollectStyleForPresentationAttribute(
+    const QualifiedName& name,
+    const AtomicString& value,
+    MutableCSSPropertyValueSet* style) {
+  if (name == html_names::kWidthAttr) {
+    if (FastHasAttribute(html_names::kHeightAttr)) {
+      const AtomicString& height = FastGetAttribute(html_names::kHeightAttr);
+      ApplyAspectRatioToStyle(value, height, style);
+    }
+  } else if (name == html_names::kHeightAttr) {
+    if (FastHasAttribute(html_names::kWidthAttr)) {
+      const AtomicString& width = FastGetAttribute(html_names::kWidthAttr);
+      ApplyAspectRatioToStyle(width, value, style);
+    }
+  } else {
+    HTMLElement::CollectStyleForPresentationAttribute(name, value, style);
+  }
+}
+
 void HTMLCanvasElement::AddListener(CanvasDrawListener* listener) {
   listeners_.insert(listener);
 }
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
index 1d7efdc..fd9674e 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
@@ -141,6 +141,11 @@
     return toBlob(callback, mime_type, ScriptValue(), exception_state);
   }
 
+  bool IsPresentationAttribute(const QualifiedName&) const final;
+  void CollectStyleForPresentationAttribute(const QualifiedName&,
+                                            const AtomicString&,
+                                            MutableCSSPropertyValueSet*) final;
+
   // Used for canvas capture.
   void AddListener(CanvasDrawListener*);
   void RemoveListener(CanvasDrawListener*);
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h
index 19c70b0e..cbc0623 100644
--- a/third_party/blink/renderer/core/html/media/html_media_element.h
+++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -54,6 +54,7 @@
 #include "third_party/blink/renderer/platform/supplementable.h"
 #include "third_party/blink/renderer/platform/timer.h"
 #include "third_party/blink/renderer/platform/weborigin/kurl.h"
+#include "third_party/blink/renderer/platform/wtf/threading_primitives.h"
 
 namespace cc {
 class Layer;
diff --git a/third_party/blink/renderer/core/inspector/inspect_tools.h b/third_party/blink/renderer/core/inspector/inspect_tools.h
index f76bc3a..bd16149 100644
--- a/third_party/blink/renderer/core/inspector/inspect_tools.h
+++ b/third_party/blink/renderer/core/inspector/inspect_tools.h
@@ -27,6 +27,8 @@
                        bool ua_shadow,
                        const std::vector<uint8_t>& highlight_config);
 
+  void Trace(Visitor* visitor) const override;
+
  private:
   bool HandleInputEvent(LocalFrameView* frame_view,
                         const WebInputEvent& input_event,
@@ -38,7 +40,6 @@
   bool HandlePointerEvent(const WebPointerEvent&) override;
   void Draw(float scale) override;
   void NodeHighlightRequested(Node*);
-  void Trace(Visitor* visitor) const override;
   bool SupportsPersistentOverlays() override;
   String GetOverlayName() override;
 
@@ -91,6 +92,8 @@
       bool append_element_info,
       bool append_distance_info) const;
 
+  void Trace(Visitor* visitor) const override;
+
  private:
   bool ForwardEventsToOverlay() override;
   bool SupportsPersistentOverlays() override;
@@ -99,7 +102,6 @@
   void Draw(float scale) override;
   void DrawNode();
   void DrawMatchingSelector();
-  void Trace(Visitor* visitor) const override;
   String GetOverlayName() override;
 
   NodeContentVisibilityState content_visibility_state_ =
@@ -123,13 +125,14 @@
   std::unique_ptr<protocol::DictionaryValue>
   GetNodeInspectorSourceOrderHighlightAsJson() const;
 
+  void Trace(Visitor* visitor) const override;
+
  private:
   bool HideOnHideHighlight() override;
   bool HideOnMouseMove() override;
   void Draw(float scale) override;
   void DrawNode(Node* node, int source_order_position);
   void DrawParentNode();
-  void Trace(Visitor* visitor) const override;
   String GetOverlayName() override;
 
   Member<Node> node_;
@@ -170,15 +173,17 @@
 // -----------------------------------------------------------------------------
 
 class NearbyDistanceTool : public InspectTool {
-  using InspectTool::InspectTool;
+ public:
+  void Trace(Visitor* visitor) const override;
 
  private:
+  using InspectTool::InspectTool;
+
   bool HandleMouseDown(const WebMouseEvent& event,
                        bool* swallow_next_mouse_up) override;
   bool HandleMouseMove(const WebMouseEvent& event) override;
   bool HandleMouseUp(const WebMouseEvent& event) override;
   void Draw(float scale) override;
-  void Trace(Visitor* visitor) const override;
   String GetOverlayName() override;
 
   Member<Node> hovered_node_;
diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.h b/third_party/blink/renderer/core/inspector/inspector_network_agent.h
index 35f1d054..c844fb4 100644
--- a/third_party/blink/renderer/core/inspector/inspector_network_agent.h
+++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.h
@@ -64,7 +64,7 @@
 class HTTPHeaderMap;
 class KURL;
 class NetworkResourcesData;
-enum class RenderBlockingBehavior;
+enum class RenderBlockingBehavior : uint8_t;
 class Resource;
 class ResourceError;
 class ResourceResponse;
diff --git a/third_party/blink/renderer/core/inspector/inspector_trace_events.h b/third_party/blink/renderer/core/inspector/inspector_trace_events.h
index b4254f0a..757e45a 100644
--- a/third_party/blink/renderer/core/inspector/inspector_trace_events.h
+++ b/third_party/blink/renderer/core/inspector/inspector_trace_events.h
@@ -64,7 +64,7 @@
 class Node;
 struct PhysicalRect;
 class QualifiedName;
-enum class RenderBlockingBehavior;
+enum class RenderBlockingBehavior : uint8_t;
 class Resource;
 class ResourceError;
 class ResourceRequest;
diff --git a/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc b/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc
index 49065c37..bb6d8e5 100644
--- a/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/flexible_box_algorithm.cc
@@ -773,13 +773,8 @@
 
   if (IsColumnFlow()) {
     LayoutUnit max_size;
-    for (const FlexLine& line : flex_lines_) {
-      // Subtract main_axis_offset to remove border/padding
-      max_size =
-          std::max(line.main_axis_extent_ - line.sum_justify_adjustments_ -
-                       line.main_axis_offset_,
-                   max_size);
-    }
+    for (const FlexLine& line : flex_lines_)
+      max_size = std::max(line.sum_hypothetical_main_size_, max_size);
     return max_size;
   }
 
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc
index 3a63dcc..6c47f590 100644
--- a/third_party/blink/renderer/core/layout/layout_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -4114,12 +4114,14 @@
       ContainerWidthInInlineDirection();
   LayoutBlock* cb = ContainingBlock();
 
-  if (StyleRef().LogicalWidth().IsAuto() && !treat_as_replaced &&
-      ComputeLogicalWidthFromAspectRatio(&computed_values.extent_)) {
-    /* we're good */
-  } else if (treat_as_replaced) {
+  if (treat_as_replaced) {
     computed_values.extent_ =
         ComputeReplacedLogicalWidth() + BorderAndPaddingLogicalWidth();
+  } else if (StyleRef().LogicalWidth().IsAuto() &&
+             (!IsGridItem() || !HasStretchedLogicalWidth() ||
+              !HasStretchedLogicalHeight()) &&
+             ComputeLogicalWidthFromAspectRatio(&computed_values.extent_)) {
+    /* we're good */
   } else {
     LayoutUnit preferred_width = ComputeLogicalWidthUsing(
         kMainOrPreferredSize, style_to_use.LogicalWidth(),
@@ -4356,6 +4358,33 @@
              .GetPosition() == ItemPosition::kStretch;
 }
 
+// TODO (lajava) Can/Should we move this inside specific layout classes (flex.
+// grid)? Can we refactor columnFlexItemHasStretchAlignment logic?
+bool LayoutBox::HasStretchedLogicalHeight() const {
+  NOT_DESTROYED();
+  const ComputedStyle& style = StyleRef();
+  if (!style.LogicalHeight().IsAuto() || style.MarginBefore().IsAuto() ||
+      style.MarginAfter().IsAuto())
+    return false;
+  LayoutBlock* cb = ContainingBlock();
+  if (!cb) {
+    // We are evaluating align-self/justify-self, which default to 'normal' for
+    // the root element. The 'normal' value behaves like 'start' except for
+    // Flexbox Items, which obviously should have a container.
+    return false;
+  }
+  if (cb->IsHorizontalWritingMode() != IsHorizontalWritingMode()) {
+    return style
+               .ResolvedJustifySelf(cb->SelfAlignmentNormalBehavior(this),
+                                    cb->Style())
+               .GetPosition() == ItemPosition::kStretch;
+  }
+  return style
+             .ResolvedAlignSelf(cb->SelfAlignmentNormalBehavior(this),
+                                cb->Style())
+             .GetPosition() == ItemPosition::kStretch;
+}
+
 bool LayoutBox::SizesLogicalWidthToFitContent(
     const Length& logical_width) const {
   NOT_DESTROYED();
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h
index 645ca329..2f7a56d 100644
--- a/third_party/blink/renderer/core/layout/layout_box.h
+++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -2117,6 +2117,7 @@
   bool ColumnFlexItemHasStretchAlignment() const;
   bool IsStretchingColumnFlexItem() const;
   bool HasStretchedLogicalWidth() const;
+  bool HasStretchedLogicalHeight() const;
 
   void ExcludeScrollbars(
       PhysicalRect&,
diff --git a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
index 2f460f12..cb9d926 100644
--- a/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
+++ b/third_party/blink/renderer/core/layout/ng/custom/layout_worklet_global_scope_proxy.cc
@@ -42,7 +42,7 @@
       window->Url(), mojom::blink::ScriptType::kModule, global_scope_name,
       window->UserAgent(), frame->Client()->UserAgentMetadata(),
       frame->Client()->CreateWorkerFetchContext(),
-      window->GetContentSecurityPolicy()->Headers(),
+      window->GetContentSecurityPolicy()->GetParsedPolicies(),
       window->GetReferrerPolicy(), window->GetSecurityOrigin(),
       window->IsSecureContext(), window->GetHttpsState(),
       nullptr /* worker_clients */,
diff --git a/third_party/blink/renderer/core/layout/ng/custom/ng_custom_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/custom/ng_custom_layout_algorithm.cc
index 7fa79b01..acbeee66 100644
--- a/third_party/blink/renderer/core/layout/ng/custom/ng_custom_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/custom/ng_custom_layout_algorithm.cc
@@ -9,6 +9,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_intrinsic_sizes_result_options.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
+#include "third_party/blink/renderer/core/layout/geometry/logical_size.h"
 #include "third_party/blink/renderer/core/layout/ng/custom/custom_layout_fragment.h"
 #include "third_party/blink/renderer/core/layout/ng/custom/custom_layout_scope.h"
 #include "third_party/blink/renderer/core/layout/ng/custom/layout_worklet.h"
@@ -48,11 +49,18 @@
 
   bool depends_on_percentage_block_size = false;
   IntrinsicSizesResultOptions* intrinsic_sizes_result_options = nullptr;
-  if (!instance->IntrinsicSizes(
-          ConstraintSpace(), document, Node(),
-          container_builder_.InitialBorderBoxSize(), BorderScrollbarPadding(),
-          input.percentage_resolution_block_size, &scope,
-          &intrinsic_sizes_result_options, &depends_on_percentage_block_size)) {
+  LogicalSize border_box_size{
+      container_builder_.InlineSize(),
+      ComputeBlockSizeForFragment(
+          ConstraintSpace(), Style(), BorderPadding(),
+          CalculateDefaultBlockSize(ConstraintSpace(), Node(),
+                                    BorderScrollbarPadding()),
+          container_builder_.InlineSize())};
+  if (!instance->IntrinsicSizes(ConstraintSpace(), document, Node(),
+                                border_box_size, BorderScrollbarPadding(),
+                                input.percentage_resolution_block_size, &scope,
+                                &intrinsic_sizes_result_options,
+                                &depends_on_percentage_block_size)) {
     // TODO(ikilpatrick): Report this error to the developer.
     return FallbackMinMaxSizes(input);
   }
@@ -94,8 +102,14 @@
 
   FragmentResultOptions* fragment_result_options = nullptr;
   scoped_refptr<SerializedScriptValue> fragment_result_data;
-  if (!instance->Layout(ConstraintSpace(), document, Node(),
-                        container_builder_.InitialBorderBoxSize(),
+  LogicalSize border_box_size{
+      container_builder_.InlineSize(),
+      ComputeBlockSizeForFragment(
+          ConstraintSpace(), Style(), BorderPadding(),
+          CalculateDefaultBlockSize(ConstraintSpace(), Node(),
+                                    BorderScrollbarPadding()),
+          container_builder_.InlineSize())};
+  if (!instance->Layout(ConstraintSpace(), document, Node(), border_box_size,
                         BorderScrollbarPadding(), &scope,
                         fragment_result_options, &fragment_result_data)) {
     // TODO(ikilpatrick): Report this error to the developer.
diff --git a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
index aab57ff..f8bcc42 100644
--- a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include "base/optional.h"
 #include "third_party/blink/renderer/core/layout/flexible_box_algorithm.h"
+#include "third_party/blink/renderer/core/layout/geometry/logical_size.h"
 #include "third_party/blink/renderer/core/layout/layout_box.h"
 #include "third_party/blink/renderer/core/layout/layout_button.h"
 #include "third_party/blink/renderer/core/layout/layout_flexible_box.h"
@@ -36,7 +37,6 @@
       is_column_(Style().ResolvedIsColumnFlexDirection()),
       is_horizontal_flow_(FlexLayoutAlgorithm::IsHorizontalFlow(Style())),
       is_cross_size_definite_(IsContainerCrossSizeDefinite()) {
-  border_box_size_ = container_builder_.InitialBorderBoxSize();
   child_percentage_size_ = CalculateChildPercentageSize(
       ConstraintSpace(), Node(), ChildAvailableSize());
 
@@ -52,7 +52,7 @@
 
 LayoutUnit NGFlexLayoutAlgorithm::MainAxisContentExtent(
     LayoutUnit sum_hypothetical_main_size) const {
-  if (Style().ResolvedIsColumnFlexDirection()) {
+  if (is_column_) {
     // Even though we only pass border_padding in the third parameter, the
     // return value includes scrollbar, so subtract scrollbar to get content
     // size.
@@ -65,7 +65,7 @@
                ConstraintSpace(), Style(), BorderPadding(),
                sum_hypothetical_main_size.ClampNegativeToZero() +
                    border_scrollbar_padding,
-               border_box_size_.inline_size) -
+               container_builder_.InlineSize()) -
            border_scrollbar_padding;
   }
   return ChildAvailableSize().inline_size;
@@ -163,33 +163,15 @@
 
 bool NGFlexLayoutAlgorithm::IsColumnContainerMainSizeDefinite() const {
   DCHECK(is_column_);
-  // If this flex container is also a flex item, it might have a definite size
-  // imposed on it by its parent flex container.
-  // We can't rely on BlockLengthUnresolvable for this case because that
-  // considers Auto as unresolvable even when the block size is fixed and
-  // definite.
-  if (ConstraintSpace().IsFixedBlockSize() &&
-      !ConstraintSpace().IsFixedBlockSizeIndefinite())
-    return true;
-  Length main_size = Style().LogicalHeight();
-  return !BlockLengthUnresolvable(ConstraintSpace(), main_size,
-                                  LengthResolvePhase::kLayout);
+  return ChildAvailableSize().block_size != kIndefiniteSize;
 }
 
 bool NGFlexLayoutAlgorithm::IsContainerCrossSizeDefinite() const {
   // A column flexbox's cross axis is an inline size, so is definite.
   if (is_column_)
     return true;
-  // If this flex container is also a flex item, it might have a definite size
-  // imposed on it by its parent flex container.
-  // TODO(dgrogan): Removing this check doesn't cause any tests to fail. Remove
-  // it if unneeded or add a test that needs it.
-  if (ConstraintSpace().IsFixedBlockSize() &&
-      !ConstraintSpace().IsFixedBlockSizeIndefinite())
-    return true;
 
-  return !BlockLengthUnresolvable(ConstraintSpace(), Style().LogicalHeight(),
-                                  LengthResolvePhase::kLayout);
+  return ChildAvailableSize().block_size != kIndefiniteSize;
 }
 
 bool NGFlexLayoutAlgorithm::DoesItemStretch(const NGBlockNode& child) const {
@@ -377,8 +359,10 @@
   // For determining the intrinsic block-size we make %-block-sizes resolve
   // against an indefinite size.
   LogicalSize child_percentage_size = child_percentage_size_;
-  if (is_column_)
+  if (is_column_) {
     child_percentage_size.block_size = kIndefiniteSize;
+    space_builder.SetIsFixedBlockSizeIndefinite(true);
+  }
 
   space_builder.SetAvailableSize(child_available_size);
   space_builder.SetPercentageResolutionSize(child_percentage_size);
@@ -1061,8 +1045,8 @@
     main_axis_end_offset = BorderScrollbarPadding().inline_end;
   }
   FlexLine* line;
-  while (
-      (line = algorithm_->ComputeNextFlexLine(border_box_size_.inline_size))) {
+  while ((line = algorithm_->ComputeNextFlexLine(
+              container_builder_.InlineSize()))) {
     line->SetContainerMainInnerSize(
         MainAxisContentExtent(line->sum_hypothetical_main_size_));
     line->FreezeInflexibleItems();
@@ -1207,7 +1191,7 @@
                               BorderScrollbarPadding(), intrinsic_block_size);
   LayoutUnit block_size = ComputeBlockSizeForFragment(
       ConstraintSpace(), Style(), BorderPadding(), intrinsic_block_size,
-      border_box_size_.inline_size);
+      container_builder_.InlineSize());
 
   container_builder_.SetIntrinsicBlockSize(intrinsic_block_size);
   container_builder_.SetFragmentsTotalBlockSize(block_size);
diff --git a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.h
index b572d9d..2a29d53 100644
--- a/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.h
+++ b/third_party/blink/renderer/core/layout/ng/flex/ng_flex_layout_algorithm.h
@@ -86,7 +86,6 @@
   const bool is_horizontal_flow_;
   const bool is_cross_size_definite_;
   bool ignore_child_scrollbar_changes_ = false;
-  LogicalSize border_box_size_;
   LogicalSize child_percentage_size_;
   base::Optional<FlexLayoutAlgorithm> algorithm_;
 };
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
index 5156734..dc8618f 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
@@ -435,7 +435,18 @@
 
   bool IsFixedBlockSize() const { return bitfields_.is_fixed_block_size; }
 
-  // Whether a fixed block-size should be considered indefinite.
+  // Whether the block size should be considered indefinite.
+  // The constraint space can have any of the combinations:
+  // (1) !IsFixedBlockSize && !IsFixedBlockSizeIndefinite -- default. no special
+  //     handling needed.
+  // (2) !IsFixedBlockSize && IsFixedBlockSizeIndefinite -- Treat your height as
+  //     indefinite.
+  // (3) IsFixedBlockSize && !IsFixedBlockSizeIndefinite -- You must be this
+  //     size and your children can resolve % block size against it.
+  // (4) IsFixedBlockSize && IsFixedBlockSizeIndefinite -- You must be this
+  //     size but your children canNOT resolve % block size against it.
+  // TODO(dgrogan): This method needs a new name now that #2 above exists.
+  // Either IsBlockSizeIndefinite or ForceBlockSizeToIndefinite.
   bool IsFixedBlockSizeIndefinite() const {
     return bitfields_.is_fixed_block_size_indefinite;
   }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc
index 7d00f2e..c28fe32 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_result_caching_test.cc
@@ -1673,6 +1673,29 @@
   EXPECT_NE(result.get(), nullptr);
 }
 
+TEST_F(NGLayoutResultCachingTest, HitFlexDefiniteChange) {
+  SetBodyInnerHTML(R"HTML(
+    <div style="display: flex; flex-direction: column;">
+      <div style="height: 200px;" id=target1>
+        <div style="height: 100px"></div>
+      </div>
+    </div>
+  )HTML");
+
+  auto* target1 = To<LayoutBlock>(GetLayoutObjectByElementId("target1"));
+
+  scoped_refptr<const NGLayoutResult> result1 =
+      target1->GetCachedLayoutResult();
+  scoped_refptr<const NGLayoutResult> measure1 =
+      target1->GetCachedMeasureResult();
+  EXPECT_EQ(measure1->IntrinsicBlockSize(), 100);
+  EXPECT_EQ(result1->PhysicalFragment().Size().height, 200);
+
+  EXPECT_EQ(result1->GetConstraintSpaceForCaching().CacheSlot(),
+            NGCacheSlot::kMeasure);
+  EXPECT_EQ(result1.get(), measure1.get());
+}
+
 TEST_F(NGLayoutResultCachingTest, HitOrthogonalRoot) {
   SetBodyInnerHTML(R"HTML(
     <style>
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_utils.cc
index e8a41053..573fa70 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_utils.cc
@@ -303,17 +303,12 @@
     // percentages against a fixed block-size.
     // We miss the cache if the %-resolution block-size changes from indefinite
     // to definite (or visa-versa).
-    bool is_new_initial_block_size_indefinite =
-        new_space.IsFixedBlockSize() ? new_space.IsFixedBlockSizeIndefinite()
-                                     : is_initial_block_size_indefinite;
 
     bool is_old_initial_block_size_indefinite =
-        old_space.IsFixedBlockSize()
-            ? old_space.IsFixedBlockSizeIndefinite()
-            : layout_result.IsInitialBlockSizeIndefinite();
+        layout_result.IsInitialBlockSizeIndefinite();
 
     if (is_old_initial_block_size_indefinite !=
-        is_new_initial_block_size_indefinite)
+        is_initial_block_size_indefinite)
       return NGLayoutCacheStatus::kNeedsLayout;
 
     // %-block-size children of table-cells have different behaviour if they
@@ -326,10 +321,10 @@
     // If our initial block-size is definite, we know that if we change our
     // block-size we'll affect any descendant that depends on the resulting
     // percentage block-size.
-    if (!is_block_size_equal && !is_new_initial_block_size_indefinite)
+    if (!is_block_size_equal && !is_initial_block_size_indefinite)
       return NGLayoutCacheStatus::kNeedsLayout;
 
-    DCHECK(is_block_size_equal || is_new_initial_block_size_indefinite);
+    DCHECK(is_block_size_equal || is_initial_block_size_indefinite);
 
     // At this point we know that either we have the same block-size for our
     // fragment, or our initial block-size was indefinite.
@@ -342,7 +337,7 @@
     // As we only care about the quirks-mode %-block-size behaviour we remove
     // this false-positive by checking if we have an initial indefinite
     // block-size.
-    if (is_new_initial_block_size_indefinite &&
+    if (is_initial_block_size_indefinite &&
         physical_fragment.DependsOnPercentageBlockSize()) {
       DCHECK(is_old_initial_block_size_indefinite);
       if (new_space.PercentageResolutionBlockSize() !=
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc
index 349304ac..a091557 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 #include "base/optional.h"
+#include "third_party/blink/renderer/core/layout/geometry/logical_size.h"
 #include "third_party/blink/renderer/core/layout/layout_box.h"
 #include "third_party/blink/renderer/core/layout/layout_table_cell.h"
 #include "third_party/blink/renderer/core/layout/ng/ng_block_node.h"
@@ -1168,8 +1169,6 @@
   }
 }
 
-namespace {
-
 // Calculates default content size for html and body elements in quirks mode.
 // Returns |kIndefiniteSize| in all other cases.
 LayoutUnit CalculateDefaultBlockSize(
@@ -1187,6 +1186,22 @@
   return kIndefiniteSize;
 }
 
+namespace {
+
+// Calculates default content size for html and body elements in quirks mode.
+// Returns |kIndefiniteSize| in all other cases.
+LayoutUnit ComputeInitialBlockSizeForFragment(
+    const NGConstraintSpace& space,
+    const ComputedStyle& style,
+    const NGBoxStrut& border_padding,
+    LayoutUnit intrinsic_size,
+    base::Optional<LayoutUnit> inline_size) {
+  if (space.IsFixedBlockSizeIndefinite())
+    return intrinsic_size;
+  return ComputeBlockSizeForFragment(space, style, border_padding,
+                                     intrinsic_size, inline_size);
+}
+
 // Clamp the inline size of the scrollbar, unless it's larger than the inline
 // size of the content box, in which case we'll return that instead. Scrollbar
 // handling is quite bad in such situations, and this method here is just to
@@ -1237,9 +1252,9 @@
       constraint_space, node, border_scrollbar_padding);
   LayoutUnit inline_size =
       ComputeInlineSizeForFragment(constraint_space, node, border_padding);
-  LogicalSize border_box_size(
-      inline_size,
-      ComputeBlockSizeForFragment(constraint_space, style, border_padding,
+  LogicalSize border_box_size(inline_size,
+                              ComputeInitialBlockSizeForFragment(
+                                  constraint_space, style, border_padding,
                                   default_block_size, inline_size));
 
   if (UNLIKELY(border_box_size.inline_size <
@@ -1301,7 +1316,6 @@
   // Flex items may have a fixed block-size, but children shouldn't resolve
   // their percentages against this.
   if (space.IsFixedBlockSizeIndefinite()) {
-    DCHECK(space.IsFixedBlockSize());
     DCHECK(node.IsFlexItem() || space.IsTableCell());
     child_percentage_size.block_size = kIndefiniteSize;
     return child_percentage_size;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.h b/third_party/blink/renderer/core/layout/ng/ng_length_utils.h
index ccf116f..c3f24af 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.h
@@ -395,6 +395,13 @@
     base::Optional<LayoutUnit> inline_size,
     LayoutUnit available_block_size_adjustment = LayoutUnit());
 
+// Calculates default content size for html and body elements in quirks mode.
+// Returns |kIndefiniteSize| in all other cases.
+CORE_EXPORT LayoutUnit
+CalculateDefaultBlockSize(const NGConstraintSpace& space,
+                          const NGBlockNode& node,
+                          const NGBoxStrut& border_scrollbar_padding);
+
 // Intrinsic size for replaced elements is computed as:
 // - |out_replaced_size| intrinsic size of the element. It might have no value.
 // - |out_aspect_ratio| only set if out_replaced_size is empty.
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index b232c61..8f9eb22 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -730,7 +730,7 @@
                            ->ExperimentalFeaturesEnabled()) {
     ContentSecurityPolicy* origin_window_csp =
         origin_window->GetContentSecurityPolicy();
-    initiator_csp = origin_window_csp->ExposeForNavigationalChecks();
+    initiator_csp = origin_window_csp->GetParsedPolicies();
     NavigationInitiatorImpl::From(*origin_window)
         .BindReceiver(navigation_initiator.InitWithNewPipeAndPassReceiver());
   }
diff --git a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc
index 3367e89..70de748 100644
--- a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc
@@ -64,19 +64,13 @@
           kDoNotSupportReferrerPolicyLegacyKeywords, &response_referrer_policy);
     }
 
-    // Construct a ContentSecurityPolicy object to convert
-    // ContentSecurityPolicyResponseHeaders to CSPHeaderAndType.
-    // TODO(nhiroki): Find an efficient way to do this.
-    auto* response_content_security_policy =
-        MakeGarbageCollected<ContentSecurityPolicy>();
-    response_content_security_policy->DidReceiveHeaders(
-        script_data->GetContentSecurityPolicyResponseHeaders());
-
-    global_scope_->Initialize(response_url, response_referrer_policy,
-                              script_data->GetResponseAddressSpace(),
-                              response_content_security_policy->Headers(),
-                              script_data->CreateOriginTrialTokens().get(),
-                              mojom::blink::kAppCacheNoCacheId);
+    global_scope_->Initialize(
+        response_url, response_referrer_policy,
+        script_data->GetResponseAddressSpace(),
+        ContentSecurityPolicy::ParseHeaders(
+            script_data->GetContentSecurityPolicyResponseHeaders()),
+        script_data->CreateOriginTrialTokens().get(),
+        mojom::blink::kAppCacheNoCacheId);
   }
 
   ModuleType module_type;
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc
index f8b362c..1f41692 100644
--- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc
@@ -216,8 +216,9 @@
   auto creation_params = std::make_unique<GlobalScopeCreationParams>(
       url_, mojom::blink::ScriptType::kModule, "GlobalScopeName", "UserAgent",
       UserAgentMetadata(), nullptr /* web_worker_fetch_context */,
-      Vector<CSPHeaderAndType>(), network::mojom::ReferrerPolicy::kDefault,
-      security_origin_.get(), true /* is_secure_context */, HttpsState::kModern,
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
+      network::mojom::ReferrerPolicy::kDefault, security_origin_.get(),
+      true /* is_secure_context */, HttpsState::kModern,
       nullptr /* worker_clients */, nullptr /* content_settings_client */,
       network::mojom::IPAddressSpace::kLocal, nullptr /* origin_trial_token */,
       base::UnguessableToken::Create(), nullptr /* worker_settings */,
diff --git a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
index 94560a2f1..8a13eeb 100644
--- a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
@@ -161,11 +161,6 @@
           kDoNotSupportReferrerPolicyLegacyKeywords, &response_referrer_policy);
     }
 
-    auto* response_content_security_policy =
-        MakeGarbageCollected<ContentSecurityPolicy>();
-    response_content_security_policy->DidReceiveHeaders(
-        ContentSecurityPolicyResponseHeaders(response));
-
     std::unique_ptr<Vector<String>> response_origin_trial_tokens =
         OriginTrialContext::ParseHeaderValue(
             response.HttpHeaderField(http_names::kOriginTrial));
@@ -173,7 +168,8 @@
     // Step 12.3-12.6 are implemented in Initialize().
     global_scope_->Initialize(
         response_url, response_referrer_policy, response.AddressSpace(),
-        response_content_security_policy->Headers(),
+        ContentSecurityPolicy::ParseHeaders(
+            ContentSecurityPolicyResponseHeaders(response)),
         response_origin_trial_tokens.get(), response.AppCacheID());
   }
 
diff --git a/third_party/blink/renderer/core/mojo/mojo_watcher.h b/third_party/blink/renderer/core/mojo/mojo_watcher.h
index c1ce045..11f5096 100644
--- a/third_party/blink/renderer/core/mojo/mojo_watcher.h
+++ b/third_party/blink/renderer/core/mojo/mojo_watcher.h
@@ -11,6 +11,10 @@
 #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
 
+namespace base {
+class SingleThreadTaskRunner;
+}  // namespace base
+
 namespace blink {
 
 class ExecutionContext;
diff --git a/third_party/blink/renderer/core/paint/document_marker_painter.h b/third_party/blink/renderer/core/paint/document_marker_painter.h
index a0a1c35..5598412 100644
--- a/third_party/blink/renderer/core/paint/document_marker_painter.h
+++ b/third_party/blink/renderer/core/paint/document_marker_painter.h
@@ -15,6 +15,7 @@
 class FloatRect;
 class GraphicsContext;
 class LayoutUnit;
+class Node;
 class StyleableMarker;
 class TextMarkerBase;
 struct PaintInfo;
diff --git a/third_party/blink/renderer/core/scroll/scrollable_area.h b/third_party/blink/renderer/core/scroll/scrollable_area.h
index c81e5a4..d189f41 100644
--- a/third_party/blink/renderer/core/scroll/scrollable_area.h
+++ b/third_party/blink/renderer/core/scroll/scrollable_area.h
@@ -61,6 +61,7 @@
 class LayoutBox;
 class LayoutObject;
 class LocalFrame;
+class Node;
 class PaintLayer;
 class ProgrammaticScrollAnimator;
 class ScrollAnchor;
diff --git a/third_party/blink/renderer/core/streams/stream_promise_resolver.h b/third_party/blink/renderer/core/streams/stream_promise_resolver.h
index 38f8fa7..13723308 100644
--- a/third_party/blink/renderer/core/streams/stream_promise_resolver.h
+++ b/third_party/blink/renderer/core/streams/stream_promise_resolver.h
@@ -8,6 +8,7 @@
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/bindings/trace_wrapper_v8_reference.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/heap/visitor.h"
 #include "v8/include/v8.h"
 
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image.h b/third_party/blink/renderer/core/svg/graphics/svg_image.h
index 1f38e619..58096e62 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image.h
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image.h
@@ -44,6 +44,7 @@
 class Document;
 class LayoutSVGRoot;
 class LocalFrame;
+class Node;
 class Page;
 class PaintController;
 class SVGImageChromeClient;
diff --git a/third_party/blink/renderer/core/svg/svg_svg_element.h b/third_party/blink/renderer/core/svg/svg_svg_element.h
index 481ee26..4e561690 100644
--- a/third_party/blink/renderer/core/svg/svg_svg_element.h
+++ b/third_party/blink/renderer/core/svg/svg_svg_element.h
@@ -47,6 +47,7 @@
 
  public:
   explicit SVGSVGElement(Document&);
+  ~SVGSVGElement() override;
 
   base::Optional<float> IntrinsicWidth() const;
   base::Optional<float> IntrinsicHeight() const;
@@ -108,8 +109,6 @@
   void Trace(Visitor*) const override;
 
  private:
-  ~SVGSVGElement() override;
-
   void SetViewSpec(const SVGViewSpec*);
 
   void ParseAttribute(const AttributeModificationParams&) override;
diff --git a/third_party/blink/renderer/core/svg/svg_text_path_element.h b/third_party/blink/renderer/core/svg/svg_text_path_element.h
index ce2d371..35b72fd 100644
--- a/third_party/blink/renderer/core/svg/svg_text_path_element.h
+++ b/third_party/blink/renderer/core/svg/svg_text_path_element.h
@@ -56,6 +56,7 @@
   };
 
   explicit SVGTextPathElement(Document&);
+  ~SVGTextPathElement() override;
 
   SVGAnimatedLength* startOffset() const { return start_offset_.Get(); }
   SVGAnimatedEnumeration<SVGTextPathMethodType>* method() {
@@ -68,8 +69,6 @@
   void Trace(Visitor*) const override;
 
  private:
-  ~SVGTextPathElement() override;
-
   void ClearResourceReferences();
 
   void BuildPendingResource() override;
diff --git a/third_party/blink/renderer/core/timing/layout_shift_attribution.h b/third_party/blink/renderer/core/timing/layout_shift_attribution.h
index eaa6c9e..8b4fef9 100644
--- a/third_party/blink/renderer/core/timing/layout_shift_attribution.h
+++ b/third_party/blink/renderer/core/timing/layout_shift_attribution.h
@@ -11,6 +11,7 @@
 namespace blink {
 
 class DOMRectReadOnly;
+class Node;
 class ScriptState;
 class ScriptValue;
 
diff --git a/third_party/blink/renderer/core/timing/performance_measure.h b/third_party/blink/renderer/core/timing/performance_measure.h
index f1258ced..862b24d 100644
--- a/third_party/blink/renderer/core/timing/performance_measure.h
+++ b/third_party/blink/renderer/core/timing/performance_measure.h
@@ -49,6 +49,7 @@
                      double end_time,
                      scoped_refptr<SerializedScriptValue>,
                      ExceptionState&);
+  ~PerformanceMeasure() override = default;
 
   static PerformanceMeasure* Create(ScriptState*,
                                     const AtomicString& name,
@@ -67,7 +68,6 @@
   void Trace(Visitor* visitor) const override;
 
  private:
-  ~PerformanceMeasure() override = default;
   scoped_refptr<SerializedScriptValue> serialized_detail_;
   // In order to prevent cross-world reference leak, we create a copy of the
   // detail for each world.
diff --git a/third_party/blink/renderer/core/workers/build.gni b/third_party/blink/renderer/core/workers/build.gni
index 6e8cda9..5581cc0 100644
--- a/third_party/blink/renderer/core/workers/build.gni
+++ b/third_party/blink/renderer/core/workers/build.gni
@@ -7,6 +7,8 @@
 blink_core_sources_workers = [
   "abstract_worker.cc",
   "abstract_worker.h",
+  "cross_thread_global_scope_creation_params_copier.cc",
+  "cross_thread_global_scope_creation_params_copier.h",
   "dedicated_worker.cc",
   "dedicated_worker.h",
   "dedicated_worker_global_scope.cc",
diff --git a/third_party/blink/renderer/core/workers/cross_thread_global_scope_creation_params_copier.cc b/third_party/blink/renderer/core/workers/cross_thread_global_scope_creation_params_copier.cc
new file mode 100644
index 0000000..32c5b7c
--- /dev/null
+++ b/third_party/blink/renderer/core/workers/cross_thread_global_scope_creation_params_copier.cc
@@ -0,0 +1,126 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/workers/cross_thread_global_scope_creation_params_copier.h"
+
+#include "services/network/public/mojom/content_security_policy.mojom-blink.h"
+
+namespace WTF {
+
+namespace {
+
+network::mojom::blink::CSPSourcePtr CSPSourceIsolatedCopy(
+    const network::mojom::blink::CSPSourcePtr& in) {
+  if (!in)
+    return nullptr;
+  return network::mojom::blink::CSPSource::New(
+      CrossThreadCopier<String>::Copy(in->scheme),
+      CrossThreadCopier<String>::Copy(in->host), in->port,
+      CrossThreadCopier<String>::Copy(in->path), in->is_host_wildcard,
+      in->is_port_wildcard);
+}
+
+network::mojom::blink::CSPHashSourcePtr CSPHashSourceIsolatedCopy(
+    const network::mojom::blink::CSPHashSourcePtr& in) {
+  if (!in)
+    return nullptr;
+  return network::mojom::blink::CSPHashSource::New(
+      in->algorithm, CrossThreadCopier<Vector<uint8_t>>::Copy(in->value));
+}
+
+HashMap<network::mojom::blink::CSPDirectiveName, String>
+RawDirectivesIsolatedCopy(
+    const HashMap<network::mojom::blink::CSPDirectiveName, String>& in) {
+  HashMap<network::mojom::blink::CSPDirectiveName, String> out;
+  for (const auto& element : in) {
+    out.insert(element.key, CrossThreadCopier<String>::Copy(element.value));
+  }
+  return out;
+}
+
+network::mojom::blink::CSPSourceListPtr CSPSourceListIsolatedCopy(
+    const network::mojom::blink::CSPSourceListPtr& in) {
+  if (!in)
+    return nullptr;
+  Vector<network::mojom::blink::CSPSourcePtr> sources;
+  for (const auto& source : in->sources)
+    sources.push_back(CSPSourceIsolatedCopy(source));
+
+  Vector<network::mojom::blink::CSPHashSourcePtr> hashes;
+  for (const auto& hash : in->hashes)
+    hashes.push_back(CSPHashSourceIsolatedCopy(hash));
+
+  return network::mojom::blink::CSPSourceList::New(
+      std::move(sources), CrossThreadCopier<Vector<String>>::Copy(in->nonces),
+      std::move(hashes), in->allow_self, in->allow_star,
+      in->allow_response_redirects, in->allow_inline, in->allow_eval,
+      in->allow_wasm_eval, in->allow_dynamic, in->allow_unsafe_hashes,
+      in->report_sample);
+}
+
+HashMap<network::mojom::blink::CSPDirectiveName,
+        network::mojom::blink::CSPSourceListPtr>
+DirectivesIsolatedCopy(
+    const HashMap<network::mojom::blink::CSPDirectiveName,
+                  network::mojom::blink::CSPSourceListPtr>& in) {
+  HashMap<network::mojom::blink::CSPDirectiveName,
+          network::mojom::blink::CSPSourceListPtr>
+      out;
+  for (const auto& element : in) {
+    out.insert(element.key, CSPSourceListIsolatedCopy(element.value));
+  }
+  return out;
+}
+
+network::mojom::blink::ContentSecurityPolicyPtr
+ContentSecurityPolicyIsolatedCopy(
+    const network::mojom::blink::ContentSecurityPolicyPtr& csp) {
+  if (!csp)
+    return nullptr;
+  return network::mojom::blink::ContentSecurityPolicy::New(
+      CSPSourceIsolatedCopy(csp->self_origin),
+      RawDirectivesIsolatedCopy(csp->raw_directives),
+      DirectivesIsolatedCopy(csp->directives), csp->upgrade_insecure_requests,
+      csp->treat_as_public_address, csp->block_all_mixed_content, csp->sandbox,
+      network::mojom::blink::ContentSecurityPolicyHeader::New(
+          CrossThreadCopier<String>::Copy(csp->header->header_value),
+          csp->header->type, csp->header->source),
+      csp->use_reporting_api,
+      CrossThreadCopier<Vector<String>>::Copy(csp->report_endpoints),
+      csp->plugin_types.has_value()
+          ? base::make_optional(CrossThreadCopier<Vector<String>>::Copy(
+                csp->plugin_types.value()))
+          : base::nullopt,
+      csp->require_trusted_types_for,
+      csp->trusted_types ? network::mojom::blink::CSPTrustedTypes::New(
+                               CrossThreadCopier<Vector<String>>::Copy(
+                                   csp->trusted_types->list),
+                               csp->trusted_types->allow_any,
+                               csp->trusted_types->allow_duplicates)
+                         : nullptr,
+      CrossThreadCopier<Vector<String>>::Copy(csp->parsing_errors));
+}
+
+}  // namespace
+
+CrossThreadCopier<Vector<network::mojom::blink::ContentSecurityPolicyPtr>>::Type
+CrossThreadCopier<Vector<network::mojom::blink::ContentSecurityPolicyPtr>>::
+    Copy(const Vector<network::mojom::blink::ContentSecurityPolicyPtr>&
+             list_in) {
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr> list_out;
+  for (const auto& element : list_in)
+    list_out.emplace_back(ContentSecurityPolicyIsolatedCopy(element));
+  return list_out;
+}
+
+CrossThreadCopier<std::unique_ptr<blink::GlobalScopeCreationParams>>::Type
+CrossThreadCopier<std::unique_ptr<blink::GlobalScopeCreationParams>>::Copy(
+    std::unique_ptr<blink::GlobalScopeCreationParams> pointer) {
+  pointer->outside_content_security_policies = CrossThreadCopier<
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr>>::
+      Copy(pointer->outside_content_security_policies);
+  return pointer;
+}
+
+}  // namespace WTF
diff --git a/third_party/blink/renderer/core/workers/cross_thread_global_scope_creation_params_copier.h b/third_party/blink/renderer/core/workers/cross_thread_global_scope_creation_params_copier.h
new file mode 100644
index 0000000..dc736c5d
--- /dev/null
+++ b/third_party/blink/renderer/core/workers/cross_thread_global_scope_creation_params_copier.h
@@ -0,0 +1,31 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_WORKERS_CROSS_THREAD_GLOBAL_SCOPE_CREATION_PARAMS_COPIER_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_WORKERS_CROSS_THREAD_GLOBAL_SCOPE_CREATION_PARAMS_COPIER_H_
+
+#include "services/network/public/mojom/content_security_policy.mojom-blink-forward.h"
+#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
+#include "third_party/blink/renderer/platform/wtf/cross_thread_copier.h"
+
+namespace WTF {
+
+template <>
+struct CrossThreadCopier<
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr>> {
+  STATIC_ONLY(CrossThreadCopier);
+  using Type = Vector<network::mojom::blink::ContentSecurityPolicyPtr>;
+  static Type Copy(const Type&);
+};
+
+template <>
+struct CrossThreadCopier<std::unique_ptr<blink::GlobalScopeCreationParams>> {
+  STATIC_ONLY(CrossThreadCopier);
+  using Type = std::unique_ptr<blink::GlobalScopeCreationParams>;
+  static Type Copy(Type);
+};
+
+}  // namespace WTF
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_CROSS_THREAD_GLOBAL_SCOPE_CREATION_PARAMS_COPIER_H_
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index afe7d4d..8551eb2c 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -431,7 +431,7 @@
       GetExecutionContext()->UserAgent(),
       GetExecutionContext()->GetUserAgentMetadata(),
       CreateWebWorkerFetchContext(),
-      GetExecutionContext()->GetContentSecurityPolicy()->Headers(),
+      GetExecutionContext()->GetContentSecurityPolicy()->GetParsedPolicies(),
       referrer_policy, GetExecutionContext()->GetSecurityOrigin(),
       GetExecutionContext()->IsSecureContext(),
       GetExecutionContext()->GetHttpsState(),
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
index aea04050..413f4fa 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
@@ -93,7 +93,8 @@
     // have its own appcache and instead depends on the parent frame's one.
     global_scope->Initialize(
         response_script_url, response_referrer_policy, *response_address_space,
-        Vector<CSPHeaderAndType>(), nullptr /* response_origin_trial_tokens */,
+        Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
+        nullptr /* response_origin_trial_tokens */,
         mojom::blink::kAppCacheNoCacheId);
     return global_scope;
   } else {
@@ -175,7 +176,8 @@
     const KURL& response_url,
     network::mojom::ReferrerPolicy response_referrer_policy,
     network::mojom::IPAddressSpace response_address_space,
-    const Vector<CSPHeaderAndType>& /* response_csp_headers */,
+    Vector<network::mojom::blink::
+               ContentSecurityPolicyPtr> /* response_csp_headers */,
     const Vector<String>* /* response_origin_trial_tokens */,
     int64_t appcache_id) {
   // Step 14.3. "Set worker global scope's url to response's url."
@@ -198,7 +200,8 @@
   // response CSP headers. These should be called after SetAddressSpace() to
   // correctly override the address space by the "treat-as-public-address" CSP
   // directive.
-  InitContentSecurityPolicyFromVector(OutsideContentSecurityPolicyHeaders());
+  InitContentSecurityPolicyFromVector(
+      mojo::Clone(OutsideContentSecurityPolicies()));
   BindContentSecurityPolicyToExecutionContext();
 
   // This should be called after OriginTrialContext::AddTokens() to install
@@ -393,7 +396,7 @@
   // origin trial tokens in DedicatedWorkerGlobalScope's constructor.
   Initialize(classic_script_loader->ResponseURL(), response_referrer_policy,
              classic_script_loader->ResponseAddressSpace(),
-             Vector<CSPHeaderAndType>(),
+             Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
              nullptr /* response_origin_trial_tokens */,
              classic_script_loader->AppCacheID());
 
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
index 8b4de2c7..7d075d7 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
@@ -87,12 +87,13 @@
   }
 
   // Implements WorkerGlobalScope.
-  void Initialize(const KURL& response_url,
-                  network::mojom::ReferrerPolicy response_referrer_policy,
-                  network::mojom::IPAddressSpace response_address_space,
-                  const Vector<CSPHeaderAndType>& response_csp_headers,
-                  const Vector<String>* response_origin_trial_tokens,
-                  int64_t appcache_host) override;
+  void Initialize(
+      const KURL& response_url,
+      network::mojom::ReferrerPolicy response_referrer_policy,
+      network::mojom::IPAddressSpace response_address_space,
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
+      const Vector<String>* response_origin_trial_tokens,
+      int64_t appcache_host) override;
   void FetchAndRunClassicScript(
       const KURL& script_url,
       std::unique_ptr<WorkerMainScriptLoadParameters>
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_test.cc b/third_party/blink/renderer/core/workers/dedicated_worker_test.cc
index 5537da1..c461bb1 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_test.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_test.cc
@@ -129,15 +129,13 @@
   void StartWithSourceCode(const String& source) {
     KURL script_url("http://fake.url/");
     security_origin_ = SecurityOrigin::Create(script_url);
-    Vector<CSPHeaderAndType> headers{
-        {"contentSecurityPolicy",
-         network::mojom::ContentSecurityPolicyType::kReport}};
     auto worker_settings = std::make_unique<WorkerSettings>(
         To<LocalDOMWindow>(GetExecutionContext())->GetFrame()->GetSettings());
     auto params = std::make_unique<GlobalScopeCreationParams>(
         script_url, mojom::blink::ScriptType::kClassic,
         "fake global scope name", "fake user agent", UserAgentMetadata(),
-        nullptr /* web_worker_fetch_context */, headers,
+        nullptr /* web_worker_fetch_context */,
+        Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
         network::mojom::ReferrerPolicy::kDefault, security_origin_.get(),
         false /* starter_secure_context */,
         CalculateHttpsState(security_origin_.get()),
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
index d18d631..6459ea1 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
@@ -20,7 +20,8 @@
     const String& user_agent,
     const base::Optional<UserAgentMetadata>& ua_metadata,
     scoped_refptr<WebWorkerFetchContext> web_worker_fetch_context,
-    const Vector<CSPHeaderAndType>& outside_content_security_policy_headers,
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr>
+        outside_content_security_policies,
     network::mojom::ReferrerPolicy referrer_policy,
     const SecurityOrigin* starter_origin,
     bool starter_secure_context,
@@ -47,6 +48,8 @@
       user_agent(user_agent.IsolatedCopy()),
       ua_metadata(ua_metadata.value_or(blink::UserAgentMetadata())),
       web_worker_fetch_context(std::move(web_worker_fetch_context)),
+      outside_content_security_policies(
+          std::move(outside_content_security_policies)),
       referrer_policy(referrer_policy),
       starter_origin(starter_origin ? starter_origin->IsolatedCopy() : nullptr),
       starter_secure_context(starter_secure_context),
@@ -71,13 +74,6 @@
       parent_context_token(parent_context_token),
       parent_cross_origin_isolated_capability(
           parent_cross_origin_isolated_capability) {
-  this->outside_content_security_policy_headers.ReserveInitialCapacity(
-      outside_content_security_policy_headers.size());
-  for (const auto& header : outside_content_security_policy_headers) {
-    this->outside_content_security_policy_headers.emplace_back(
-        header.first.IsolatedCopy(), header.second);
-  }
-
   this->origin_trial_tokens = std::make_unique<Vector<String>>();
   if (origin_trial_tokens) {
     for (const String& token : *origin_trial_tokens)
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.h b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
index 7d93ad6..69cd96ad 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.h
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
@@ -48,7 +48,8 @@
       const String& user_agent,
       const base::Optional<UserAgentMetadata>& ua_metadata,
       scoped_refptr<WebWorkerFetchContext>,
-      const Vector<CSPHeaderAndType>& outside_content_security_policy_headers,
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr>
+          outside_content_security_policies,
       network::mojom::ReferrerPolicy referrer_policy,
       const SecurityOrigin*,
       bool starter_secure_context,
@@ -98,7 +99,8 @@
   // TODO(bashi): This contains "inside" CSP headers for on-the-main-thread
   // service/shared worker script fetch. Add a separate parameter for "inside"
   // CSP headers.
-  Vector<CSPHeaderAndType> outside_content_security_policy_headers;
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr>
+      outside_content_security_policies;
 
   network::mojom::ReferrerPolicy referrer_policy;
   std::unique_ptr<Vector<String>> origin_trial_tokens;
diff --git a/third_party/blink/renderer/core/workers/main_thread_worklet_test.cc b/third_party/blink/renderer/core/workers/main_thread_worklet_test.cc
index c5edd02..aef86c9 100644
--- a/third_party/blink/renderer/core/workers/main_thread_worklet_test.cc
+++ b/third_party/blink/renderer/core/workers/main_thread_worklet_test.cc
@@ -63,7 +63,7 @@
         window->Url(), mojom::blink::ScriptType::kModule, "MainThreadWorklet",
         window->UserAgent(), window->GetFrame()->Loader().UserAgentMetadata(),
         nullptr /* web_worker_fetch_context */,
-        window->GetContentSecurityPolicy()->Headers(),
+        window->GetContentSecurityPolicy()->GetParsedPolicies(),
         window->GetReferrerPolicy(), window->GetSecurityOrigin(),
         window->IsSecureContext(), window->GetHttpsState(),
         nullptr /* worker_clients */, nullptr /* content_settings_client */,
@@ -166,13 +166,14 @@
 // Test that having an invalid CSP does not result in an exception.
 // See bugs: 844383,844317
 TEST_F(MainThreadWorkletInvalidCSPTest, InvalidContentSecurityPolicy) {
-  ContentSecurityPolicy* csp = global_scope_->GetContentSecurityPolicy();
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr> csp =
+      global_scope_->GetContentSecurityPolicy()->GetParsedPolicies();
 
   // At this point check that the CSP that was set is indeed invalid.
-  EXPECT_EQ(1ul, csp->Headers().size());
-  EXPECT_EQ("invalid-csp", csp->Headers().at(0).first);
+  EXPECT_EQ(1ul, csp.size());
+  EXPECT_EQ("invalid-csp", csp[0]->header->header_value);
   EXPECT_EQ(network::mojom::ContentSecurityPolicyType::kEnforce,
-            csp->Headers().at(0).second);
+            csp[0]->header->type);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h b/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h
index ce6e158a..b38186d9 100644
--- a/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h
+++ b/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.h
@@ -14,6 +14,7 @@
 #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+#include "third_party/blink/renderer/platform/wtf/threading_primitives.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/core/workers/shared_worker_client_holder.cc b/third_party/blink/renderer/core/workers/shared_worker_client_holder.cc
index 312a089..61689eab 100644
--- a/third_party/blink/renderer/core/workers/shared_worker_client_holder.cc
+++ b/third_party/blink/renderer/core/workers/shared_worker_client_holder.cc
@@ -91,20 +91,6 @@
   DCHECK(IsMainThread());
   DCHECK(options);
 
-  // TODO(estark): this is broken, as it only uses the first header
-  // when multiple might have been sent. Fix by making the
-  // mojom::blink::SharedWorkerInfo take a map that can contain multiple
-  // headers.
-  Vector<CSPHeaderAndType> headers =
-      worker->GetExecutionContext()->GetContentSecurityPolicy()->Headers();
-  WebString header = "";
-  auto header_type = network::mojom::ContentSecurityPolicyType::kReport;
-  if (headers.size() > 0) {
-    header = headers[0].first;
-    header_type = static_cast<network::mojom::ContentSecurityPolicyType>(
-        headers[0].second);
-  }
-
   mojo::PendingRemote<mojom::blink::SharedWorkerClient> client;
   client_receivers_.Add(std::make_unique<SharedWorkerClient>(worker),
                         client.InitWithNewPipeAndPassReceiver(), task_runner_);
@@ -124,7 +110,10 @@
           : mojom::InsecureRequestsPolicy::kDoNotUpgrade;
 
   auto info = mojom::blink::SharedWorkerInfo::New(
-      url, std::move(options), header, header_type,
+      url, std::move(options),
+      worker->GetExecutionContext()
+          ->GetContentSecurityPolicy()
+          ->GetParsedPolicies(),
       worker->GetExecutionContext()->AddressSpace(),
       mojom::blink::FetchClientSettingsObject::New(
           outside_fetch_client_settings_object->GetReferrerPolicy(),
diff --git a/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc b/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
index 8121568..cfe4d64 100644
--- a/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/shared_worker_global_scope.cc
@@ -78,7 +78,7 @@
     const KURL& response_url,
     network::mojom::ReferrerPolicy response_referrer_policy,
     network::mojom::IPAddressSpace response_address_space,
-    const Vector<CSPHeaderAndType>& response_csp_headers,
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
     const Vector<String>* response_origin_trial_tokens,
     int64_t appcache_id) {
   // Step 12.3. "Set worker global scope's url to response's url."
@@ -106,12 +106,12 @@
   // https://w3c.github.io/webappsec-csp/#initialize-global-object-csp
   // These should be called after SetAddressSpace() to correctly override the
   // address space by the "treat-as-public-address" CSP directive.
-  Vector<CSPHeaderAndType> csp_headers =
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr> csp_headers =
       response_url.ProtocolIsAbout() || response_url.ProtocolIsData() ||
               response_url.ProtocolIs("blob")
-          ? OutsideContentSecurityPolicyHeaders()
-          : response_csp_headers;
-  InitContentSecurityPolicyFromVector(csp_headers);
+          ? mojo::Clone(OutsideContentSecurityPolicies())
+          : std::move(response_csp);
+  InitContentSecurityPolicyFromVector(std::move(csp_headers));
   BindContentSecurityPolicyToExecutionContext();
 
   OriginTrialContext::AddTokens(this, response_origin_trial_tokens);
@@ -258,8 +258,9 @@
   Initialize(classic_script_loader->ResponseURL(), response_referrer_policy,
              classic_script_loader->ResponseAddressSpace(),
              classic_script_loader->GetContentSecurityPolicy()
-                 ? classic_script_loader->GetContentSecurityPolicy()->Headers()
-                 : Vector<CSPHeaderAndType>(),
+                 ? classic_script_loader->GetContentSecurityPolicy()
+                       ->GetParsedPolicies()
+                 : Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
              classic_script_loader->OriginTrialTokens(),
              classic_script_loader->AppCacheID());
 
diff --git a/third_party/blink/renderer/core/workers/shared_worker_global_scope.h b/third_party/blink/renderer/core/workers/shared_worker_global_scope.h
index 7cb5473..2975046 100644
--- a/third_party/blink/renderer/core/workers/shared_worker_global_scope.h
+++ b/third_party/blink/renderer/core/workers/shared_worker_global_scope.h
@@ -64,12 +64,13 @@
   const AtomicString& InterfaceName() const override;
 
   // WorkerGlobalScope
-  void Initialize(const KURL& response_url,
-                  network::mojom::ReferrerPolicy response_referrer_policy,
-                  network::mojom::IPAddressSpace response_address_space,
-                  const Vector<CSPHeaderAndType>& response_csp_headers,
-                  const Vector<String>* response_origin_trial_tokens,
-                  int64_t appcache_id) override;
+  void Initialize(
+      const KURL& response_url,
+      network::mojom::ReferrerPolicy response_referrer_policy,
+      network::mojom::IPAddressSpace response_address_space,
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
+      const Vector<String>* response_origin_trial_tokens,
+      int64_t appcache_id) override;
   void FetchAndRunClassicScript(
       const KURL& script_url,
       std::unique_ptr<WorkerMainScriptLoadParameters>
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc b/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc
index f0088f3..353aa55 100644
--- a/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc
+++ b/third_party/blink/renderer/core/workers/threaded_worklet_messaging_proxy.cc
@@ -62,7 +62,7 @@
           window->UserAgent(),
           window->GetFrame()->Client()->UserAgentMetadata(),
           window->GetFrame()->Client()->CreateWorkerFetchContext(),
-          csp->Headers(), window->GetReferrerPolicy(),
+          csp->GetParsedPolicies(), window->GetReferrerPolicy(),
           window->GetSecurityOrigin(), window->IsSecureContext(),
           window->GetHttpsState(), worker_clients,
           window->GetFrame()->Client()->CreateWorkerContentSettingsClient(),
diff --git a/third_party/blink/renderer/core/workers/threaded_worklet_test.cc b/third_party/blink/renderer/core/workers/threaded_worklet_test.cc
index 772ae7a5..4cc4b18 100644
--- a/third_party/blink/renderer/core/workers/threaded_worklet_test.cc
+++ b/third_party/blink/renderer/core/workers/threaded_worklet_test.cc
@@ -125,11 +125,12 @@
     EXPECT_TRUE(IsCurrentThread());
 
     // At this point check that the CSP that was set is indeed invalid.
-    ContentSecurityPolicy* csp = GlobalScope()->GetContentSecurityPolicy();
-    EXPECT_EQ(1ul, csp->Headers().size());
-    EXPECT_EQ("invalid-csp", csp->Headers().at(0).first);
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr> csp =
+        GlobalScope()->GetContentSecurityPolicy()->GetParsedPolicies();
+    EXPECT_EQ(1ul, csp.size());
+    EXPECT_EQ("invalid-csp", csp[0]->header->header_value);
     EXPECT_EQ(network::mojom::ContentSecurityPolicyType::kEnforce,
-              csp->Headers().at(0).second);
+              csp[0]->header->type);
 
     PostCrossThreadTask(*GetParentTaskRunnerForTesting(), FROM_HERE,
                         CrossThreadBindOnce(&test::ExitRunLoop));
@@ -208,7 +209,9 @@
                 ->Loader()
                 .UserAgentMetadata(),
             nullptr /* web_worker_fetch_context */,
-            GetExecutionContext()->GetContentSecurityPolicy()->Headers(),
+            GetExecutionContext()
+                ->GetContentSecurityPolicy()
+                ->GetParsedPolicies(),
             GetExecutionContext()->GetReferrerPolicy(),
             GetExecutionContext()->GetSecurityOrigin(),
             GetExecutionContext()->IsSecureContext(),
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.cc b/third_party/blink/renderer/core/workers/worker_global_scope.cc
index d3e0ce62..6d5ddab 100644
--- a/third_party/blink/renderer/core/workers/worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_global_scope.cc
@@ -556,8 +556,8 @@
   https_state_ = CalculateHttpsState(GetSecurityOrigin(),
                                      creation_params->starter_https_state);
 
-  SetOutsideContentSecurityPolicyHeaders(
-      creation_params->outside_content_security_policy_headers);
+  SetOutsideContentSecurityPolicies(
+      std::move(creation_params->outside_content_security_policies));
   SetWorkerSettings(std::move(creation_params->worker_settings));
 
   // TODO(sammc): Require a valid |creation_params->browser_interface_broker|
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.h b/third_party/blink/renderer/core/workers/worker_global_scope.h
index 7826814..c1005886 100644
--- a/third_party/blink/renderer/core/workers/worker_global_scope.h
+++ b/third_party/blink/renderer/core/workers/worker_global_scope.h
@@ -148,7 +148,7 @@
       const KURL& response_url,
       network::mojom::ReferrerPolicy response_referrer_policy,
       network::mojom::IPAddressSpace response_address_space,
-      const Vector<CSPHeaderAndType>& response_csp_headers,
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
       const Vector<String>* response_origin_trial_tokens,
       int64_t appcache_id) = 0;
 
diff --git a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
index d078db7..c51023e9 100644
--- a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.cc
@@ -385,11 +385,8 @@
   content_security_policy->SetSupportsWasmEval(
       SchemeRegistry::SchemeSupportsWasmEvalCSP(
           outside_settings_object.GetSecurityOrigin()->Protocol()));
-  for (const auto& policy_and_type : outside_content_security_policy_headers_) {
-    content_security_policy->DidReceiveHeader(
-        policy_and_type.first, policy_and_type.second,
-        network::mojom::ContentSecurityPolicySource::kHTTP);
-  }
+  content_security_policy->AddPolicies(
+      mojo::Clone(outside_content_security_policies_));
 
   OutsideSettingsCSPDelegate* csp_delegate =
       MakeGarbageCollected<OutsideSettingsCSPDelegate>(outside_settings_object,
@@ -448,24 +445,20 @@
   }
 }
 
-void WorkerOrWorkletGlobalScope::SetOutsideContentSecurityPolicyHeaders(
-    const Vector<CSPHeaderAndType>& headers) {
-  outside_content_security_policy_headers_ = headers;
+void WorkerOrWorkletGlobalScope::SetOutsideContentSecurityPolicies(
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr> policies) {
+  outside_content_security_policies_ = std::move(policies);
 }
 
 void WorkerOrWorkletGlobalScope::InitContentSecurityPolicyFromVector(
-    const Vector<CSPHeaderAndType>& headers) {
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr> policies) {
   if (!GetContentSecurityPolicy()) {
     auto* csp = MakeGarbageCollected<ContentSecurityPolicy>();
     csp->SetSupportsWasmEval(SchemeRegistry::SchemeSupportsWasmEvalCSP(
         GetSecurityOrigin()->Protocol()));
     GetSecurityContext().SetContentSecurityPolicy(csp);
   }
-  for (const auto& policy_and_type : headers) {
-    GetContentSecurityPolicy()->DidReceiveHeader(
-        policy_and_type.first, policy_and_type.second,
-        network::mojom::ContentSecurityPolicySource::kHTTP);
-  }
+  GetContentSecurityPolicy()->AddPolicies(std::move(policies));
 }
 
 void WorkerOrWorkletGlobalScope::BindContentSecurityPolicyToExecutionContext() {
diff --git a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h
index 6da0e6b..49576fd 100644
--- a/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h
+++ b/third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h
@@ -168,10 +168,12 @@
  protected:
   // Sets outside's CSP used for off-main-thread top-level worker script
   // fetch.
-  void SetOutsideContentSecurityPolicyHeaders(const Vector<CSPHeaderAndType>&);
+  void SetOutsideContentSecurityPolicies(
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr>);
 
   // Initializes inside's CSP used for subresource fetch etc.
-  void InitContentSecurityPolicyFromVector(const Vector<CSPHeaderAndType>&);
+  void InitContentSecurityPolicyFromVector(
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr> policies);
   virtual void BindContentSecurityPolicyToExecutionContext();
 
   void FetchModuleScript(const KURL& module_url_record,
@@ -183,8 +185,9 @@
                          ModuleScriptCustomFetchType,
                          ModuleTreeClient*);
 
-  const Vector<CSPHeaderAndType>& OutsideContentSecurityPolicyHeaders() const {
-    return outside_content_security_policy_headers_;
+  const Vector<network::mojom::blink::ContentSecurityPolicyPtr>&
+  OutsideContentSecurityPolicies() const {
+    return outside_content_security_policies_;
   }
 
   void SetIsOfflineMode(bool is_offline_mode) {
@@ -243,7 +246,8 @@
 
   // TODO(hiroshige): Pass outsideSettings-CSP via
   // outsideSettings-FetchClientSettingsObject.
-  Vector<CSPHeaderAndType> outside_content_security_policy_headers_;
+  Vector<network::mojom::blink::ContentSecurityPolicyPtr>
+      outside_content_security_policies_;
 
   WorkerReportingProxy& reporting_proxy_;
 
diff --git a/third_party/blink/renderer/core/workers/worker_thread.cc b/third_party/blink/renderer/core/workers/worker_thread.cc
index 2e66c480..6aa4b2b 100644
--- a/third_party/blink/renderer/core/workers/worker_thread.cc
+++ b/third_party/blink/renderer/core/workers/worker_thread.cc
@@ -45,6 +45,7 @@
 #include "third_party/blink/renderer/core/inspector/worker_thread_debugger.h"
 #include "third_party/blink/renderer/core/loader/worker_resource_timing_notifier_impl.h"
 #include "third_party/blink/renderer/core/probe/core_probes.h"
+#include "third_party/blink/renderer/core/workers/cross_thread_global_scope_creation_params_copier.h"
 #include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
 #include "third_party/blink/renderer/core/workers/worker_backing_thread.h"
 #include "third_party/blink/renderer/core/workers/worker_clients.h"
diff --git a/third_party/blink/renderer/core/workers/worker_thread_test.cc b/third_party/blink/renderer/core/workers/worker_thread_test.cc
index b59483cc..53385b70 100644
--- a/third_party/blink/renderer/core/workers/worker_thread_test.cc
+++ b/third_party/blink/renderer/core/workers/worker_thread_test.cc
@@ -380,15 +380,12 @@
   EXPECT_CALL(*reporting_proxy_, WillDestroyWorkerGlobalScope()).Times(1);
   EXPECT_CALL(*reporting_proxy_, DidTerminateWorkerThread()).Times(1);
 
-  Vector<CSPHeaderAndType> headers{
-      {"contentSecurityPolicy",
-       network::mojom::ContentSecurityPolicyType::kReport}};
-
   auto global_scope_creation_params =
       std::make_unique<GlobalScopeCreationParams>(
           KURL("http://fake.url/"), mojom::blink::ScriptType::kClassic,
           "fake global scope name", "fake user agent", UserAgentMetadata(),
-          nullptr /* web_worker_fetch_context */, headers,
+          nullptr /* web_worker_fetch_context */,
+          Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
           network::mojom::ReferrerPolicy::kDefault, security_origin_.get(),
           false /* starter_secure_context */,
           CalculateHttpsState(security_origin_.get()),
diff --git a/third_party/blink/renderer/core/workers/worker_thread_test_helper.h b/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
index 1be5295..b5da6ef 100644
--- a/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
+++ b/third_party/blink/renderer/core/workers/worker_thread_test_helper.h
@@ -62,19 +62,20 @@
   }
 
   // WorkerGlobalScope
-  void Initialize(const KURL& response_url,
-                  network::mojom::ReferrerPolicy response_referrer_policy,
-                  network::mojom::IPAddressSpace response_address_space,
-                  const Vector<CSPHeaderAndType>& response_csp_headers,
-                  const Vector<String>* response_origin_trial_tokens,
-                  int64_t appcache_id) override {
+  void Initialize(
+      const KURL& response_url,
+      network::mojom::ReferrerPolicy response_referrer_policy,
+      network::mojom::IPAddressSpace response_address_space,
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
+      const Vector<String>* response_origin_trial_tokens,
+      int64_t appcache_id) override {
     InitializeURL(response_url);
     SetReferrerPolicy(response_referrer_policy);
     SetAddressSpace(response_address_space);
 
     // These should be called after SetAddressSpace() to correctly override the
     // address space by the "treat-as-public-address" CSP directive.
-    InitContentSecurityPolicyFromVector(response_csp_headers);
+    InitContentSecurityPolicyFromVector(std::move(response_csp));
     BindContentSecurityPolicyToExecutionContext();
 
     OriginTrialContext::AddTokens(this, response_origin_trial_tokens);
@@ -136,13 +137,11 @@
                            const String& source,
                            const KURL& script_url = KURL("http://fake.url/"),
                            WorkerClients* worker_clients = nullptr) {
-    Vector<CSPHeaderAndType> headers{
-        {"contentSecurityPolicy",
-         network::mojom::ContentSecurityPolicyType::kReport}};
     auto creation_params = std::make_unique<GlobalScopeCreationParams>(
         script_url, mojom::blink::ScriptType::kClassic,
         "fake global scope name", "fake user agent", UserAgentMetadata(),
-        nullptr /* web_worker_fetch_context */, headers,
+        nullptr /* web_worker_fetch_context */,
+        Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
         network::mojom::ReferrerPolicy::kDefault, security_origin,
         false /* starter_secure_context */,
         CalculateHttpsState(security_origin), worker_clients,
diff --git a/third_party/blink/renderer/core/workers/worklet_global_scope.cc b/third_party/blink/renderer/core/workers/worklet_global_scope.cc
index d35d4941b..b06919c 100644
--- a/third_party/blink/renderer/core/workers/worklet_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worklet_global_scope.cc
@@ -113,14 +113,14 @@
   // Step 5: "Let inheritedReferrerPolicy be outsideSettings's referrer policy."
   SetReferrerPolicy(creation_params->referrer_policy);
 
-  SetOutsideContentSecurityPolicyHeaders(
-      creation_params->outside_content_security_policy_headers);
+  SetOutsideContentSecurityPolicies(
+      mojo::Clone(creation_params->outside_content_security_policies));
 
   // https://drafts.css-houdini.org/worklets/#creating-a-workletglobalscope
   // Step 6: "Invoke the initialize a global object's CSP list algorithm given
   // workletGlobalScope."
   InitContentSecurityPolicyFromVector(
-      creation_params->outside_content_security_policy_headers);
+      std::move(creation_params->outside_content_security_policies));
   BindContentSecurityPolicyToExecutionContext();
 
   OriginTrialContext::AddTokens(this,
diff --git a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
index 41ea2463..7adc288 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_layout_object.cc
@@ -1239,7 +1239,8 @@
     return nullptr;
   // Returns previous object of parent, since next of |ax_object| isn't appeared
   // on line.
-  return ax_object.ParentObjectIncludedInTree()->PreviousOnLine();
+  AXObject* included_parent = ax_object.ParentObjectIncludedInTree();
+  return included_parent ? included_parent->PreviousOnLine() : nullptr;
 }
 
 AXObject* AXLayoutObject::PreviousOnLine() const {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_menu_list_option.h b/third_party/blink/renderer/modules/accessibility/ax_menu_list_option.h
index 93aff6c..52b474d 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_menu_list_option.h
+++ b/third_party/blink/renderer/modules/accessibility/ax_menu_list_option.h
@@ -40,9 +40,9 @@
   ~AXMenuListOption() override;
   bool IsDetached() const override { return !element_; }
 
- private:
   void Trace(Visitor*) const override;
 
+ private:
   bool IsMenuListOption() const override { return true; }
 
   Node* GetNode() const override { return element_; }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_sparse_attribute_setter.cc b/third_party/blink/renderer/modules/accessibility/ax_sparse_attribute_setter.cc
index 5eb5dc73..87b117a 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_sparse_attribute_setter.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_sparse_attribute_setter.cc
@@ -146,6 +146,10 @@
             &SetStringAttribute,
             ax::mojom::blink::StringAttribute::kRoleDescription));
     ax_sparse_setter_map.Set(
+        html_names::kAriaTouchpassthroughAttr,
+        WTF::BindRepeating(&SetBoolAttribute,
+                           ax::mojom::blink::BoolAttribute::kTouchPassthrough));
+    ax_sparse_setter_map.Set(
         html_names::kAriaKeyshortcutsAttr,
         WTF::BindRepeating(&SetStringAttribute,
                            ax::mojom::blink::StringAttribute::kKeyShortcuts));
diff --git a/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.cc b/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.cc
index 989d6a8..44b70e79 100644
--- a/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.cc
+++ b/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.cc
@@ -65,6 +65,8 @@
       const CompositorPaintWorkletInput* compositor_input,
       const CompositorPaintWorkletJob::AnimatedPropertyValues&
           animated_property_values) override {
+    if (animated_property_values.empty())
+      return nullptr;
     const BackgroundColorPaintWorkletInput* input =
         static_cast<const BackgroundColorPaintWorkletInput*>(compositor_input);
     FloatSize container_size = input->ContainerSize();
@@ -255,4 +257,18 @@
   return success;
 }
 
+sk_sp<PaintRecord> BackgroundColorPaintWorklet::ProxyClientPaintForTest() {
+  FloatSize container_size(100, 100);
+  Vector<Color> animated_colors = {Color(0, 255, 0), Color(255, 0, 0)};
+  Vector<double> offsets = {0, 1};
+  CompositorPaintWorkletInput::PropertyKeys property_keys;
+  scoped_refptr<BackgroundColorPaintWorkletInput> input =
+      base::MakeRefCounted<BackgroundColorPaintWorkletInput>(
+          container_size, 1u, animated_colors, offsets, property_keys);
+  CompositorPaintWorkletJob::AnimatedPropertyValues property_values;
+  BackgroundColorPaintWorkletProxyClient* client =
+      BackgroundColorPaintWorkletProxyClient::Create(1u);
+  return client->Paint(input.get(), property_values);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.h b/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.h
index fa3f3f2..3497f6cd1 100644
--- a/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.h
+++ b/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet.h
@@ -42,6 +42,9 @@
   static bool GetBGColorPaintWorkletParams(Node* node,
                                            Vector<Color>* animated_colors,
                                            Vector<double>* offsets);
+
+  // For testing purpose only.
+  static sk_sp<cc::PaintRecord> ProxyClientPaintForTest();
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet_test.cc b/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet_test.cc
index 99f445d5..7dbfe6d 100644
--- a/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet_test.cc
+++ b/third_party/blink/renderer/modules/csspaint/background_color_paint_worklet_test.cc
@@ -143,4 +143,11 @@
       element, &animated_colors, &offsets));
 }
 
+// Test that calling BackgroundColorPaintWorkletProxyClient::Paint won't crash
+// when the animated property value is empty.
+TEST_F(BackgroundColorPaintWorkletTest, ProxyClientPaintNoCrash) {
+  ScopedCompositeBGColorAnimationForTest composite_bgcolor_animation(true);
+  BackgroundColorPaintWorklet::ProxyClientPaintForTest();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
index 94e28e9..13ee92bde 100644
--- a/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
+++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_global_scope_proxy.cc
@@ -41,7 +41,7 @@
       window->Url(), mojom::blink::ScriptType::kModule, global_scope_name,
       window->UserAgent(), frame->Client()->UserAgentMetadata(),
       frame->Client()->CreateWorkerFetchContext(),
-      window->GetContentSecurityPolicy()->Headers(),
+      window->GetContentSecurityPolicy()->GetParsedPolicies(),
       window->GetReferrerPolicy(), window->GetSecurityOrigin(),
       window->IsSecureContext(), window->GetHttpsState(),
       nullptr /* worker_clients */,
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_messaging_proxy.h b/third_party/blink/renderer/modules/csspaint/paint_worklet_messaging_proxy.h
index a564699..fcfdec2a 100644
--- a/third_party/blink/renderer/modules/csspaint/paint_worklet_messaging_proxy.h
+++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_messaging_proxy.h
@@ -20,12 +20,11 @@
 class PaintWorkletMessagingProxy final : public ThreadedWorkletMessagingProxy {
  public:
   explicit PaintWorkletMessagingProxy(ExecutionContext*);
+  ~PaintWorkletMessagingProxy() override;
 
   void Trace(Visitor*) const override;
 
  private:
-  ~PaintWorkletMessagingProxy() override;
-
   std::unique_ptr<WorkerThread> CreateWorkerThread() override;
 };
 
diff --git a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
index 17e4028..3a6b6df 100644
--- a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
+++ b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
@@ -214,9 +214,10 @@
       worker_start_data->script_url, worker_start_data->script_type,
       global_scope_name, worker_start_data->user_agent,
       worker_start_data->ua_metadata, std::move(web_worker_fetch_context),
-      Vector<CSPHeaderAndType>(), network::mojom::ReferrerPolicy::kDefault,
-      starter_origin.get(), starter_secure_context, starter_https_state,
-      nullptr /* worker_clients */, std::move(content_settings_proxy),
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
+      network::mojom::ReferrerPolicy::kDefault, starter_origin.get(),
+      starter_secure_context, starter_https_state, nullptr /* worker_clients */,
+      std::move(content_settings_proxy),
       base::nullopt /* response_address_space */,
       nullptr /* OriginTrialTokens */, worker_start_data->devtools_worker_token,
       std::move(worker_settings),
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_track_processor.h b/third_party/blink/renderer/modules/mediastream/media_stream_track_processor.h
index 1c93bf1..41eadea 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_track_processor.h
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_track_processor.h
@@ -8,7 +8,7 @@
 #include "third_party/blink/renderer/modules/mediastream/media_stream_track.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
-#include "third_party/blink/renderer/platform/heap/impl/heap.h"
+#include "third_party/blink/renderer/platform/heap/heap.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/modules/peerconnection/adapters/dtls_transport_proxy.h b/third_party/blink/renderer/modules/peerconnection/adapters/dtls_transport_proxy.h
index 09da798..afc0d8c1b 100644
--- a/third_party/blink/renderer/modules/peerconnection/adapters/dtls_transport_proxy.h
+++ b/third_party/blink/renderer/modules/peerconnection/adapters/dtls_transport_proxy.h
@@ -6,7 +6,9 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/single_thread_task_runner.h"
+#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
+#include "third_party/blink/renderer/platform/heap/visitor.h"
 #include "third_party/webrtc/api/dtls_transport_interface.h"
 
 // The DtlsTransportProxy class takes care of thread-jumping when
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.cc
index c6f30c3..2caca05 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.cc
@@ -7,6 +7,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h"
 #include "third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h"
+#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h"
 #include "third_party/blink/renderer/platform/bindings/exception_code.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.cc
index 63f012e..ade8bb7 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.cc
@@ -7,6 +7,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h"
 #include "third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.h"
 #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h"
+#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h"
 #include "third_party/blink/renderer/platform/bindings/exception_code.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/webrtc/api/frame_transformer_interface.h"
diff --git a/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc b/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc
index 9861aa6b..b0e6a5c 100644
--- a/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc
+++ b/third_party/blink/renderer/modules/service_worker/fetch_respond_with_observer.cc
@@ -7,12 +7,10 @@
 #include <memory>
 #include <utility>
 
-#include "base/feature_list.h"
 #include "base/macros.h"
 #include "base/metrics/histogram_macros.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
-#include "services/network/public/cpp/features.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink-forward.h"
@@ -295,28 +293,24 @@
 
   // If Cross-Origin-Embedder-Policy is set to require-corp,
   // Cross-Origin-Resource-Policy verification should happen before passing the
-  // response to the client.
-  if (base::FeatureList::IsEnabled(
-          network::features::kCrossOriginEmbedderPolicy)) {
-    // The service worker script must be in the same origin with the requestor,
-    // which is a client of the service worker.
-    //
-    // Here is in the renderer and we don't have a "trustworthy" initiator.
-    // Hence we provide |initiator_origin| as |request_initiator_origin_lock|.
-    auto initiator_origin =
-        url::Origin::Create(GURL(service_worker_global_scope->Url()));
-    // |corp_checker_| could be nullptr when the request is for a main resource
-    // or the connection to the client which initiated the request is broken.
-    // CORP check isn't needed in both cases because a service worker should be
-    // in the same origin with the main resource, and the response to the broken
-    // connection won't reach to the client.
-    if (corp_checker_ &&
-        corp_checker_->IsBlocked(
-            url::Origin::Create(GURL(service_worker_global_scope->Url())),
-            request_mode_, request_destination_, *response)) {
-      OnResponseRejected(ServiceWorkerResponseError::kDisallowedByCorp);
-      return;
-    }
+  // response to the client. The service worker script must be in the same
+  // origin with the requestor, which is a client of the service worker.
+  //
+  // Here is in the renderer and we don't have a "trustworthy" initiator.
+  // Hence we provide |initiator_origin| as |request_initiator_origin_lock|.
+  auto initiator_origin =
+      url::Origin::Create(GURL(service_worker_global_scope->Url()));
+  // |corp_checker_| could be nullptr when the request is for a main resource
+  // or the connection to the client which initiated the request is broken.
+  // CORP check isn't needed in both cases because a service worker should be
+  // in the same origin with the main resource, and the response to the broken
+  // connection won't reach to the client.
+  if (corp_checker_ &&
+      corp_checker_->IsBlocked(
+          url::Origin::Create(GURL(service_worker_global_scope->Url())),
+          request_mode_, request_destination_, *response)) {
+    OnResponseRejected(ServiceWorkerResponseError::kDisallowedByCorp);
+    return;
   }
 
   BodyStreamBuffer* buffer = response->InternalBodyBuffer();
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
index dcb01a87..c3a0f56 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
@@ -209,7 +209,7 @@
                                        creation_params->script_url)) {
     // CSP headers, referrer policy, and origin trial tokens will be provided by
     // the InstalledScriptsManager in EvaluateClassicScript().
-    DCHECK(creation_params->outside_content_security_policy_headers.IsEmpty());
+    DCHECK(creation_params->outside_content_security_policies.IsEmpty());
     DCHECK_EQ(network::mojom::ReferrerPolicy::kDefault,
               creation_params->referrer_policy);
     DCHECK(creation_params->origin_trial_tokens->IsEmpty());
@@ -466,8 +466,9 @@
       classic_script_loader->ResponseURL(), referrer_policy,
       classic_script_loader->ResponseAddressSpace(),
       classic_script_loader->GetContentSecurityPolicy()
-          ? classic_script_loader->GetContentSecurityPolicy()->Headers()
-          : Vector<CSPHeaderAndType>(),
+          ? classic_script_loader->GetContentSecurityPolicy()
+                ->GetParsedPolicies()
+          : Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
       classic_script_loader->OriginTrialTokens(),
       classic_script_loader->SourceText(),
       classic_script_loader->ReleaseCachedMetadata(), stack_id);
@@ -478,7 +479,7 @@
     const KURL& response_url,
     network::mojom::ReferrerPolicy response_referrer_policy,
     network::mojom::IPAddressSpace response_address_space,
-    const Vector<CSPHeaderAndType>& response_csp_headers,
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
     const Vector<String>* response_origin_trial_tokens,
     int64_t appcache_id) {
   // Step 4.5. "Set workerGlobalScope's url to serviceWorker's script url."
@@ -508,7 +509,7 @@
   //
   // These should be called after SetAddressSpace() to correctly override the
   // address space by the "treat-as-public-address" CSP directive.
-  InitContentSecurityPolicyFromVector(response_csp_headers);
+  InitContentSecurityPolicyFromVector(std::move(response_csp));
   BindContentSecurityPolicyToExecutionContext();
 
   OriginTrialContext::AddTokens(this, response_origin_trial_tokens);
@@ -551,16 +552,10 @@
         kDoNotSupportReferrerPolicyLegacyKeywords, &referrer_policy);
   }
 
-  // Construct a ContentSecurityPolicy object to convert
-  // ContentSecurityPolicyResponseHeaders to CSPHeaderAndType.
-  // TODO(nhiroki): Find an efficient way to do this.
-  auto* content_security_policy = MakeGarbageCollected<ContentSecurityPolicy>();
-  content_security_policy->DidReceiveHeaders(
-      script_data->GetContentSecurityPolicyResponseHeaders());
-
   RunClassicScript(
       script_url, referrer_policy, script_data->GetResponseAddressSpace(),
-      content_security_policy->Headers(),
+      ContentSecurityPolicy::ParseHeaders(
+          script_data->GetContentSecurityPolicyResponseHeaders()),
       script_data->CreateOriginTrialTokens().get(),
       script_data->TakeSourceText(), script_data->TakeMetaData(), stack_id);
 }
@@ -570,14 +565,14 @@
     const KURL& response_url,
     network::mojom::ReferrerPolicy response_referrer_policy,
     network::mojom::IPAddressSpace response_address_space,
-    const Vector<CSPHeaderAndType> response_csp_headers,
+    Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
     const Vector<String>* response_origin_trial_tokens,
     const String& source_code,
     std::unique_ptr<Vector<uint8_t>> cached_meta_data,
     const v8_inspector::V8StackTraceId& stack_id) {
   // Step 4.5-4.11 are implemented in Initialize().
   Initialize(response_url, response_referrer_policy, response_address_space,
-             response_csp_headers, response_origin_trial_tokens,
+             std::move(response_csp), response_origin_trial_tokens,
              mojom::blink::kAppCacheNoCacheId);
 
   // Step 4.12. "Let evaluationStatus be the result of running the classic
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
index 931a4a3..d345f83 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
@@ -113,12 +113,13 @@
   bool ShouldInstallV8Extensions() const final;
 
   // Implements WorkerGlobalScope:
-  void Initialize(const KURL& response_url,
-                  network::mojom::ReferrerPolicy response_referrer_policy,
-                  network::mojom::IPAddressSpace response_address_space,
-                  const Vector<CSPHeaderAndType>& response_csp_headers,
-                  const Vector<String>* response_origin_trial_tokens,
-                  int64_t appcache_id) override;
+  void Initialize(
+      const KURL& response_url,
+      network::mojom::ReferrerPolicy response_referrer_policy,
+      network::mojom::IPAddressSpace response_address_space,
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
+      const Vector<String>* response_origin_trial_tokens,
+      int64_t appcache_id) override;
   // Fetches and runs the top-level classic worker script.
   void FetchAndRunClassicScript(
       const KURL& script_url,
@@ -354,14 +355,15 @@
       const v8_inspector::V8StackTraceId& stack_id);
 
   // https://w3c.github.io/ServiceWorker/#run-service-worker-algorithm
-  void RunClassicScript(const KURL& response_url,
-                        network::mojom::ReferrerPolicy response_referrer_policy,
-                        network::mojom::IPAddressSpace response_address_space,
-                        const Vector<CSPHeaderAndType> response_csp_headers,
-                        const Vector<String>* response_origin_trial_tokens,
-                        const String& source_code,
-                        std::unique_ptr<Vector<uint8_t>> cached_meta_data,
-                        const v8_inspector::V8StackTraceId&);
+  void RunClassicScript(
+      const KURL& response_url,
+      network::mojom::ReferrerPolicy response_referrer_policy,
+      network::mojom::IPAddressSpace response_address_space,
+      Vector<network::mojom::blink::ContentSecurityPolicyPtr> response_csp,
+      const Vector<String>* response_origin_trial_tokens,
+      const String& source_code,
+      std::unique_ptr<Vector<uint8_t>> cached_meta_data,
+      const v8_inspector::V8StackTraceId&);
 
   // Counts the |script_size| and |cached_metadata_size| for UMA to measure the
   // number of scripts and the total bytes of scripts.
diff --git a/third_party/blink/renderer/modules/shapedetection/face_detector.h b/third_party/blink/renderer/modules/shapedetection/face_detector.h
index 111471d..5938516 100644
--- a/third_party/blink/renderer/modules/shapedetection/face_detector.h
+++ b/third_party/blink/renderer/modules/shapedetection/face_detector.h
@@ -26,12 +26,11 @@
   static FaceDetector* Create(ExecutionContext*, const FaceDetectorOptions*);
 
   FaceDetector(ExecutionContext*, const FaceDetectorOptions*);
+  ~FaceDetector() override = default;
 
   void Trace(Visitor*) const override;
 
  private:
-  ~FaceDetector() override = default;
-
   ScriptPromise DoDetect(ScriptPromiseResolver*, SkBitmap) override;
   void OnDetectFaces(
       ScriptPromiseResolver*,
diff --git a/third_party/blink/renderer/modules/shapedetection/text_detector.h b/third_party/blink/renderer/modules/shapedetection/text_detector.h
index 2bed20a0..7213528 100644
--- a/third_party/blink/renderer/modules/shapedetection/text_detector.h
+++ b/third_party/blink/renderer/modules/shapedetection/text_detector.h
@@ -25,12 +25,11 @@
   static TextDetector* Create(ExecutionContext*);
 
   explicit TextDetector(ExecutionContext*);
+  ~TextDetector() override = default;
 
   void Trace(Visitor*) const override;
 
  private:
-  ~TextDetector() override = default;
-
   ScriptPromise DoDetect(ScriptPromiseResolver*, SkBitmap) override;
   void OnDetectText(
       ScriptPromiseResolver*,
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc b/third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc
index d58924ebe..1e357b4b 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_global_scope_test.cc
@@ -81,7 +81,8 @@
             window->Url(), mojom::blink::ScriptType::kModule, "AudioWorklet",
             window->UserAgent(),
             window->GetFrame()->Loader().UserAgentMetadata(),
-            nullptr /* web_worker_fetch_context */, Vector<CSPHeaderAndType>(),
+            nullptr /* web_worker_fetch_context */,
+            Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
             window->GetReferrerPolicy(), window->GetSecurityOrigin(),
             window->IsSecureContext(), window->GetHttpsState(),
             nullptr /* worker_clients */, nullptr /* content_settings_client */,
diff --git a/third_party/blink/renderer/modules/webaudio/audio_worklet_thread_test.cc b/third_party/blink/renderer/modules/webaudio/audio_worklet_thread_test.cc
index f2c7832..ee611387 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_worklet_thread_test.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_worklet_thread_test.cc
@@ -99,7 +99,8 @@
             window->Url(), mojom::blink::ScriptType::kModule, "AudioWorklet",
             window->UserAgent(),
             window->GetFrame()->Loader().UserAgentMetadata(),
-            nullptr /* web_worker_fetch_context */, Vector<CSPHeaderAndType>(),
+            nullptr /* web_worker_fetch_context */,
+            Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
             window->GetReferrerPolicy(), window->GetSecurityOrigin(),
             window->IsSecureContext(), window->GetHttpsState(),
             nullptr /* worker_clients */, nullptr /* content_settings_client */,
diff --git a/third_party/blink/renderer/modules/webcodecs/codec_logger.h b/third_party/blink/renderer/modules/webcodecs/codec_logger.h
index 366f75d..6a19b89 100644
--- a/third_party/blink/renderer/modules/webcodecs/codec_logger.h
+++ b/third_party/blink/renderer/modules/webcodecs/codec_logger.h
@@ -12,6 +12,10 @@
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 
+namespace base {
+class SingleThreadTaskRunner;
+}  // namespace base
+
 namespace blink {
 
 class ExecutionContext;
diff --git a/third_party/blink/renderer/modules/websockets/dom_websocket.cc b/third_party/blink/renderer/modules/websockets/dom_websocket.cc
index 07fb2b4..56ac920 100644
--- a/third_party/blink/renderer/modules/websockets/dom_websocket.cc
+++ b/third_party/blink/renderer/modules/websockets/dom_websocket.cc
@@ -78,9 +78,7 @@
 DOMWebSocket::EventQueue::EventQueue(EventTarget* target)
     : state_(kActive), target_(target) {}
 
-DOMWebSocket::EventQueue::~EventQueue() {
-  ContextDestroyed();
-}
+DOMWebSocket::EventQueue::~EventQueue() = default;
 
 void DOMWebSocket::EventQueue::Dispatch(Event* event) {
   switch (state_) {
diff --git a/third_party/blink/renderer/modules/websockets/dom_websocket_test.cc b/third_party/blink/renderer/modules/websockets/dom_websocket_test.cc
index 981b6da..e05a0a3 100644
--- a/third_party/blink/renderer/modules/websockets/dom_websocket_test.cc
+++ b/third_party/blink/renderer/modules/websockets/dom_websocket_test.cc
@@ -23,6 +23,7 @@
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
+#include "third_party/blink/renderer/platform/heap/impl/thread_state.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
@@ -906,6 +907,32 @@
     DOMWebSocketInvalidClosingCodeTest,
     testing::Values(0, 1, 998, 999, 1001, 2999, 5000, 9999, 65535));
 
+TEST(DOMWebSocketTest, GCWhileEventsPending) {
+  V8TestingScope scope;
+  {
+    DOMWebSocketTestScope websocket_scope(scope.GetExecutionContext());
+
+    EXPECT_CALL(websocket_scope.Channel(),
+                Connect(KURL("ws://example.com/"), String()))
+        .WillOnce(Return(true));
+    EXPECT_CALL(websocket_scope.Channel(), Disconnect());
+
+    auto& socket = websocket_scope.Socket();
+
+    // Cause events to be queued rather than fired.
+    socket.ContextLifecycleStateChanged(mojom::FrameLifecycleState::kPaused);
+
+    socket.Connect("ws://example.com/", Vector<String>(), ASSERT_NO_EXCEPTION);
+    socket.DidError();
+    socket.DidClose(DOMWebSocket::kClosingHandshakeIncomplete, 1006, "");
+
+    // Stop HasPendingActivity() from keeping the object alive.
+    socket.SetExecutionContext(nullptr);
+  }
+
+  ThreadState::Current()->CollectAllGarbageForTesting();
+}
+
 }  // namespace
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc
index 9a802ff..4f023d2 100644
--- a/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc
+++ b/third_party/blink/renderer/modules/worklet/worklet_thread_test_common.cc
@@ -32,7 +32,8 @@
       std::make_unique<GlobalScopeCreationParams>(
           window->Url(), mojom::blink::ScriptType::kModule, "Worklet",
           window->UserAgent(), window->GetFrame()->Loader().UserAgentMetadata(),
-          nullptr /* web_worker_fetch_context */, Vector<CSPHeaderAndType>(),
+          nullptr /* web_worker_fetch_context */,
+          Vector<network::mojom::blink::ContentSecurityPolicyPtr>(),
           window->GetReferrerPolicy(), window->GetSecurityOrigin(),
           window->IsSecureContext(), window->GetHttpsState(), clients,
           nullptr /* content_settings_client */, window->AddressSpace(),
diff --git a/third_party/blink/renderer/modules/xr/xr_session.cc b/third_party/blink/renderer/modules/xr/xr_session.cc
index 7a9ecd13..a320965 100644
--- a/third_party/blink/renderer/modules/xr/xr_session.cc
+++ b/third_party/blink/renderer/modules/xr/xr_session.cc
@@ -33,6 +33,7 @@
 #include "third_party/blink/renderer/modules/xr/xr_anchor_set.h"
 #include "third_party/blink/renderer/modules/xr/xr_bounded_reference_space.h"
 #include "third_party/blink/renderer/modules/xr/xr_canvas_input_provider.h"
+#include "third_party/blink/renderer/modules/xr/xr_cube_map.h"
 #include "third_party/blink/renderer/modules/xr/xr_depth_information.h"
 #include "third_party/blink/renderer/modules/xr/xr_depth_manager.h"
 #include "third_party/blink/renderer/modules/xr/xr_dom_overlay_state.h"
diff --git a/third_party/blink/renderer/modules/xr/xr_system.cc b/third_party/blink/renderer/modules/xr/xr_system.cc
index 611ed74..0716ffd3 100644
--- a/third_party/blink/renderer/modules/xr/xr_system.cc
+++ b/third_party/blink/renderer/modules/xr/xr_system.cc
@@ -31,6 +31,7 @@
 #include "third_party/blink/renderer/modules/event_target_modules.h"
 #include "third_party/blink/renderer/modules/xr/xr_frame_provider.h"
 #include "third_party/blink/renderer/modules/xr/xr_session.h"
+#include "third_party/blink/renderer/modules/xr/xr_session_viewport_scaler.h"
 #include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h"
 #include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
index 307c8d1..7b3fda4 100644
--- a/third_party/blink/renderer/platform/BUILD.gn
+++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -1958,6 +1958,7 @@
     "fonts/orientation_iterator_test.cc",
     "fonts/script_run_iterator_test.cc",
     "fonts/shaping/caching_word_shaper_test.cc",
+    "fonts/shaping/font_features_test.cc",
     "fonts/shaping/harfbuzz_shaper_test.cc",
     "fonts/shaping/run_segmenter_test.cc",
     "fonts/shaping/shape_result_bloberizer_test.cc",
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
index 0af32b7..a4106fc 100644
--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -105,6 +105,10 @@
   RuntimeEnabledFeatures::SetAccelerated2dCanvasEnabled(enable);
 }
 
+void WebRuntimeFeatures::EnableAccessibilityAriaVirtualContent(bool enable) {
+  RuntimeEnabledFeatures::SetAccessibilityAriaVirtualContentEnabled(enable);
+}
+
 void WebRuntimeFeatures::EnableAccessibilityExposeDisplayNone(bool enable) {
   RuntimeEnabledFeatures::SetAccessibilityExposeDisplayNoneEnabled(enable);
 }
diff --git a/third_party/blink/renderer/platform/fonts/shaping/font_features.cc b/third_party/blink/renderer/platform/fonts/shaping/font_features.cc
index 71244ca..99ae1df8 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/font_features.cc
+++ b/third_party/blink/renderer/platform/fonts/shaping/font_features.cc
@@ -24,9 +24,17 @@
 
 }  // namespace
 
-void FontFeatures::Initialize(const Font& font) {
+base::Optional<unsigned> FontFeatures::FindValueForTesting(hb_tag_t tag) const {
+  for (const hb_feature_t& feature : features_) {
+    if (feature.tag == tag)
+      return feature.value;
+  }
+  return base::nullopt;
+}
+
+void FontFeatures::Initialize(const FontDescription& description) {
   DCHECK(IsEmpty());
-  const FontDescription& description = font.GetFontDescription();
+  const bool is_horizontal = !description.IsVerticalAnyUpright();
 
   constexpr hb_feature_t no_kern = CreateFeature('k', 'e', 'r', 'n');
   constexpr hb_feature_t no_vkrn = CreateFeature('v', 'k', 'r', 'n');
@@ -35,7 +43,7 @@
       // kern/vkrn are enabled by default in HarfBuzz
       break;
     case FontDescription::kNoneKerning:
-      Append(description.IsVerticalAnyUpright() ? no_vkrn : no_kern);
+      Append(is_horizontal ? no_kern : no_vkrn);
       break;
     case FontDescription::kAutoKerning:
       break;
@@ -186,16 +194,34 @@
       FontVariantNumeric::kSlashedZeroOn)
     Append(zero);
 
-  FontFeatureSettings* settings = description.FeatureSettings();
-  if (!settings)
-    return;
+  const hb_tag_t chws_or_vchw =
+      is_horizontal ? HB_TAG('c', 'h', 'w', 's') : HB_TAG('v', 'c', 'h', 'w');
+  bool default_enable_chws = true;
 
-  // TODO(drott): crbug.com/450619 Implement feature resolution instead of
-  // just appending the font-feature-settings.
-  for (const FontFeature& setting : *settings) {
-    const hb_feature_t feature = CreateFeature(setting.Tag(), setting.Value());
-    Append(feature);
+  const FontFeatureSettings* settings = description.FeatureSettings();
+  if (UNLIKELY(settings)) {
+    // TODO(drott): crbug.com/450619 Implement feature resolution instead of
+    // just appending the font-feature-settings.
+    const hb_tag_t halt_or_vhal =
+        is_horizontal ? HB_TAG('h', 'a', 'l', 't') : HB_TAG('v', 'h', 'a', 'l');
+    const hb_tag_t palt_or_vpal =
+        is_horizontal ? HB_TAG('p', 'a', 'l', 't') : HB_TAG('v', 'p', 'a', 'l');
+    for (const FontFeature& setting : *settings) {
+      const hb_feature_t feature =
+          CreateFeature(setting.Tag(), setting.Value());
+      Append(feature);
+
+      // `chws` should not be appended if other glyph-width GPOS feature exists.
+      if (default_enable_chws &&
+          (feature.tag == chws_or_vchw ||
+           (feature.value &&
+            (feature.tag == halt_or_vhal || feature.tag == palt_or_vpal))))
+        default_enable_chws = false;
+    }
   }
+
+  if (default_enable_chws)
+    Append(CreateFeature(chws_or_vchw, 1));
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/fonts/shaping/font_features.h b/third_party/blink/renderer/platform/fonts/shaping/font_features.h
index e67b7b15..e341118 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/font_features.h
+++ b/third_party/blink/renderer/platform/fonts/shaping/font_features.h
@@ -7,26 +7,30 @@
 
 #include <hb.h>
 
+#include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace blink {
 
 class Font;
+class FontDescription;
 
 // Represents a list of OpenType font feature settings.
-class FontFeatures {
+class PLATFORM_EXPORT FontFeatures {
   STACK_ALLOCATED();
 
  public:
   // Initialize the list from |Font|.
-  void Initialize(const Font&);
+  void Initialize(const FontDescription&);
 
   wtf_size_t size() const { return features_.size(); }
   bool IsEmpty() const { return features_.IsEmpty(); }
 
   const hb_feature_t* data() const { return features_.data(); }
 
+  base::Optional<unsigned> FindValueForTesting(hb_tag_t tag) const;
+
   void Append(const hb_feature_t& feature) { features_.push_back(feature); }
   void Insert(const hb_feature_t& feature) { features_.push_front(feature); }
 
diff --git a/third_party/blink/renderer/platform/fonts/shaping/font_features_test.cc b/third_party/blink/renderer/platform/fonts/shaping/font_features_test.cc
new file mode 100644
index 0000000..200cbb34
--- /dev/null
+++ b/third_party/blink/renderer/platform/fonts/shaping/font_features_test.cc
@@ -0,0 +1,122 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/platform/fonts/shaping/font_features.h"
+
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/renderer/platform/fonts/font_description.h"
+
+namespace blink {
+
+namespace {
+
+class FontFeaturesTest : public testing::Test {};
+
+static const FontOrientation orientations[] = {
+    FontOrientation::kHorizontal,
+    FontOrientation::kVerticalRotated,
+    FontOrientation::kVerticalMixed,
+    FontOrientation::kVerticalUpright,
+};
+
+class FontFeaturesByOrientationTest
+    : public FontFeaturesTest,
+      public testing::WithParamInterface<FontOrientation> {
+ public:
+  FontOrientation GetOrientation() const { return GetParam(); }
+  bool IsHorizontal() const { return !IsVerticalAnyUpright(GetOrientation()); }
+};
+
+INSTANTIATE_TEST_SUITE_P(FontFeaturesTest,
+                         FontFeaturesByOrientationTest,
+                         testing::ValuesIn(orientations));
+
+// Test 'chws' or 'vchw' is on by default.
+TEST_P(FontFeaturesByOrientationTest, EastAsianContextualSpacingOnByDefault) {
+  constexpr hb_tag_t chws = HB_TAG('c', 'h', 'w', 's');
+  constexpr hb_tag_t vchw = HB_TAG('v', 'c', 'h', 'w');
+  FontDescription font_description;
+  font_description.SetOrientation(GetOrientation());
+  FontFeatures features;
+  features.Initialize(font_description);
+  if (IsHorizontal()) {
+    EXPECT_EQ(features.FindValueForTesting(chws), 1u);
+    EXPECT_EQ(features.FindValueForTesting(vchw), base::nullopt);
+  } else {
+    EXPECT_EQ(features.FindValueForTesting(chws), base::nullopt);
+    EXPECT_EQ(features.FindValueForTesting(vchw), 1u);
+  }
+}
+
+// If author opted-in or opted-out, it should be honored.
+TEST_P(FontFeaturesByOrientationTest,
+       EastAsianContextualSpacingHonorsFontFeatureSettings) {
+  constexpr hb_tag_t chws = HB_TAG('c', 'h', 'w', 's');
+  constexpr hb_tag_t vchw = HB_TAG('v', 'c', 'h', 'w');
+  for (unsigned value = 0; value <= 1; ++value) {
+    scoped_refptr<FontFeatureSettings> settings = FontFeatureSettings::Create();
+    settings->Append({IsHorizontal() ? chws : vchw, value});
+    FontDescription font_description;
+    font_description.SetOrientation(GetOrientation());
+    font_description.SetFeatureSettings(settings);
+    FontFeatures features;
+    features.Initialize(font_description);
+    if (IsHorizontal()) {
+      EXPECT_EQ(features.FindValueForTesting(chws), value);
+      EXPECT_EQ(features.FindValueForTesting(vchw), base::nullopt);
+    } else {
+      EXPECT_EQ(features.FindValueForTesting(chws), base::nullopt);
+      EXPECT_EQ(features.FindValueForTesting(vchw), value);
+    }
+  }
+}
+
+// Test glyph-width GPOS features that should not enable 'chws'/'vchw'.
+TEST_P(FontFeaturesByOrientationTest,
+       EastAsianContextualSpacingOffByFeatureSettings) {
+  constexpr hb_tag_t chws = HB_TAG('c', 'h', 'w', 's');
+  constexpr hb_tag_t vchw = HB_TAG('v', 'c', 'h', 'w');
+  const hb_tag_t tags[] = {
+      IsHorizontal() ? HB_TAG('h', 'a', 'l', 't') : HB_TAG('v', 'h', 'a', 'l'),
+      IsHorizontal() ? HB_TAG('p', 'a', 'l', 't') : HB_TAG('v', 'p', 'a', 'l'),
+  };
+  for (const hb_tag_t tag : tags) {
+    scoped_refptr<FontFeatureSettings> settings = FontFeatureSettings::Create();
+    settings->Append({tag, 1});
+    FontDescription font_description;
+    font_description.SetOrientation(GetOrientation());
+    font_description.SetFeatureSettings(settings);
+    FontFeatures features;
+    features.Initialize(font_description);
+    EXPECT_EQ(features.FindValueForTesting(chws), base::nullopt);
+    EXPECT_EQ(features.FindValueForTesting(vchw), base::nullopt);
+  }
+}
+
+// Test the current behavior when multiple glyph-width GPOS features are set via
+// `FontFeatureSettings`. Current |FontFeatures| does not resolve conflicts,
+// just pass them all as specified to HarfBuzz.
+TEST_P(FontFeaturesByOrientationTest, MultipleGlyphWidthGPOS) {
+  const hb_tag_t tags[] = {
+      HB_TAG('c', 'h', 'w', 's'), HB_TAG('v', 'c', 'h', 'w'),
+      HB_TAG('h', 'a', 'l', 't'), HB_TAG('v', 'h', 'a', 'l'),
+      HB_TAG('p', 'a', 'l', 't'), HB_TAG('v', 'p', 'a', 'l'),
+  };
+  scoped_refptr<FontFeatureSettings> settings = FontFeatureSettings::Create();
+  for (const hb_tag_t tag : tags)
+    settings->Append({tag, 1});
+  FontDescription font_description;
+  font_description.SetOrientation(GetOrientation());
+  font_description.SetFeatureSettings(settings);
+  FontFeatures features;
+  features.Initialize(font_description);
+  // Check all features are enabled.
+  for (const hb_tag_t tag : tags)
+    EXPECT_EQ(features.FindValueForTesting(tag), 1u);
+}
+
+}  // namespace
+
+}  // namespace blink
diff --git a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper.cc b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper.cc
index 04f4bfd..90d0f6b 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper.cc
+++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper.cc
@@ -585,7 +585,7 @@
   range_data.buffer = buffer;
   range_data.font = font;
   range_data.text_direction = direction;
-  range_data.font_features.Initialize(*font);
+  range_data.font_features.Initialize(font->GetFontDescription());
   return range_data;
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/skia/image_pixel_locker.h b/third_party/blink/renderer/platform/graphics/skia/image_pixel_locker.h
index 933ce6a..de11cfd 100644
--- a/third_party/blink/renderer/platform/graphics/skia/image_pixel_locker.h
+++ b/third_party/blink/renderer/platform/graphics/skia/image_pixel_locker.h
@@ -9,6 +9,7 @@
 #include "base/memory/scoped_refptr.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
 #include "third_party/skia/include/core/SkRefCnt.h"
 
diff --git a/third_party/blink/renderer/platform/heap/BUILD.gn b/third_party/blink/renderer/platform/heap/BUILD.gn
index ef990de..f7e78ee 100644
--- a/third_party/blink/renderer/platform/heap/BUILD.gn
+++ b/third_party/blink/renderer/platform/heap/BUILD.gn
@@ -106,7 +106,6 @@
       "v8_wrapper/custom_spaces.h",
       "v8_wrapper/disallow_new_wrapper.h",
       "v8_wrapper/garbage_collected.h",
-      "v8_wrapper/gc_task_runner.h",
       "v8_wrapper/heap.h",
       "v8_wrapper/heap_allocator_impl.h",
       "v8_wrapper/heap_stats_collector.h",
@@ -138,7 +137,6 @@
       "impl/garbage_collected.h",
       "impl/gc_info.cc",
       "impl/gc_info.h",
-      "impl/gc_task_runner.h",
       "impl/heap.cc",
       "impl/heap.h",
       "impl/heap_allocator_impl.cc",
diff --git a/third_party/blink/renderer/platform/heap/gc_task_runner.h b/third_party/blink/renderer/platform/heap/gc_task_runner.h
index 096f1530..cc296a7 100644
--- a/third_party/blink/renderer/platform/heap/gc_task_runner.h
+++ b/third_party/blink/renderer/platform/heap/gc_task_runner.h
@@ -1,16 +1,79 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
+/*
+ * Copyright (C) 2014 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
 
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_GC_TASK_RUNNER_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_GC_TASK_RUNNER_H_
 
-#include "third_party/blink/renderer/platform/wtf/buildflags.h"
+#include <memory>
+#include "third_party/blink/renderer/platform/heap/thread_state.h"
+#include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 
-#if BUILDFLAG(USE_V8_OILPAN)
-#include "third_party/blink/renderer/platform/heap/v8_wrapper/gc_task_runner.h"
-#else  // !USE_V8_OILPAN
-#include "third_party/blink/renderer/platform/heap/impl/gc_task_runner.h"
-#endif  // !USE_V8_OILPAN
+namespace blink {
+
+class GCTaskObserver final : public Thread::TaskObserver {
+  USING_FAST_MALLOC(GCTaskObserver);
+
+ public:
+  GCTaskObserver() = default;
+  ~GCTaskObserver() final = default;
+
+  void WillProcessTask(const base::PendingTask&, bool) final { nesting_++; }
+
+  void DidProcessTask(const base::PendingTask&) final {
+    CHECK(nesting_);
+    nesting_--;
+    ThreadState::Current()->SafePoint(nesting_
+                                          ? BlinkGC::kHeapPointersOnStack
+                                          : BlinkGC::kNoHeapPointersOnStack);
+  }
+
+ private:
+  int nesting_;
+};
+
+class GCTaskRunner final {
+  USING_FAST_MALLOC(GCTaskRunner);
+
+ public:
+  explicit GCTaskRunner(Thread* thread)
+      : gc_task_observer_(std::make_unique<GCTaskObserver>()), thread_(thread) {
+    thread_->AddTaskObserver(gc_task_observer_.get());
+  }
+
+  ~GCTaskRunner() { thread_->RemoveTaskObserver(gc_task_observer_.get()); }
+
+ private:
+  std::unique_ptr<GCTaskObserver> gc_task_observer_;
+  Thread* thread_;
+};
+
+}  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_GC_TASK_RUNNER_H_
diff --git a/third_party/blink/renderer/platform/heap/impl/gc_task_runner.h b/third_party/blink/renderer/platform/heap/impl/gc_task_runner.h
deleted file mode 100644
index 1e93f7f..0000000
--- a/third_party/blink/renderer/platform/heap/impl/gc_task_runner.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_IMPL_GC_TASK_RUNNER_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_IMPL_GC_TASK_RUNNER_H_
-
-#include <memory>
-#include "base/location.h"
-#include "third_party/blink/renderer/platform/heap/thread_state.h"
-#include "third_party/blink/renderer/platform/scheduler/public/thread.h"
-#include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
-
-namespace blink {
-
-class GCTaskObserver final : public Thread::TaskObserver {
-  USING_FAST_MALLOC(GCTaskObserver);
-
- public:
-  GCTaskObserver() : nesting_(0) {}
-
-  ~GCTaskObserver() override {
-    // m_nesting can be 1 if this was unregistered in a task and
-    // didProcessTask was not called.
-    DCHECK(!nesting_ || nesting_ == 1);
-  }
-
-  void WillProcessTask(const base::PendingTask&, bool) override { nesting_++; }
-
-  void DidProcessTask(const base::PendingTask&) override {
-    // In the production code WebKit::initialize is called from inside the
-    // message loop so we can get didProcessTask() without corresponding
-    // willProcessTask once. This is benign.
-    if (nesting_)
-      nesting_--;
-
-    ThreadState::Current()->SafePoint(nesting_
-                                          ? BlinkGC::kHeapPointersOnStack
-                                          : BlinkGC::kNoHeapPointersOnStack);
-  }
-
- private:
-  int nesting_;
-};
-
-class GCTaskRunner final {
-  USING_FAST_MALLOC(GCTaskRunner);
-
- public:
-  explicit GCTaskRunner(Thread* thread)
-      : gc_task_observer_(std::make_unique<GCTaskObserver>()), thread_(thread) {
-    thread_->AddTaskObserver(gc_task_observer_.get());
-  }
-
-  ~GCTaskRunner() { thread_->RemoveTaskObserver(gc_task_observer_.get()); }
-
- private:
-  std::unique_ptr<GCTaskObserver> gc_task_observer_;
-  Thread* thread_;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_IMPL_GC_TASK_RUNNER_H_
diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/gc_task_runner.h b/third_party/blink/renderer/platform/heap/v8_wrapper/gc_task_runner.h
deleted file mode 100644
index 2ef207a..0000000
--- a/third_party/blink/renderer/platform/heap/v8_wrapper/gc_task_runner.h
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_WRAPPER_GC_TASK_RUNNER_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_WRAPPER_GC_TASK_RUNNER_H_
-
-// TODO(chromium:1056170): Implement wrapper.
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_WRAPPER_GC_TASK_RUNNER_H_
diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/heap.h b/third_party/blink/renderer/platform/heap/v8_wrapper/heap.h
index 3b0de34..b3ee5ed 100644
--- a/third_party/blink/renderer/platform/heap/v8_wrapper/heap.h
+++ b/third_party/blink/renderer/platform/heap/v8_wrapper/heap.h
@@ -37,7 +37,7 @@
       ThreadStateFor<ThreadingTrait<T>::kAffinity>::GetState()
           ->allocation_handle(),
       std::forward<AdditionalBytes>(additional_bytes),
-      std::forward<args>(args)...);
+      std::forward<Args>(args)...);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h b/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h
index 6345607..640b6eca 100644
--- a/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h
+++ b/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h
@@ -94,6 +94,10 @@
 
   void RunTerminationGC();
 
+  void SafePoint(BlinkGC::StackState) {
+    // TODO(1056170): Implement, if necessary for testing.
+  }
+
  private:
   // Main-thread ThreadState avoids TLS completely by using a regular global.
   // The object is manually managed and should not rely on global ctor/dtor.
diff --git a/third_party/blink/renderer/platform/loader/fetch/render_blocking_behavior.h b/third_party/blink/renderer/platform/loader/fetch/render_blocking_behavior.h
index fe318dd..16b3fe0b 100644
--- a/third_party/blink/renderer/platform/loader/fetch/render_blocking_behavior.h
+++ b/third_party/blink/renderer/platform/loader/fetch/render_blocking_behavior.h
@@ -6,7 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_RENDER_BLOCKING_BEHAVIOR_H_
 
 namespace blink {
-enum class RenderBlockingBehavior {
+enum class RenderBlockingBehavior : uint8_t {
   kUnset,                 // Render blocking value was not set.
   kBlocking,              // Render Blocking resource.
   kNonBlocking,           // Non-blocking resource.
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/worker_main_script_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/worker_main_script_loader.cc
index 20c1738..b4c8cc1 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/worker_main_script_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/worker_main_script_loader.cc
@@ -13,6 +13,7 @@
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/platform/web_url_response.h"
 #include "third_party/blink/renderer/platform/loader/cors/cors.h"
+#include "third_party/blink/renderer/platform/loader/fetch/cached_metadata.h"
 #include "third_party/blink/renderer/platform/loader/fetch/cached_metadata_handler.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_context.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_initiator_type_names.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink_proxy.cc b/third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink_proxy.cc
index 095479b..8a586af 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink_proxy.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink_proxy.cc
@@ -6,6 +6,7 @@
 
 #include "base/check.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace blink {
 
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter.cc
index 9bdbe6c..442d1b0 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter.cc
@@ -37,7 +37,6 @@
 #include "third_party/webrtc/api/video/video_frame.h"
 #include "third_party/webrtc/media/base/vp9_profile.h"
 #include "third_party/webrtc/modules/video_coding/codecs/h264/include/h264.h"
-#include "third_party/webrtc/rtc_base/bind.h"
 #include "third_party/webrtc/rtc_base/ref_count.h"
 #include "third_party/webrtc/rtc_base/ref_counted_object.h"
 #include "ui/gfx/color_space.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter.cc
index c4cb507..4840b23 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_stream_adapter.cc
@@ -38,7 +38,6 @@
 #include "third_party/webrtc/api/video/video_frame.h"
 #include "third_party/webrtc/media/base/vp9_profile.h"
 #include "third_party/webrtc/modules/video_coding/codecs/h264/include/h264.h"
-#include "third_party/webrtc/rtc_base/bind.h"
 #include "third_party/webrtc/rtc_base/ref_count.h"
 #include "third_party/webrtc/rtc_base/ref_counted_object.h"
 #include "ui/gfx/color_space.h"
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 953ab5c..aae587af 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -116,6 +116,10 @@
       status: "stable",
     },
     {
+      name: "AccessibilityAriaVirtualContent",
+      status: "experimental",
+    },
+    {
       name: "AccessibilityExposeDisplayNone",
       status: "test",
     },
@@ -183,6 +187,10 @@
       origin_trial_feature_name: "AppCache",
     },
     {
+      name: "AriaTouchPassthrough",
+      status: "experimental",
+    },
+    {
       name: "AudioOutputDevices",
       // Android does not yet support switching of audio output devices
       status: {"Android": "", "default": "stable"},
diff --git a/third_party/blink/renderer/platform/weborigin/security_origin.cc b/third_party/blink/renderer/platform/weborigin/security_origin.cc
index 7d109c4..81f589e 100644
--- a/third_party/blink/renderer/platform/weborigin/security_origin.cc
+++ b/third_party/blink/renderer/platform/weborigin/security_origin.cc
@@ -313,19 +313,63 @@
 }
 
 bool SecurityOrigin::IsSecure(const KURL& url) {
-  if (base::Contains(url::GetSecureSchemes(), url.Protocol().Ascii()))
+  // This method is a stricter alternative to "potentially trustworthy url":
+  // https://w3c.github.io/webappsec-secure-contexts/#potentially-trustworthy-url
+  // TODO(https://crbug.com/1153336): Align the behavior of this function with
+  // network::IsUrlPotentiallyTrustworthy()?
+
+  GURL gurl = GURL(url);
+
+  // 1. If url is "about:blank" or "about:srcdoc", return "Potentially
+  //    Trustworthy".
+  if (gurl.IsAboutBlank() || gurl.IsAboutSrcdoc())
     return true;
 
-  // URLs that wrap inner URLs are secure if those inner URLs are secure.
-  if (ShouldUseInnerURL(url) &&
-      base::Contains(url::GetSecureSchemes(),
-                     ExtractInnerURL(url).Protocol().Ascii()))
+  // 2. If url’s scheme is "data", return "Potentially Trustworthy".
+  if (gurl.SchemeIs(url::kDataScheme))
     return true;
 
-  scoped_refptr<SecurityOrigin> origin = SecurityOrigin::Create(url);
-  return !origin->IsOpaque() &&
-         network::SecureOriginAllowlist::GetInstance().IsOriginAllowlisted(
-             origin->ToUrlOrigin());
+  // 3. Return the result of executing §3.2 Is origin potentially trustworthy?
+  //    on url’s origin.
+  //    Note: The origin of blob: and filesystem: URLs is the origin of the
+  //    context in which they were created. Therefore, blobs created in a
+  //    trustworthy origin will themselves be potentially trustworthy.
+  url::Origin origin = url::Origin::Create(gurl);
+  if (origin.opaque() &&
+      base::Contains(url::GetSecureSchemes(), gurl.scheme_piece())) {
+    // Authenticated schemes should be treated as trustworthy, even if they
+    // translate into an opaque origin (e.g. because some of them might also be
+    // registered as a no-access, like the //content-layer chrome-error:// or
+    // the //chrome-layer chrome-native://).
+    return true;
+  }
+
+  // https://w3c.github.io/webappsec-secure-contexts/#potentially-trustworthy-origin
+  // 1. If origin is an opaque origin, return "Not Trustworthy".
+  if (origin.opaque())
+    return false;
+
+  // 2. Assert: origin is a tuple origin.
+  DCHECK(!origin.opaque());
+
+  // 3. If origin’s scheme is either "https" or "wss", return "Potentially
+  //    Trustworthy".
+  // This is handled by the url::GetSecureSchemes() call below.
+
+  // 7. If origin’s scheme component is one which the user agent considers to be
+  //    authenticated, return "Potentially Trustworthy".
+  //    Note: See §7.1 Packaged Applications for detail here.
+  if (base::Contains(url::GetSecureSchemes(), origin.scheme()))
+    return true;
+
+  // 8. If origin has been configured as a trustworthy origin, return
+  //    "Potentially Trustworthy".
+  //    Note: See §7.2 Development Environments for detail here.
+  if (network::SecureOriginAllowlist::GetInstance().IsOriginAllowlisted(origin))
+    return true;
+
+  // 9. Return "Not Trustworthy".
+  return false;
 }
 
 base::Optional<base::UnguessableToken>
diff --git a/third_party/blink/renderer/platform/weborigin/security_origin_test.cc b/third_party/blink/renderer/platform/weborigin/security_origin_test.cc
index 7e06602..eed20be 100644
--- a/third_party/blink/renderer/platform/weborigin/security_origin_test.cc
+++ b/third_party/blink/renderer/platform/weborigin/security_origin_test.cc
@@ -112,8 +112,8 @@
       // in //services/network/public/cpp/is_potentially_trustworthy_unittest.
       // See also IsPotentiallyTrustworthy.Url test.
       {false, "file:///etc/passwd"},
-      {true, "blob:data:text/html,Hello"},
-      {true, "blob:about:blank"},
+      {false, "blob:data:text/html,Hello"},
+      {false, "blob:about:blank"},
       {false, "filesystem:data:text/html,Hello"},
       {false, "filesystem:about:blank"},
       {false, ""},
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index 71b04895..0a4b967 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -71,6 +71,9 @@
 crbug.com/591099 external/wpt/css/css-flexbox/image-as-flexitem-size-004.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-flexbox/image-as-flexitem-size-004v.html [ Failure ]
 crbug.com/1162704 external/wpt/css/css-flexbox/flex-aspect-ratio-img-row-015.html [ Failure ]
+crbug.com/1033476 external/wpt/css/css-flexbox/flex-minimum-height-flex-items-025.html [ Failure ]
+crbug.com/1033476 external/wpt/css/css-flexbox/flex-minimum-height-flex-items-026.html [ Failure ]
+crbug.com/1033476 external/wpt/css/css-flexbox/flex-minimum-width-flex-items-015.html [ Failure ]
 
 ### external/wpt/css/css-fonts/
 crbug.com/591099 external/wpt/css/css-fonts/font-features-across-space-1.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 4fad027e9..ec35830 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1112,7 +1112,7 @@
 crbug.com/958381 fast/table/large-col-span-crash.html [ Failure ]
 
 # TODO fails because cell size with only input element is 18px, not 15. line-height: 0px fixes it.
-crbug.com/958381 external/wpt/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html [ Failure ]
+crbug.com/1171616 external/wpt/css/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html [ Failure ]
 
 # TODO in NG, if section has only empty rows, it is empty. Not so in Legacy. Needs C++ fix.
 crbug.com/958381 accessibility/table-with-hidden-head-section.html [ Failure ]
@@ -2495,66 +2495,9 @@
 crbug.com/626703 [ Mac10.13 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.NaN.worker.html [ Timeout ]
 crbug.com/626703 [ Mac10.13 ] external/wpt/webmessaging/without-ports/011.html [ Timeout ]
 crbug.com/626703 [ Mac10.13 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.zero.worker.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-worker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.NaN.html [ Timeout ]
-crbug.com/626703 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.worker.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html [ Timeout ]
-crbug.com/626703 virtual/module-top-level-await/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-worker.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-worker.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/canvas/element/manual/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/element/manual/fill-and-stroke-styles/canvas_colorsandstyles_createlineargradient_001.htm [ Timeout ]
-crbug.com/626703 [ Linux ] external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 [ Mac ] external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 external/wpt/native-io/rename_sync_failure_handling.tentative.https.any.worker.html [ Timeout ]
-crbug.com/626703 [ Mac11.0 ] virtual/threaded/external/wpt/web-animations/timing-model/animations/updating-the-finished-state.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html [ Crash ]
 crbug.com/626703 [ Mac10.13 ] external/wpt/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html [ Crash ]
 crbug.com/626703 [ Win10 ] external/wpt/css/css-typed-om/stylevalue-subclasses/cssUnparsedValue.html [ Crash ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.small.worker.html [ Timeout ]
-crbug.com/626703 virtual/module-top-level-await/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-worker.html [ Timeout ]
-crbug.com/626703 virtual/module-top-level-await/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-worker.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeText.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html [ Timeout ]
-crbug.com/626703 virtual/module-top-level-await/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-worker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.zero.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.negative.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-worker.html [ Timeout ]
-crbug.com/626703 virtual/module-top-level-await/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.negative.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-worker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillText.html [ Timeout ]
-crbug.com/626703 [ Linux ] virtual/plz-dedicated-worker/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 [ Mac10.12 ] virtual/plz-dedicated-worker/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 [ Mac10.13 ] virtual/plz-dedicated-worker/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 [ Mac10.15 ] virtual/plz-dedicated-worker/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 [ Mac11.0 ] virtual/plz-dedicated-worker/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 [ Win10 ] virtual/plz-dedicated-worker/external/wpt/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html [ Timeout ]
-crbug.com/626703 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.serviceworker.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-worker.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-worker.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-worker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.small.html [ Timeout ]
-crbug.com/626703 virtual/module-top-level-await/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html [ Timeout ]
-crbug.com/626703 external/wpt/native-io/rename_async_failure_handling.tentative.https.any.sharedworker.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-worker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.negative.worker.html [ Timeout ]
-crbug.com/626703 virtual/module-top-level-await/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.small.html [ Timeout ]
-crbug.com/626703 external/wpt/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-after-workerglobalscope-onerror-module.html [ Timeout ]
-crbug.com/626703 virtual/v8-off-thread-finalization/external/wpt/html/semantics/scripting-1/the-script-element/microtasks/checkpoint-after-workerglobalscope-onerror-module.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/element/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.zero.html [ Timeout ]
-crbug.com/626703 virtual/module-top-level-await/external/wpt/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html [ Timeout ]
-crbug.com/626703 [ Win10 ] external/wpt/html/canvas/offscreen/text/2d.text.draw.fill.maxWidth.zero.worker.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-scroll-snap/snap-after-initial-layout/scroll-snap-writing-mode-000.html [ Failure ]
 crbug.com/626703 [ Mac10.13 ] virtual/threaded/external/wpt/web-animations/timing-model/animations/updating-the-finished-state.html [ Timeout ]
 crbug.com/626703 external/wpt/editing/other/typing-around-link-element-at-non-collapsed-selection.tentative.html?target=ContentEditable&parent=b [ Timeout ]
@@ -3329,6 +3272,10 @@
 crbug.com/941987 external/wpt/css/css-grid/alignment/grid-baseline-align-cycles-001.html [ Failure ]
 crbug.com/1045599 external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-001.html [ Failure ]
 crbug.com/1045599 external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-002.html [ Failure ]
+crbug.com/1171262 external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-006.html [ Failure ]
+crbug.com/1171262 external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-007.html [ Failure ]
+crbug.com/1171262 external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-008.html [ Failure ]
+crbug.com/1171262 external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-009.html [ Failure ]
 crbug.com/759665 external/wpt/css/css-grid/animation/grid-template-columns-001.html [ Failure ]
 crbug.com/759665 external/wpt/css/css-grid/animation/grid-template-rows-001.html [ Failure ]
 crbug.com/935102 external/wpt/css/css-grid/layout-algorithm/grid-flex-track-intrinsic-sizes-002.html [ Failure ]
@@ -3382,6 +3329,10 @@
 crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-alignment-implies-size-change-036.html [ Pass ]
 crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-001.html [ Pass ]
 crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-002.html [ Pass ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-006.html [ Pass ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-007.html [ Pass ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-008.html [ Pass ]
+crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-009.html [ Pass ]
 
 # Tests that pass with layout-ng-grid enabled but fail in legacy grid:
 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-003.html [ Pass ]
@@ -4528,7 +4479,7 @@
 crbug.com/908347 media/autoplay/webaudio-audio-context-resume.html [ Failure Pass ]
 
 # Sheriff 2018-11-29
-crbug.com/910139 custom-elements/form-submission-file.html [ Crash Pass ]
+crbug.com/910139 http/tests/custom-elements/form-submission-file.html [ Crash Pass ]
 
 # TODO: re-enable the below flakiness suppression when removing this line
 crbug.com/1131901 transforms/shadows.html [ Pass Failure ]
@@ -5792,6 +5743,6 @@
 crbug.com/1170062 [ mac ] external/wpt/html/canvas/element/manual/shadows/canvas_shadows_001.htm [ Timeout Pass ]
 
 # Sheriff 2021-01-27
-crbug.com/1171331 tables/mozilla_expected_failures/bugs/bug89315.html [ Failure Pass ]
+crbug.com/1171331 [ Mac ] tables/mozilla_expected_failures/bugs/bug89315.html [ Failure Pass ]
 
 crbug.com/1168785 [ Mac ] virtual/threaded-prefer-compositing/fast/scrolling/autoscroll-latch-clicked-node-if-parent-unscrollable.html [ Timeout ]
diff --git a/third_party/blink/web_tests/accessibility/file-upload-button-with-axpress-expected.txt b/third_party/blink/web_tests/accessibility/file-upload-button-with-axpress-expected.txt
deleted file mode 100644
index cca2cbc..0000000
--- a/third_party/blink/web_tests/accessibility/file-upload-button-with-axpress-expected.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-CONSOLE MESSAGE: line 5: FileChooser: opened; mode=kOpen
-This tests that when AXPress is used DOMActivate will be handled by the input file type.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-DOMActivate was called
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/third_party/blink/web_tests/accessibility/file-upload-button-with-axpress.html b/third_party/blink/web_tests/accessibility/file-upload-button-with-axpress.html
deleted file mode 100644
index 736c35b2..0000000
--- a/third_party/blink/web_tests/accessibility/file-upload-button-with-axpress.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<body>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../wpt_internal/forms/resources/mock-file-chooser.js"></script>
-<script src="../resources/js-test.js"></script>
-
-<input id="filetype" type="file">
-
-<div id="description"></div>
-<div id="console"></div>
-
-<script>
-
-description("This tests that when AXPress is used DOMActivate will be handled by the input file type.")
-
-if (window.testRunner && window.accessibilityController) {
-    testRunner.waitUntilDone();
-    
-    var inputFile = document.getElementById("filetype");
-
-    inputFile.addEventListener("DOMActivate", function() { 
-        debug("DOMActivate was called"); 
-    });
-    mockFileChooserFactory.addEventListener('open', e => testRunner.notifyDone());
-
-    accessibilityController.accessibleElementById("filetype").press();
-}
-
-</script>
-
-</body>
-</html>
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/sandbox/meta-element.sub-expected.txt b/third_party/blink/web_tests/external/wpt/content-security-policy/sandbox/meta-element.sub-expected.txt
deleted file mode 100644
index 329b19a..0000000
--- a/third_party/blink/web_tests/external/wpt/content-security-policy/sandbox/meta-element.sub-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-This is a testharness.js-based test.
-PASS Document shouldn't be sandboxed by <meta>
-FAIL Worker shouldn't be sandboxed by inheriting <meta> assert_equals: expected "http://web-platform.test:8001" but got "null"
-FAIL Worker shouldn't be sandboxed when created <iframe> inheriting parent's CSP with sandbox <meta> assert_equals: expected "http://web-platform.test:8001" but got "null"
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/content-security-policy/script-src/worker-data-set-timeout.sub.html b/third_party/blink/web_tests/external/wpt/content-security-policy/script-src/worker-data-set-timeout.sub.html
new file mode 100644
index 0000000..ac4b608b
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/content-security-policy/script-src/worker-data-set-timeout.sub.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <!-- We add two CSP entries on purpose. The first one does nothing
+    for the purpose of this test, but we want to check that both are
+    inherited -->
+    <meta http-equiv="Content-Security-Policy" content="object-src: 'none'">
+    <meta http-equiv="Content-Security-Policy" content="script-src data: 'self' 'unsafe-inline'; connect-src 'self';">
+    <title>worker-data-set-timeout</title>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src='../support/testharness-helper.js'></script>
+</head>
+
+<body>
+    <script>
+      fetch('./support/worker-with-script-src-none-set-timeout.js')
+       .then(data => data.text())
+       .then(
+           text => assert_shared_worker_is_loaded(
+               `data:text/javascript,${text}`,
+               "Shared worker with data: url inherits CSP",
+               "setTimeout blocked"));
+    </script>
+</body>
+
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-025.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-025.html
new file mode 100644
index 0000000..2c1f6fa
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-025.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<link rel="author" title="dgrogan@chromium.org" href="mailto:dgrogan@chromium.org" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto" />
+<link rel="bookmark" href="https://crbug.com/1033476">
+<meta name="assert" content="Column flex item's height does not influence its min-height content size suggestion in a varitey of scenarios.">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<style>
+.outer-column-flexbox {
+  display: flex;
+  flex-direction: column;
+  width: 100px;
+  margin-bottom: 10px; /* Just for visually spacing things out */
+}
+</style>
+
+<body onload="checkLayout('.outer-column-flexbox > div');">
+
+<div id=log></div>
+
+<p>Test passes if there is a sequence of filled green squares.</p>
+
+<!-- %height of descendant is not resolved against specified height for purposes of min-content sizing. -->
+<div class=outer-column-flexbox>
+  <div style="flex-basis: 100px; height: 200px;" data-expected-height=100>
+    <div style="height: 100%; background: green;" data-expected-height=100></div>
+  </div>
+</div>
+
+<!-- Same as above, but with an orthogonal writing mode flex item. -->
+<div class=outer-column-flexbox>
+  <div style="flex-basis: 100px; height: 200px; width: 100px; writing-mode: vertical-rl;" data-expected-height=100>
+    <div style="height: 100%; background: green;" data-expected-height=100></div>
+  </div>
+</div>
+
+<!-- Same as #1 but with a grid child of the flex item. -->
+<div class=outer-column-flexbox>
+  <div style="flex-basis: 100px; height: 200px;" data-expected-height=100>
+    <div style="display: grid; height: 100%; background: green" data-expected-height=100></div>
+  </div>
+</div>
+
+<!-- Same as #1 but with a table child of the flex item that has a >0 intrinsic block size. -->
+<div class=outer-column-flexbox>
+  <div style="flex-basis: 100px; height: 200px;" data-expected-height=100>
+    <table data-expected-height=100 style="height: 100%; width: 100%; background: green">
+      <td>
+        <div style="height: 50px;"></div>
+      </td>
+    </table>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-026.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-026.html
new file mode 100644
index 0000000..9f46c95
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-026.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<link rel="author" title="dgrogan@chromium.org" href="mailto:dgrogan@chromium.org" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto" />
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html" />
+<meta name="assert" content="Child in nested column flexbox's grows to its parent's flex height, not its parent's specified height.">
+<link href="support/flexbox.css" rel="stylesheet">
+
+<p>Test passes if there is a filled green square.</p>
+
+<div class="flexbox column" style="height: 100px;">
+  <!-- min-height: auto resolves to 0 because content-size suggestion is 0. -->
+  <div class="flexbox column" style="flex: 1 0 0px; height: 200px">
+    <!-- min-height: auto resolves to 0 because content-size suggestion is 0. -->
+    <div style="flex: 1 0 0px; width: 100px; background: green;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-027.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-027.html
new file mode 100644
index 0000000..052ff6a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-027.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-direction-property">
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="Nested flex item shrinks correctly when its parent has a % height that resolves to smaller than the item's flex-basis." />
+<p>Test passes if there is a filled green square.</p>
+
+<style>
+.OuterFlexbox {
+  display: flex;
+  flex-direction: column;
+  height: 100px;
+  width: 100px;
+}
+
+.InnerFlexbox {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+}
+
+.InnerFlexbox-body {
+  background: green;
+  min-height: 0;
+}
+</style>
+
+<div class="OuterFlexbox">
+  <div class="InnerFlexbox">
+    <div class="InnerFlexbox-body">
+      <div style="height: 200px;">
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-028.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-028.html
new file mode 100644
index 0000000..45cf768
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-028.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<link rel="author" title="dgrogan@chromium.org" href="mailto:dgrogan@chromium.org" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto" />
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html" />
+<meta name="assert" content="Intermediate column flex item's specified min-height is honored.">
+<link href="support/flexbox.css" rel="stylesheet">
+
+<p>Test passes if there is a filled green square.</p>
+
+<div class="flexbox column">
+  <div class="flexbox column" style="flex: 1 0 0px; min-height: 100px">
+    <div style="flex: 1 0 0px; width: 100px; background: green;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-029.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-029.html
new file mode 100644
index 0000000..62b77b9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-029.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<link rel="author" title="dgrogan@chromium.org" href="mailto:dgrogan@chromium.org" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto" />
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html" />
+<meta name="assert" content="Inner column flexbox doesn't wrap its items because its min-size reported to the outer flexbox accommated the sum of the items' intrinsic block sizes.">
+
+<p>Test passes if there is a filled green square.</p>
+
+<div style="display: flex; flex-direction: column;">
+  <!-- min-height is min(100, 500) = 100 -->
+  <!-- Final height is 100px. -->
+  <div style="display: flex; flex-direction: column; flex-wrap: wrap; flex: 1 0 0px; height: 500px">
+    <!-- min-height is 50 -->
+    <div style="flex: 1 0 0px; width: 100px; background: green;">
+      <div style="height: 50px;"></div>
+    </div>
+    <!-- min-height is 50 -->
+    <div style="flex: 1 0 0px; width: 100px; background: green;">
+      <div style="height: 50px;"></div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-030.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-030.html
new file mode 100644
index 0000000..a3dc56e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-height-flex-items-030.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<link rel="author" title="dgrogan@chromium.org" href="mailto:dgrogan@chromium.org" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-wrap-property" />
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html" />
+<meta name="assert" content="Inner column flexbox wraps its items when they don't fit in the vertical available space.">
+
+<p>Test passes if there is a filled green square.</p>
+
+<div style="display: flex; flex-direction: column; width: 100px;">
+  <!-- min-height is min(200, 70) = 70 -->
+  <!-- Final height is 70px. Items each have height 100px. They won't both fit, so they need to be wrapped. -->
+  <div style="display: flex; flex-direction: column; flex-wrap: wrap; flex: 1 0 0px; height: 70px">
+    <!-- min-height is 100 -->
+    <div style="flex: 1 0 0px; width: 50px; background: green;">
+      <div style="height: 100px;"></div>
+    </div>
+    <!-- min-height is 100 -->
+    <div style="flex: 1 0 0px; width: 50px; background: green;">
+      <div style="height: 100px;"></div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-width-flex-items-015.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-width-flex-items-015.html
new file mode 100644
index 0000000..d4020fe
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-width-flex-items-015.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#definite-sizes" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto" />
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
+<meta name="assert" content="Column flexbox's imposed definite size on row flexbox is honored when resolving percentages in automatic minimum size algorithm.">
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: flex; flex-direction: column; width: 100px; height: 444px;">
+  <div style="flex-basis: 100px; display: flex; min-height: 0px;">
+    <!-- min-width is min-height transferred through the aspect ratio: 1 x 100% x 100px = 100px -->
+    <img src="support/200x200-green.png" style="min-height: 100%;">
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-width-flex-items-016.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-width-flex-items-016.html
new file mode 100644
index 0000000..a3f4eb4a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-width-flex-items-016.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<link rel="author" title="dgrogan@chromium.org" href="mailto:dgrogan@chromium.org" />
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto" />
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="Height of flex item in row flexbox is not ignored when resolving percentages of its descendants to determine content based minimum size suggestion.">
+
+<p>Test passes if there is a filled green square.</p>
+
+<div style="display: flex; width: 0px; height: 20px;">
+  <div style="flex-basis: 50px; height: 100px;">
+    <img src="support/200x200-green.png" style="height: 100%">
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-definite-sizes-006.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-definite-sizes-006.html
new file mode 100644
index 0000000..4b5aaf8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flexbox-definite-sizes-006.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#algo-stretch">
+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
+<meta name="assert" content="Item stretches to row flexbox's height when the row flexbox has a definite height but is a child of a column flexbox with an indefinite height." />
+<p>Test passes if there is a filled green square.</p>
+
+<div style="display: flex; flex-direction: column;">
+  <div style="height: 100px; display: flex;">
+    <div style="width: 100px; background: green;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-006.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-006.html
new file mode 100644
index 0000000..354763c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/justify-content-006.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#justify-content-property">
+<meta name="assert" content="Flex item in nested column flexbox is justified properly.">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<style>
+.outer {
+  display: flex;
+  flex-direction: column;
+  width: 100px;
+  border: 2px solid black;
+  position: relative;
+}
+.middle {
+  flex: 0 0 50px;
+  min-height: 50px;
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-end;
+}
+</style>
+
+Test passes if orange square is in bottom left corner of rectangle.
+
+<div class="outer">
+  <div class="middle">
+    <div style="width: 30px; height: 30px; background: orange" data-offset-y=20></div>
+  </div>
+</div>
+
+<script>
+checkLayout('.middle > div');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-004.html
new file mode 100644
index 0000000..437b379
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-004.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
+<meta name="assert" content="If stretch alignment is applied to both axis the aspect-ratio of a replaced element is ignored.">
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; grid-template: 100px / 100px; width: 100px; height: 100px; background: red;">
+  <img src="support/25x50-green.png" width=25 height=50 style="background: green; align-self: stretch; justify-self: stretch; width: auto; height: auto;"></img>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-005.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-005.html
new file mode 100644
index 0000000..b14c45d
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-005.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
+<meta name="assert" content="If stretch alignment is applied to both axis the aspect-ratio of a replaced element is ignored.">
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; grid-template: 100px / 100px; width: 100px; height: 100px; background: red;">
+  <img src="support/25x50-green.png" width=25 height=50 style="background: green; align-self: stretch; justify-self: stretch; width: auto; height: auto; writing-mode: vertical-lr;"></img>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-006.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-006.html
new file mode 100644
index 0000000..ed14e36
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-006.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
+<meta name="assert" content="If stretch alignment is applied to both axis the aspect-ratio of a replaced element is ignored, but not when auto margins are present.">
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; grid-template: 100px / 500px; width: 100px; height: 100px; background: red;">
+  <img src="support/50x50-green.png" width=50 height=50 style="background: green; align-self: stretch; justify-self: stretch; width: auto; height: auto; margin-right: auto;"></img>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-007.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-007.html
new file mode 100644
index 0000000..0c841c7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-007.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
+<meta name="assert" content="If stretch alignment is applied to both axis the aspect-ratio of a replaced element is ignored, but not when auto margins are present.">
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; grid-template: 500px / 100px; width: 100px; height: 100px; background: red;">
+  <img src="support/50x50-green.png" width=50 height=50 style="background: green; align-self: stretch; justify-self: stretch; width: auto; height: auto; margin-bottom: auto;"></img>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-008.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-008.html
new file mode 100644
index 0000000..9227332
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-008.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
+<meta name="assert" content="Stretch alignment in one axis should apply aspect-ratio in the other">
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; grid-template: 100px / 100px; width: 100px; height: 100px; background: red;">
+  <img src="support/50x50-green.png" width=50 height=50 style="background: green; justify-self: stretch; width: auto; height: auto;"></img>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-009.html b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-009.html
new file mode 100644
index 0000000..ff721b8
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-009.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/5713">
+<meta name="assert" content="Stretch alignment in one axis should apply aspect-ratio in the other">
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; grid-template: 100px / 100px; width: 100px; height: 100px; background: red;">
+  <img src="support/50x50-green.png" width=50 height=50 style="background: green; align-self: stretch; width: auto; height: auto;"></img>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/support/25x50-green.png b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/support/25x50-green.png
new file mode 100644
index 0000000..6ab02fc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/support/25x50-green.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/support/50x50-green.png b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/support/50x50-green.png
new file mode 100644
index 0000000..6c1406b7
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/alignment/support/50x50-green.png
Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html b/third_party/blink/web_tests/external/wpt/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html
index f523fd7..91fdc6c8 100644
--- a/third_party/blink/web_tests/external/wpt/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html
+++ b/third_party/blink/web_tests/external/wpt/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-aspect-ratio.html
@@ -10,11 +10,18 @@
   }
 </style>
 <body>
+<canvas id="contained" width="250" height="100" style="contain: size;"></canvas>
 <script>
 function assert_ratio(img, expected) {
   let epsilon = 0.001;
   assert_approx_equals(parseInt(getComputedStyle(img).width, 10) / parseInt(getComputedStyle(img).height, 10), expected, epsilon);
 }
+
+test(function() {
+  canvas = document.getElementById("contained");
+  assert_ratio(canvas, 2.5);
+}, "Canvas width and height attributes are used as the surface size with contain:size");
+
 // Create and append a new canvas and immediately check the ratio.
 test(function() {
   var canvas = document.createElement("canvas");
diff --git a/third_party/blink/web_tests/external/wpt/lint.ignore b/third_party/blink/web_tests/external/wpt/lint.ignore
index 0c12d66..e296376 100644
--- a/third_party/blink/web_tests/external/wpt/lint.ignore
+++ b/third_party/blink/web_tests/external/wpt/lint.ignore
@@ -613,6 +613,9 @@
 CSS-COLLIDING-SUPPORT-NAME: css/css-grid/grid-items/support/50x50-green.png
 CSS-COLLIDING-SUPPORT-NAME: css/CSS2/support/50x50-green.png
 CSS-COLLIDING-SUPPORT-NAME: css/CSS2/ui/support/animated.gif
+CSS-COLLIDING-SUPPORT-NAME: css/css-grid/alignment/support/50x50-green.png
+CSS-COLLIDING-SUPPORT-NAME: css/css-grid/alignment/support/25x50-green.png
+CSS-COLLIDING-SUPPORT-NAME: css/css-grid/grid-items/support/25x50-green.png
 CSS-COLLIDING-SUPPORT-NAME: css/CSS2/backgrounds/support/animated.gif
 CSS-COLLIDING-SUPPORT-NAME: css/css-shapes/shape-outside/shape-image/support/animated.gif
 CSS-COLLIDING-SUPPORT-NAME: css/css-display/support/util.js
diff --git a/third_party/blink/web_tests/fast/scroll-snap/root-scroller-snap-behaviour/arrow-key-scroll-snaps-visual-viewport.html b/third_party/blink/web_tests/fast/scroll-snap/root-scroller-snap-behaviour/arrow-key-scroll-snaps-visual-viewport.html
index 9ccb05c0..91a88a0 100644
--- a/third_party/blink/web_tests/fast/scroll-snap/root-scroller-snap-behaviour/arrow-key-scroll-snaps-visual-viewport.html
+++ b/third_party/blink/web_tests/fast/scroll-snap/root-scroller-snap-behaviour/arrow-key-scroll-snaps-visual-viewport.html
@@ -56,6 +56,10 @@
 <script>
 if (window.internals) {
   internals.runtimeFlags.implicitRootScrollerEnabled = true;
+  // Jump directly to the snap position. Otherwise, we need to wait until X ms
+  // goes by without a change to the scroll position, which leads to either slow
+  // running tests or flakes when the test machines get bogged down.
+  internals.settings.setScrollAnimatorEnabled(false);
 }
 
 const root_scroller = document.getElementById("root-scroller");
@@ -102,11 +106,9 @@
   assert_equals(visualViewport.offsetTop + root_scroller.scrollTop,
       initial_area.offsetTop);
 
-  await arrowDown()
-
-  await waitForAnimationEndTimeBased(() => {
-    return root_scroller.scrollTop;
-  });
+  const scrollWatcher = waitForScrollEvent(root_scroller);
+  await arrowDown();
+  await scrollWatcher;
 
   // The offset of the visual viewport and the layout viewport combined should
   // be at the snap point.
diff --git a/third_party/blink/web_tests/fast/scroll-snap/snap-to-target-on-layout-change.html b/third_party/blink/web_tests/fast/scroll-snap/snap-to-target-on-layout-change.html
index ca972c3b..79e6bef 100644
--- a/third_party/blink/web_tests/fast/scroll-snap/snap-to-target-on-layout-change.html
+++ b/third_party/blink/web_tests/fast/scroll-snap/snap-to-target-on-layout-change.html
@@ -111,7 +111,7 @@
   t.add_cleanup(cleanup);
 
   await mouseClickOn(10, 10);
-  await touchScroll(250 /* delta */, 400, 400, 'down');
+  await touchScroll(250 /* delta */, 50, 50, 'down');
   await waitForAnimationEndTimeBased(() => { return scroller.scrollTop; });
   assert_equals(scroller.scrollTop, 400);
 
diff --git a/third_party/blink/web_tests/fast/scroll-snap/snaps-for-different-key-granularity.html b/third_party/blink/web_tests/fast/scroll-snap/snaps-for-different-key-granularity.html
index 8983677..e20228d8 100644
--- a/third_party/blink/web_tests/fast/scroll-snap/snaps-for-different-key-granularity.html
+++ b/third_party/blink/web_tests/fast/scroll-snap/snaps-for-different-key-granularity.html
@@ -43,6 +43,13 @@
 </div>
 
 <script>
+if (window.internals) {
+  // Jump directly to the snap position. Otherwise, we need to wait until X ms
+  // goes by without a change to the scroll position, which leads to either slow
+  // running tests or flakes when the test machines get bogged down.
+  internals.settings.setScrollAnimatorEnabled(false);
+}
+
 var scroller = document.getElementById("scroller");
 
 function scrollLeft() {
@@ -68,48 +75,54 @@
 promise_test (async () => {
   await mouseClickOn(10, 10);
   scroller.scrollTo(0, 0);
+  const scrollWatcher = waitForScrollEvent(scroller);
   await keyPress("ArrowDown");
-  await waitForAnimationEndTimeBased(scrollTop);
+  await scrollWatcher;
   assert_equals(scroller.scrollTop, 200);
 }, "Snaps to page1-line1 after pressing ArrowDown at page1.");
 
 promise_test (async () => {
   await mouseClickOn(10, 10);
   scroller.scrollTo(0, 1200);
+  const scrollWatcher = waitForScrollEvent(scroller);
   await keyPress("ArrowUp");
-  await waitForAnimationEndTimeBased(scrollTop);
+  await scrollWatcher;
   assert_equals(scroller.scrollTop, 1000);
 }, "Snaps to page2-line2 after pressing ArrowUp at page3.");
 
 promise_test (async () => {
   await mouseClickOn(10, 10);
   scroller.scrollTo(0, 0);
+  const scrollWatcher = waitForScrollEvent(scroller);
   await keyPress("PageDown");
-  await waitForAnimationEndTimeBased(scrollTop);
+  await scrollWatcher;
   assert_equals(scroller.scrollTop, 600);
 }, "Snaps to page2 after pressing PageDown at page1.");
 
 promise_test (async () => {
   await mouseClickOn(10, 10);
   scroller.scrollTo(0, 1200);
+  const scrollWatcher = waitForScrollEvent(scroller);
   await keyPress("PageUp");
-  await waitForAnimationEndTimeBased(scrollTop);
+  await scrollWatcher;
   assert_equals(scroller.scrollTop, 600);
 }, "Snaps to page2 after pressing PageUp at page3.");
 
 promise_test (async () => {
   await mouseClickOn(10, 10);
   scroller.scrollTo(0, 0);
+  const scrollWatcher = waitForScrollEvent(scroller);
   await keyPress("End");
-  await waitForAnimationEndTimeBased(scrollTop);
+  await scrollWatcher;
   assert_equals(scroller.scrollTop, 1200);
 }, "Snaps to page3 after pressing End at page1.");
 
 promise_test (async () => {
   await mouseClickOn(10, 10);
   scroller.scrollTo(0, 1200);
+  const scrollWatcher = waitForScrollEvent(scroller);
   await keyPress("Home");
-  await waitForAnimationEndTimeBased(scrollTop);
+  await scrollWatcher;
   assert_equals(scroller.scrollTop, 0);
 }, "Snaps to page1 after pressing Home at page3.");
-</script>
\ No newline at end of file
+</script>
diff --git a/third_party/blink/web_tests/accessibility/file-upload-button-name.html b/third_party/blink/web_tests/http/tests/accessibility/file-upload-button-name.html
similarity index 77%
rename from third_party/blink/web_tests/accessibility/file-upload-button-name.html
rename to third_party/blink/web_tests/http/tests/accessibility/file-upload-button-name.html
index 984793eba..3a1971b 100644
--- a/third_party/blink/web_tests/accessibility/file-upload-button-name.html
+++ b/third_party/blink/web_tests/http/tests/accessibility/file-upload-button-name.html
@@ -1,17 +1,16 @@
 <!DOCTYPE HTML>
 <html>
 <head>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../wpt_internal/forms/resources/mock-file-chooser.js"></script>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 </head>
 <body>
 
 <input id="filetype" type="file">
 
-<script>
+<script type="module">
+import  '/wpt_internal/forms/resources/mock-file-chooser.js';
+
 async_test((t) => {
     testRunner.waitUntilDone();
 
diff --git a/third_party/blink/web_tests/http/tests/accessibility/file-upload-button-with-axpress.html b/third_party/blink/web_tests/http/tests/accessibility/file-upload-button-with-axpress.html
new file mode 100644
index 0000000..91dd77d
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/accessibility/file-upload-button-with-axpress.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML>
+<html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<input id="filetype" type="file">
+
+<div id="description"></div>
+<div id="console"></div>
+
+<script type="module">
+import {mockFileChooserFactory} from '/wpt_internal/forms/resources/mock-file-chooser.js';
+
+promise_test(async () => {
+  const inputFile = document.getElementById('filetype');
+  const activatePromise = new Promise(
+      resolve => inputFile.addEventListener('DOMActivate', resolve));
+  const openPromise = new Promise(
+      resolve => mockFileChooserFactory.addEventListener('open', resolve));
+  accessibilityController.accessibleElementById('filetype').press();
+  await activatePromise;
+  const {detail} = await openPromise;
+  assert_equals(detail, 'kOpen');
+}, 'when AXPress is used, DOMActivate will be handled by file input elements');
+
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/custom-elements/form-submission-file.html b/third_party/blink/web_tests/http/tests/custom-elements/form-submission-file.html
similarity index 84%
rename from third_party/blink/web_tests/custom-elements/form-submission-file.html
rename to third_party/blink/web_tests/http/tests/custom-elements/form-submission-file.html
index ae59b94..cd52523b 100644
--- a/third_party/blink/web_tests/custom-elements/form-submission-file.html
+++ b/third_party/blink/web_tests/http/tests/custom-elements/form-submission-file.html
@@ -1,13 +1,12 @@
 <!DOCTYPE html>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../wpt_internal/forms/resources/mock-file-chooser.js"></script>
-<script src="../fast/forms/resources/common.js"></script>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
+<script src="/forms-test-resources/common.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <div id="container"></div>
 <input type=file multiple>
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '/wpt_internal/forms/resources/mock-file-chooser.js';
+
 class MyControl extends HTMLElement {
   static get formAssociated() { return true; }
 
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/response-received-extra-info-ip-address-space-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/network/response-received-extra-info-ip-address-space-expected.txt
new file mode 100644
index 0000000..3e18646
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/response-received-extra-info-ip-address-space-expected.txt
@@ -0,0 +1,4 @@
+Tests that the IP address space is reported on responseReceivedExtraInfo.
+Network Enabled
+Local
+
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/response-received-extra-info-ip-address-space.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/response-received-extra-info-ip-address-space.js
new file mode 100644
index 0000000..33ccdcf
--- /dev/null
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/response-received-extra-info-ip-address-space.js
@@ -0,0 +1,14 @@
+(async function(testRunner) {
+  const {page, session, dp} = await testRunner.startBlank(
+      `Tests that the IP address space is reported on responseReceivedExtraInfo.`);
+
+  await dp.Network.enable();
+  testRunner.log('Network Enabled');
+
+  dp.Network.onResponseReceivedExtraInfo(event => {
+    testRunner.log(event.params.resourceIPAddressSpace);
+    testRunner.completeTest();
+  });
+
+  await session.evaluate(`fetch('index.html');`);
+})
diff --git a/third_party/blink/web_tests/reporting-observer/deprecation.html b/third_party/blink/web_tests/reporting-observer/deprecation.html
deleted file mode 100644
index 6e9a18f..0000000
--- a/third_party/blink/web_tests/reporting-observer/deprecation.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!doctype html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
-<p>Testing deprecation reports and ReportingObserver</p>
-<script src="resources/deprecation.js"></script>
diff --git a/third_party/blink/web_tests/resources/gesture-util.js b/third_party/blink/web_tests/resources/gesture-util.js
index ad25837..8cfb1ea 100644
--- a/third_party/blink/web_tests/resources/gesture-util.js
+++ b/third_party/blink/web_tests/resources/gesture-util.js
@@ -150,6 +150,16 @@
   })
 }
 
+function waitForScrollEvent(eventTarget) {
+  return new Promise((resolve, reject) => {
+    const scrollListener = () => {
+      eventTarget.removeEventListener('scroll', scrollListener);
+      resolve();
+    };
+    eventTarget.addEventListener('scroll', scrollListener);
+  });
+}
+
 // Enums for gesture_source_type parameters in gpuBenchmarking synthetic
 // gesture methods. Must match C++ side enums in synthetic_gesture_params.h
 const GestureSourceType = (function() {
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-click.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-click.html
index 92e2660..97208340 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-click.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-click.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE and click events</title>
 <input type="file">
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(async _ => {
   const file = document.querySelector('input');
   const x = file.offsetLeft + file.offsetWidth / 2;
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-enter.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-enter.html
index e871c3b..5baad1a 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-enter.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-enter.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE and key events - Enter key</title>
 <input type="file">
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(async _ => {
   const promise = new Promise(
       resolve => mockFileChooserFactory.addEventListener('open', resolve));
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-other.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-other.html
index 1b444e8..3883612 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-other.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-other.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE and key events - Other keys</title>
 <input type="file">
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(_ => {
   const promise = new Promise((resolve, reject) => {
     mockFileChooserFactory.addEventListener(
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-space.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-space.html
index 49561bda..0186516c 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-space.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-key-space.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE and key events - Space key</title>
 <input type="file">
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(async _ => {
   const promise = new Promise(
       resolve => mockFileChooserFactory.addEventListener('open', resolve));
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-click.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-click.html
index b8e22384..6dc4492 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-click.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-click.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE WEBKITDIRECTORY and click events</title>
 <input type="file" webkitdirectory>
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(async _ => {
   const promise = new Promise(
       resolve => mockFileChooserFactory.addEventListener('open', resolve));
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress.html
index 48d5f158..7355e36 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keypress.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE WEBKITDIRECTORY and key events - Enter keypress prevented</title>
 <input type="file" webkitdirectory>
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(async _ => {
   const promise = new Promise(
       resolve => mockFileChooserFactory.addEventListener('open', resolve));
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keyup.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keyup.html
index c5b5e78c..e132658 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keyup.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter-prevent-keyup.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE WEBKITDIRECTORY and key events - Enter keyup prevented</title>
 <input type="file" webkitdirectory>
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(_ => {
   const promise = new Promise((resolve, reject) => {
     mockFileChooserFactory.addEventListener(
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter.html
index 22d7f481..cb4bfc6c 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-enter.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE WEBKITDIRECTORY and key events - Enter key</title>
 <input type="file" webkitdirectory>
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(async _ => {
   const promise = new Promise(
       resolve => mockFileChooserFactory.addEventListener('open', resolve));
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-other.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-other.html
index 2892a245..c3007ab8 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-other.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-other.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE WEBKITDIRECTORY and key events - Other keys</title>
 <input type="file" webkitdirectory>
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(_ => {
   const promise = new Promise((resolve, reject) => {
     mockFileChooserFactory.addEventListener(
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-space.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-space.html
index e1851b8..64967140 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-space.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-input-webkitdirectory-key-space.html
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <title>INPUT TYPE=FILE WEBKITDIRECTORY and key events - Space key</title>
 <input type="file" webkitdirectory>
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 promise_test(async _ => {
   const promise = new Promise(
       resolve => mockFileChooserFactory.addEventListener('open', resolve));
diff --git a/third_party/blink/web_tests/wpt_internal/forms/file/file-webkitRelativePath.html b/third_party/blink/web_tests/wpt_internal/forms/file/file-webkitRelativePath.html
index 5528179..ca214908 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/file/file-webkitRelativePath.html
+++ b/third_party/blink/web_tests/wpt_internal/forms/file/file-webkitRelativePath.html
@@ -3,14 +3,12 @@
 <title>Test webkitRelativePath IDL attribute</title>
 </head>
 <body>
-<script src="/gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.js"></script>
-<script src="../resources/mock-file-chooser.js"></script>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-
 <input type="file" webkitdirectory>
-<script>
+<script type="module">
+import {mockFileChooserFactory} from '../resources/mock-file-chooser.js';
+
 // This is an automated-version of external/wpt/entries-api/file-webkitRelativePath-manual.html
 
 function clickElement(e) {
diff --git a/third_party/blink/web_tests/wpt_internal/forms/resources/mock-file-chooser.js b/third_party/blink/web_tests/wpt_internal/forms/resources/mock-file-chooser.js
index f32214b4..a5cae36 100644
--- a/third_party/blink/web_tests/wpt_internal/forms/resources/mock-file-chooser.js
+++ b/third_party/blink/web_tests/wpt_internal/forms/resources/mock-file-chooser.js
@@ -1,21 +1,17 @@
-(function() {
-
-// This function stabilize the line number in console messages from this script.
-function log(str) {
-  console.log(str);
-}
+import {FileChooser, FileChooserParams_Mode, FileChooserReceiver} from '/gen/third_party/blink/public/mojom/choosers/file_chooser.mojom.m.js';
 
 class MockFileChooserFactory extends EventTarget {
   constructor() {
     super();
     this.paths_ = [];
     this.baseDir_ = undefined;
-    this.bindingSet_ = new mojo.BindingSet(blink.mojom.FileChooser);
+    this.receiver_ = undefined;
     this.interceptor_ =
-        new MojoInterfaceInterceptor(blink.mojom.FileChooser.name);
+        new MojoInterfaceInterceptor(FileChooser.$interfaceName);
     this.interceptor_.oninterfacerequest = e => {
-      this.bindingSet_.addBinding(
-          new MockFileChooser(this, this.paths_, this.baseDir_), e.handle);
+      this.receiver_ = new FileChooserReceiver(
+          new MockFileChooser(this, this.paths_, this.baseDir_));
+      this.receiver_.$.bindHandle(e.handle);
       this.paths_ = [];
     };
     this.interceptor_.start();
@@ -29,7 +25,7 @@
 }
 
 function modeToString(mode) {
-  let Mode = blink.mojom.FileChooserParams.Mode;
+  let Mode = FileChooserParams_Mode;
   switch (mode) {
   case Mode.kOpen:
     return 'kOpen';
@@ -53,7 +49,6 @@
 
   openFileChooser(params) {
     this.params_ = params;
-    log(`FileChooser: opened; mode=${modeToString(params.mode)}`);
 
     this.factory_.dispatchEvent(
         new CustomEvent('open', {detail: modeToString(params.mode)}));
@@ -67,19 +62,10 @@
   }
 
   chooseFiles_(resolve) {
-    if (this.paths_.length > 0) {
-      log('FileChooser: selected: ' + this.paths_);
-    } else {
-      log('FileChooser: canceled');
-    }
     const file_info_list = [];
     for (const path of this.paths_) {
-      file_info_list.push(new blink.mojom.FileChooserFileInfo({
-          nativeFile: {
-              filePath: toFilePath(path),
-              displayName: {data:[]}
-          }
-      }));
+      const nativeFile = {filePath: toFilePath(path), displayName: {data: []}};
+      file_info_list.push({nativeFile});
     }
     const basePath = this.baseDir_ || '';
     resolve({result: {files: file_info_list,
@@ -105,6 +91,4 @@
   return {path: string16Path};
 }
 
-window.mockFileChooserFactory = new MockFileChooserFactory();
-
-})();
+export const mockFileChooserFactory = new MockFileChooserFactory();
diff --git a/third_party/blink/web_tests/reporting-observer/buffer-overflow.html b/third_party/blink/web_tests/wpt_internal/reporting/buffer-overflow.html
similarity index 87%
rename from third_party/blink/web_tests/reporting-observer/buffer-overflow.html
rename to third_party/blink/web_tests/wpt_internal/reporting/buffer-overflow.html
index 8815c546..cd43a3d 100644
--- a/third_party/blink/web_tests/reporting-observer/buffer-overflow.html
+++ b/third_party/blink/web_tests/wpt_internal/reporting/buffer-overflow.html
@@ -1,6 +1,6 @@
 <!doctype html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script src="resources/intervention.js"></script>
 
 <div id="target" style="padding: 10px; background-color: blue;">
diff --git a/third_party/blink/web_tests/reporting-observer/buffering.html b/third_party/blink/web_tests/wpt_internal/reporting/buffering.html
similarity index 92%
rename from third_party/blink/web_tests/reporting-observer/buffering.html
rename to third_party/blink/web_tests/wpt_internal/reporting/buffering.html
index a02789b..662c6cf 100644
--- a/third_party/blink/web_tests/reporting-observer/buffering.html
+++ b/third_party/blink/web_tests/wpt_internal/reporting/buffering.html
@@ -1,6 +1,6 @@
 <!doctype html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script src="resources/intervention.js"></script>
 
 <div id="target" style="padding: 10px; background-color: blue;">
diff --git a/third_party/blink/web_tests/wpt_internal/reporting/deprecation.html b/third_party/blink/web_tests/wpt_internal/reporting/deprecation.html
new file mode 100644
index 0000000..eb9bf6f
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/reporting/deprecation.html
@@ -0,0 +1,5 @@
+<!doctype html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<p>Testing deprecation reports and ReportingObserver</p>
+<script src="resources/deprecation.js"></script>
diff --git a/third_party/blink/web_tests/reporting-observer/intervention.html b/third_party/blink/web_tests/wpt_internal/reporting/intervention.html
similarity index 87%
rename from third_party/blink/web_tests/reporting-observer/intervention.html
rename to third_party/blink/web_tests/wpt_internal/reporting/intervention.html
index 043d3ed..762878b9 100644
--- a/third_party/blink/web_tests/reporting-observer/intervention.html
+++ b/third_party/blink/web_tests/wpt_internal/reporting/intervention.html
@@ -1,6 +1,6 @@
 <!doctype html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script src="resources/intervention.js"></script>
 
 <div id="target" style="padding: 10px; background-color: blue;">
@@ -18,11 +18,10 @@
 
       // Ensure that the contents of the report are valid.
       assert_equals(reports[0].type, "intervention");
-      assert_true(reports[0].url.endsWith(
-          "reporting-observer/intervention.html"));
+      assert_true(reports[0].url.endsWith("reporting/intervention.html"));
       assert_equals(typeof reports[0].body.id, "string");
       assert_true(reports[0].body.sourceFile.endsWith(
-          "reporting-observer/resources/intervention.js"));
+          "reporting/resources/intervention.js"));
       assert_equals(typeof reports[0].body.lineNumber, "number");
       assert_equals(typeof reports[0].body.columnNumber, "number");
       assert_equals(typeof reports[0].body.message, "string");
diff --git a/third_party/blink/web_tests/reporting-observer/reporting-api.html b/third_party/blink/web_tests/wpt_internal/reporting/reporting-api.html
similarity index 72%
rename from third_party/blink/web_tests/reporting-observer/reporting-api.html
rename to third_party/blink/web_tests/wpt_internal/reporting/reporting-api.html
index 9a9158f..0d0ff75 100644
--- a/third_party/blink/web_tests/reporting-observer/reporting-api.html
+++ b/third_party/blink/web_tests/wpt_internal/reporting/reporting-api.html
@@ -1,25 +1,25 @@
 <!DOCTYPE html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
-<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
-<script src="file:///gen/third_party/blink/public/mojom/reporting/reporting.mojom.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script src="resources/intervention.js"></script>
 
 <div id="target" style="padding: 10px; background-color: blue;">
   <p>Testing Reporting API.</p>
 </div>
 
-<script>
+<script type="module">
+import {ReportingServiceProxy, ReportingServiceProxyReceiver} from '/gen/third_party/blink/public/mojom/reporting/reporting.mojom.m.js';
+
 // Mock implementation of ReportingServiceProxy.
 // |promise| property is always a promise for the next report to be queued.
 class MockReportingServiceProxy {
   constructor() {
-    this.bindingSet = new mojo.BindingSet(blink.mojom.ReportingServiceProxy);
+    this.receiver = new ReportingServiceProxyReceiver(this);
     this.resetPromise();
   }
 
   bind(handle) {
-    this.bindingSet.addBinding(this, handle);
+    this.receiver.$.bindHandle(handle);
   }
 
   resetPromise() {
@@ -38,11 +38,16 @@
     this.resolve([url, id, message, sourceFile, lineNumber, columnNumber]);
     this.resetPromise();
   }
+
+  queueCspViolationReport() {}
+  queueFeaturePolicyViolationReport() {}
+  queueDocumentPolicyViolationReport() {}
 }
 
 // Make an instance and have it receive the request.
 var proxy = new MockReportingServiceProxy();
-var interceptor = new MojoInterfaceInterceptor(blink.mojom.ReportingServiceProxy.name);
+var interceptor = new MojoInterfaceInterceptor(
+    ReportingServiceProxy.$interfaceName);
 interceptor.oninterfacerequest = e => proxy.bind(e.handle);
 interceptor.start();
 
@@ -55,11 +60,11 @@
   // Ensure the deprecation report is generated and routed to the reporting mojo
   // interface.
   let [url, id, anticipatedRemoval, message, sourceFile, lineNumber, columnNumber] = await promise;
-  assert_true(url.url.endsWith("reporting-observer/reporting-api.html"));
+  assert_true(url.url.endsWith("reporting/reporting-api.html"));
   assert_equals(typeof id, "string");
   assert_equals(typeof anticipatedRemoval, "object");
   assert_equals(typeof message, "string");
-  assert_true(sourceFile.endsWith("reporting-observer/reporting-api.html"));
+  assert_true(sourceFile.endsWith("reporting/reporting-api.html"));
   assert_equals(typeof lineNumber, "number");
   assert_equals(typeof columnNumber, "number");
 }, "Deprecation report");
@@ -72,10 +77,10 @@
   // Ensure the intervention report is generated and routed to the reporting
   // mojo interface.
   let [url, id, message, sourceFile, lineNumber, columnNumber] = await promise;
-  assert_true(url.url.endsWith("reporting-observer/reporting-api.html"));
+  assert_true(url.url.endsWith("reporting/reporting-api.html"));
   assert_equals(typeof id, "string");
   assert_equals(typeof message, "string");
-  assert_true(sourceFile.endsWith("reporting-observer/resources/intervention.js"));
+  assert_true(sourceFile.endsWith("reporting/resources/intervention.js"));
   assert_equals(typeof lineNumber, "number");
   assert_equals(typeof columnNumber, "number");
 }, "Intervention report");
diff --git a/third_party/blink/web_tests/reporting-observer/resources/deprecation.js b/third_party/blink/web_tests/wpt_internal/reporting/resources/deprecation.js
similarity index 93%
rename from third_party/blink/web_tests/reporting-observer/resources/deprecation.js
rename to third_party/blink/web_tests/wpt_internal/reporting/resources/deprecation.js
index ef2cf94..84bf037 100644
--- a/third_party/blink/web_tests/reporting-observer/resources/deprecation.js
+++ b/third_party/blink/web_tests/wpt_internal/reporting/resources/deprecation.js
@@ -11,13 +11,12 @@
       // Ensure that the contents of the reports are valid.
       for(let report of reports) {
         assert_equals(report.type, "deprecation");
-        assert_true(report.url.endsWith(
-            "reporting-observer/deprecation.html"));
+        assert_true(report.url.endsWith("reporting/deprecation.html"));
         assert_equals(typeof report.body.id, "string");
         assert_equals(typeof report.body.anticipatedRemoval, "object");
         assert_equals(typeof report.body.message, "string");
         assert_true(report.body.sourceFile.endsWith(
-            "reporting-observer/resources/deprecation.js"));
+            "reporting/resources/deprecation.js"));
         assert_equals(typeof report.body.lineNumber, "number");
         assert_equals(typeof report.body.columnNumber, "number");
         // Ensure the toJSON call is successful.
diff --git a/third_party/blink/web_tests/reporting-observer/resources/intervention.js b/third_party/blink/web_tests/wpt_internal/reporting/resources/intervention.js
similarity index 100%
rename from third_party/blink/web_tests/reporting-observer/resources/intervention.js
rename to third_party/blink/web_tests/wpt_internal/reporting/resources/intervention.js
diff --git a/third_party/blink/web_tests/reporting-observer/take-records.html b/third_party/blink/web_tests/wpt_internal/reporting/take-records.html
similarity index 88%
rename from third_party/blink/web_tests/reporting-observer/take-records.html
rename to third_party/blink/web_tests/wpt_internal/reporting/take-records.html
index 94b4ab9..6fdd1bc 100644
--- a/third_party/blink/web_tests/reporting-observer/take-records.html
+++ b/third_party/blink/web_tests/wpt_internal/reporting/take-records.html
@@ -1,6 +1,6 @@
 <!doctype html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script src="resources/intervention.js"></script>
 
 <div id="target" style="padding: 10px; background-color: blue;">
diff --git a/third_party/blink/web_tests/reporting-observer/type-filtering.html b/third_party/blink/web_tests/wpt_internal/reporting/type-filtering.html
similarity index 92%
rename from third_party/blink/web_tests/reporting-observer/type-filtering.html
rename to third_party/blink/web_tests/wpt_internal/reporting/type-filtering.html
index 1d13037..0b94029 100644
--- a/third_party/blink/web_tests/reporting-observer/type-filtering.html
+++ b/third_party/blink/web_tests/wpt_internal/reporting/type-filtering.html
@@ -1,6 +1,6 @@
 <!doctype html>
-<script src="../resources/testharness.js"></script>
-<script src="../resources/testharnessreport.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
 <script src="resources/intervention.js"></script>
 
 <div id="target" style="padding: 10px; background-color: blue;">
diff --git a/third_party/protobuf/proto_library.gni b/third_party/protobuf/proto_library.gni
index 012d12f..bf0b143 100644
--- a/third_party/protobuf/proto_library.gni
+++ b/third_party/protobuf/proto_library.gni
@@ -169,6 +169,17 @@
     generate_descriptor = ""
   }
 
+  # exclude_imports is only used for generating the descriptor. Therefore, the
+  # check needs to be here to avoid complaints from GN about the unused
+  # variable.
+  if (generate_descriptor != "") {
+    if (defined(invoker.exclude_imports)) {
+      exclude_imports = invoker.exclude_imports
+    } else {
+      exclude_imports = false
+    }
+  }
+
   if (defined(invoker.generator_plugin_label)) {
     # Straightforward way to get the name of executable doesn't work because
     # |root_out_dir| and |root_build_dir| may differ in cross-compilation and
@@ -388,6 +399,10 @@
           "$root_gen_dir/" + proto_out_dir + "/" + generate_descriptor + ".d"
       rel_depfile = rebase_path(depfile, root_build_dir)
 
+      if (exclude_imports) {
+        args += [ "--exclude-imports" ]
+      }
+
       args += [
         "--descriptor-set-out",
         rel_descriptor_out,
@@ -499,8 +514,10 @@
       configs += [ "//build/config/sanitizers:not_fuzzed" ]
     }
 
-    public_configs = [ "//third_party/protobuf:using_proto",
-        "//third_party/protobuf:allow_deprecated_proto_fields"  ]
+    public_configs = [
+      "//third_party/protobuf:using_proto",
+      "//third_party/protobuf:allow_deprecated_proto_fields",
+    ]
     public_deps = []
 
     if (generate_cc || generate_with_plugin) {
diff --git a/third_party/wpt_tools/README.chromium b/third_party/wpt_tools/README.chromium
index 892e37e8..be9cf2e 100644
--- a/third_party/wpt_tools/README.chromium
+++ b/third_party/wpt_tools/README.chromium
@@ -1,7 +1,7 @@
 Name: web-platform-tests - Test Suites for Web Platform specifications
 Short Name: wpt
 URL: https://github.com/web-platform-tests/wpt/
-Version: 79d2debce531d115566192dccf70f5d8fb9ced53
+Version: 9ff620bc1109a3f7f8c9acca76726f9da783bb63
 License: LICENSES FOR W3C TEST SUITES (https://www.w3.org/Consortium/Legal/2008/03-bsd-license.html)
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/wpt_tools/checkout.sh b/third_party/wpt_tools/checkout.sh
index 3c5602d..c85ebba 100755
--- a/third_party/wpt_tools/checkout.sh
+++ b/third_party/wpt_tools/checkout.sh
@@ -9,7 +9,7 @@
 
 TARGET_DIR=$DIR/wpt
 REMOTE_REPO="https://github.com/web-platform-tests/wpt.git"
-WPT_HEAD=79d2debce531d115566192dccf70f5d8fb9ced53
+WPT_HEAD=9ff620bc1109a3f7f8c9acca76726f9da783bb63
 
 function clone {
   # Remove existing repo if already exists.
diff --git a/third_party/wpt_tools/wpt/tools/serve/serve.py b/third_party/wpt_tools/wpt/tools/serve/serve.py
index 0a5f16ef..f09fe24 100644
--- a/third_party/wpt_tools/wpt/tools/serve/serve.py
+++ b/third_party/wpt_tools/wpt/tools/serve/serve.py
@@ -849,7 +849,7 @@
             "wss": ["auto"],
         },
         "check_subdomains": True,
-        "log_level": "debug",
+        "log_level": "info",
         "bind_address": True,
         "ssl": {
             "type": "pregenerated",
@@ -931,6 +931,9 @@
         else:
             raise ValueError("Config path %s does not exist" % other_path)
 
+    if kwargs.get("verbose"):
+        rv.log_level = "debug"
+
     overriding_path_args = [("doc_root", "Document root"),
                             ("ws_doc_root", "WebSockets document root")]
     for key, title in overriding_path_args:
@@ -963,6 +966,7 @@
                         help="Disable the HTTP/2.0 server")
     parser.add_argument("--quic-transport", action="store_true", help="Enable QUIC server for WebTransport")
     parser.add_argument("--exit-after-start", action="store_true", help="Exit after starting servers")
+    parser.add_argument("--verbose", action="store_true", help="Enable verbose logging")
     parser.set_defaults(report=False)
     parser.set_defaults(is_wave=False)
     return parser
diff --git a/third_party/wpt_tools/wpt/tools/wpt/run.py b/third_party/wpt_tools/wpt/tools/wpt/run.py
index 561b8e8..3d380eab 100644
--- a/third_party/wpt_tools/wpt/tools/wpt/run.py
+++ b/third_party/wpt_tools/wpt/tools/wpt/run.py
@@ -248,7 +248,7 @@
                                                     channel=kwargs["browser_channel"])
             kwargs["prefs_root"] = prefs_root
 
-        if kwargs["headless"] is None:
+        if kwargs["headless"] is None and not kwargs["debug_test"]:
             kwargs["headless"] = True
             logger.info("Running in headless mode, pass --no-headless to disable")
 
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/firefox.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/firefox.py
index b8f1c7d8..83a883b 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/firefox.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/browsers/firefox.py
@@ -53,11 +53,11 @@
     if kwargs["timeout_multiplier"] is not None:
         return kwargs["timeout_multiplier"]
     if test_type == "reftest":
-        if run_info_data["debug"] or run_info_data.get("asan"):
+        if run_info_data["debug"] or run_info_data.get("asan") or run_info_data.get("tsan"):
             return 4
         else:
             return 2
-    elif run_info_data["debug"] or run_info_data.get("asan"):
+    elif run_info_data["debug"] or run_info_data.get("asan") or run_info_data.get("tsan"):
         if run_info_data.get("ccov"):
             return 4
         else:
@@ -101,7 +101,7 @@
             "config": config,
             "browser_channel": kwargs["browser_channel"],
             "headless": kwargs["headless"],
-            "preload_browser": kwargs["preload_browser"],
+            "preload_browser": kwargs["preload_browser"] and not kwargs["pause_after_test"] and not kwargs["num_test_groups"] == 1,
             "specialpowers_path": kwargs["specialpowers_path"]}
 
 
@@ -158,6 +158,7 @@
     executor_kwargs["debug"] = run_info_data["debug"]
     executor_kwargs["ccov"] = run_info_data.get("ccov", False)
     executor_kwargs["browser_version"] = run_info_data.get("browser_version")
+    executor_kwargs["debug_test"] = kwargs["debug_test"]
     return executor_kwargs
 
 
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/environment.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/environment.py
index d98e120..b68fce0 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/environment.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/environment.py
@@ -55,7 +55,7 @@
     """Context manager that owns the test environment i.e. the http and
     websockets servers"""
     def __init__(self, test_paths, testharness_timeout_multipler,
-                 pause_after_test, debug_info, options, ssl_config, env_extras,
+                 pause_after_test, debug_test, debug_info, options, ssl_config, env_extras,
                  enable_quic=False, mojojs_path=None):
         self.test_paths = test_paths
         self.server = None
@@ -63,6 +63,7 @@
         self.config = None
         self.testharness_timeout_multipler = testharness_timeout_multipler
         self.pause_after_test = pause_after_test
+        self.debug_test = debug_test
         self.test_server_port = options.pop("test_server_port", True)
         self.debug_info = debug_info
         self.options = options if options is not None else {}
@@ -195,7 +196,8 @@
                 (self.options.get("testharnessreport", "testharnessreport.js"),
                  {"output": self.pause_after_test,
                   "timeout_multiplier": self.testharness_timeout_multipler,
-                  "explicit_timeout": "true" if self.debug_info is not None else "false"},
+                  "explicit_timeout": "true" if self.debug_info is not None else "false",
+                  "debug": "true" if self.debug_test else "false"},
                  "text/javascript;charset=utf8",
                  "/resources/testharnessreport.js")]:
             path = os.path.normpath(os.path.join(here, path))
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/base.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/base.py
index 539c791fb..1b754219 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/base.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/base.py
@@ -42,7 +42,7 @@
     # want to view the results, however, the executor has to skip that cleanup.
     if kwargs["pause_after_test"] or kwargs["pause_on_unexpected"]:
         executor_kwargs["cleanup_after_test"] = False
-
+    executor_kwargs["debug_test"] = kwargs["debug_test"]
     return executor_kwargs
 
 
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executormarionette.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executormarionette.py
index e5d7683f..d61e1f2 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executormarionette.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executormarionette.py
@@ -40,7 +40,8 @@
                        GenerateTestReportProtocolPart,
                        VirtualAuthenticatorProtocolPart,
                        SetPermissionProtocolPart,
-                       PrintProtocolPart)
+                       PrintProtocolPart,
+                       DebugProtocolPart)
 from ..webdriver_server import GeckoDriverServer
 
 
@@ -625,6 +626,30 @@
         finally:
             _switch_to_window(self.marionette, handle)
 
+
+class MarionetteDebugProtocolPart(DebugProtocolPart):
+    def setup(self):
+        self.marionette = self.parent.marionette
+
+    def load_devtools(self):
+        with self.marionette.using_context(self.marionette.CONTEXT_CHROME):
+            self.parent.base.execute_script("""
+const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm");
+const { TargetFactory } = require("devtools/client/framework/target");
+const { gDevTools } = require("devtools/client/framework/devtools");
+
+const callback = arguments[arguments.length - 1];
+
+async function loadDevTools() {
+    const target = await TargetFactory.forTab(window.gBrowser.selectedTab);
+    await gDevTools.showToolbox(target, "webconsole", "window");
+}
+
+loadDevTools().catch(() => dump("Devtools failed to load"))
+              .then(callback);
+""", asynchronous=True)
+
+
 class MarionetteProtocol(Protocol):
     implements = [MarionetteBaseProtocolPart,
                   MarionetteTestharnessProtocolPart,
@@ -641,7 +666,8 @@
                   MarionetteGenerateTestReportProtocolPart,
                   MarionetteVirtualAuthenticatorProtocolPart,
                   MarionetteSetPermissionProtocolPart,
-                  MarionettePrintProtocolPart]
+                  MarionettePrintProtocolPart,
+                  MarionetteDebugProtocolPart]
 
     def __init__(self, executor, browser, capabilities=None, timeout_multiplier=1, e10s=True, ccov=False):
         do_delayed_imports()
@@ -770,7 +796,7 @@
 
     def __init__(self, logger, browser, server_config, timeout_multiplier=1,
                  close_after_done=True, debug_info=None, capabilities=None,
-                 debug=False, ccov=False, **kwargs):
+                 debug=False, ccov=False, debug_test=False, **kwargs):
         """Marionette-based executor for testharness.js tests"""
         TestharnessExecutor.__init__(self, logger, browser, server_config,
                                      timeout_multiplier=timeout_multiplier,
@@ -786,6 +812,7 @@
         self.close_after_done = close_after_done
         self.window_id = str(uuid.uuid4())
         self.debug = debug
+        self.debug_test = debug_test
 
         self.install_extensions = browser.extensions
 
@@ -854,6 +881,9 @@
         self.protocol.base.set_window(test_window)
         protocol.testharness.test_window_loaded()
 
+        if self.debug_test:
+            self.protocol.debug.load_devtools()
+
         handler = CallbackHandler(self.logger, protocol, test_window)
         protocol.marionette.navigate(url)
         while True:
@@ -880,7 +910,7 @@
                  debug_info=None, reftest_internal=False,
                  reftest_screenshot="unexpected", ccov=False,
                  group_metadata=None, capabilities=None, debug=False,
-                 browser_version=None, **kwargs):
+                 browser_version=None, debug_test=False, **kwargs):
         """Marionette-based executor for reftests"""
         RefTestExecutor.__init__(self,
                                  logger,
@@ -903,6 +933,7 @@
         self.original_pref_values = {}
         self.group_metadata = group_metadata
         self.debug = debug
+        self.debug_test = debug_test
 
         with open(os.path.join(here, "reftest.js")) as f:
             self.script = f.read()
@@ -968,6 +999,10 @@
             if assertion_count is not None:
                 result["extra"]["assertion_count"] = assertion_count
 
+        if self.debug_test and result["status"] in ["PASS", "FAIL", "ERROR"] and "extra" in result:
+            self.parent.base.set_window(self.parent.base.window_handles()[0])
+            self.protocol.debug.load_reftest_analyzer(test, result)
+
         return self.convert_result(test, result)
 
     def screenshot(self, test, viewport_size, dpi, page_ranges):
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py
index e6c5f9f1..0a968bf3 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py
@@ -26,7 +26,8 @@
                        TestDriverProtocolPart,
                        GenerateTestReportProtocolPart,
                        SetPermissionProtocolPart,
-                       VirtualAuthenticatorProtocolPart)
+                       VirtualAuthenticatorProtocolPart,
+                       DebugProtocolPart)
 
 import webdriver as client
 from webdriver import error
@@ -292,6 +293,11 @@
         return self.webdriver.send_session_command("POST", "webauthn/authenticator/%s/uv" % authenticator_id, uv)
 
 
+class WebDriverDebugProtocolPart(DebugProtocolPart):
+    def load_devtools(self):
+        raise NotImplementedError()
+
+
 class WebDriverProtocol(Protocol):
     implements = [WebDriverBaseProtocolPart,
                   WebDriverTestharnessProtocolPart,
@@ -303,7 +309,8 @@
                   WebDriverTestDriverProtocolPart,
                   WebDriverGenerateTestReportProtocolPart,
                   WebDriverSetPermissionProtocolPart,
-                  WebDriverVirtualAuthenticatorProtocolPart]
+                  WebDriverVirtualAuthenticatorProtocolPart,
+                  WebDriverDebugProtocolPart]
 
     def __init__(self, executor, browser, capabilities, **kwargs):
         super(WebDriverProtocol, self).__init__(executor, browser)
@@ -508,7 +515,7 @@
 
     def __init__(self, logger, browser, server_config, timeout_multiplier=1,
                  screenshot_cache=None, close_after_done=True,
-                 debug_info=None, capabilities=None, **kwargs):
+                 debug_info=None, capabilities=None, debug_test=False, **kwargs):
         """WebDriver-based executor for reftests"""
         RefTestExecutor.__init__(self,
                                  logger,
@@ -523,6 +530,7 @@
         self.implementation = RefTestImplementation(self)
         self.close_after_done = close_after_done
         self.has_window = False
+        self.debug_test = debug_test
 
         with open(os.path.join(here, "test-wait.js")) as f:
             self.wait_script = f.read() % {"classname": "reftest-wait"}
@@ -547,6 +555,9 @@
 
         result = self.implementation.run_test(test)
 
+        if self.debug_test and result["status"] in ["PASS", "FAIL", "ERROR"] and "extra" in result:
+            self.protocol.debug.load_reftest_analyzer(test, result)
+
         return self.convert_result(test, result)
 
     def screenshot(self, test, viewport_size, dpi, page_ranges):
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/protocol.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/protocol.py
index 8bdc8b0..05e251c 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/protocol.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/protocol.py
@@ -515,3 +515,32 @@
     def render_as_pdf(self, width, height):
         """Output document as PDF"""
         pass
+
+
+class DebugProtocolPart(ProtocolPart):
+    """Protocol part for debugging test failures."""
+    __metaclass__ = ABCMeta
+
+    name = "debug"
+
+    @abstractmethod
+    def load_devtools(self):
+        """Load devtools in the current window"""
+        pass
+
+    def load_reftest_analyzer(self, test, result):
+        import io
+        import mozlog
+        from six.moves.urllib.parse import quote, urljoin
+
+        debug_test_logger = mozlog.structuredlog.StructuredLogger("debug_test")
+        output = io.StringIO()
+        debug_test_logger.suite_start([])
+        debug_test_logger.add_handler(mozlog.handlers.StreamHandler(output, formatter=mozlog.formatters.TbplFormatter()))
+        debug_test_logger.test_start(test.id)
+        # Always use PASS as the expected value so we get output even for expected failures
+        debug_test_logger.test_end(test.id, result["status"], "PASS", extra=result.get("extra"))
+
+        self.parent.base.load(urljoin(self.parent.executor.server_url("https"),
+                              "/common/third_party/reftest-analyzer.xhtml#log=%s" %
+                               quote(output.getvalue())))
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/font.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/font.py
index 910358f..97d74da4 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/font.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/font.py
@@ -80,10 +80,10 @@
         fonts = check_output(['/usr/sbin/system_profiler', '-xml', 'SPFontsDataType'])
         try:
             # if py3
-            readPlistFromBytes = plistlib.readPlistFromBytes
+            load_plist = plistlib.loads
         except AttributeError:
-            readPlistFromBytes = plistlib.readPlistFromString
-        fonts = readPlistFromBytes(fonts)
+            load_plist = plistlib.readPlistFromString
+        fonts = load_plist(fonts)
         assert len(fonts) == 1
         for font in fonts[0]['_items']:
             if font['path'] == installed_font_path:
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport-servo.js b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport-servo.js
index a10b69df..4a27dc2 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport-servo.js
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport-servo.js
@@ -1,4 +1,4 @@
-var props = {output:%(output)d};
+var props = {output:%(output)d, debug: %(debug)s};
 var start_loc = document.createElement('a');
 start_loc.href = location.href;
 setup(props);
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport-servodriver.js b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport-servodriver.js
index c888413..7819538 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport-servodriver.js
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport-servodriver.js
@@ -1,4 +1,4 @@
-setup({output:%(output)d});
+setup({output:%(output)d, debug: %(debug)s});
 
 add_completion_callback(function() {
     add_completion_callback(function (tests, status) {
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport.js b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport.js
index 9cd680e1..d3856924 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport.js
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/testharnessreport.js
@@ -73,6 +73,7 @@
   var props = {output: %(output)d,
                timeout_multiplier: %(timeout_multiplier)s,
                explicit_timeout: %(explicit_timeout)s,
+               debug: %(debug)s,
                message_events: ["completion"]};
 
   add_completion_callback(function(tests, harness_status) {
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptcommandline.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptcommandline.py
index bfd6491..2b6d4b35 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptcommandline.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptcommandline.py
@@ -170,6 +170,8 @@
                                  help="Halt the test runner after each test (this happens by default if only a single test is run)")
     debugging_group.add_argument('--no-pause-after-test', dest="pause_after_test", action="store_false",
                                  help="Don't halt the test runner irrespective of the number of tests run")
+    debugging_group.add_argument('--debug-test', dest="debug_test", action="store_true",
+                                 help="Run tests with additional debugging features enabled")
 
     debugging_group.add_argument('--pause-on-unexpected', action="store_true",
                                  help="Halt the test runner when an unexpected result is encountered")
@@ -592,7 +594,7 @@
         kwargs["reftest_internal"] = True
 
     if kwargs["reftest_screenshot"] is None:
-        kwargs["reftest_screenshot"] = "unexpected"
+        kwargs["reftest_screenshot"] = "unexpected" if not kwargs["debug_test"] else "always"
 
     if kwargs["enable_webrender"] is None:
         kwargs["enable_webrender"] = False
diff --git a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptrunner.py b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptrunner.py
index 3fc9e39..7182510 100644
--- a/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptrunner.py
+++ b/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/wptrunner.py
@@ -141,6 +141,8 @@
             return False
         if kwargs["headless"]:
             return False
+        if kwargs["debug_test"]:
+            return True
         tests = test_loader.tests
         is_single_testharness = (sum(len(item) for item in itervalues(tests)) == 1 and
                                  len(tests.get("testharness", [])) == 1)
@@ -224,6 +226,7 @@
         with env.TestEnvironment(test_paths,
                                  testharness_timeout_multipler,
                                  kwargs["pause_after_test"],
+                                 kwargs["debug_test"],
                                  kwargs["debug_info"],
                                  product.env_options,
                                  ssl_config,
@@ -284,6 +287,7 @@
                                                                 test_type,
                                                                 run_info,
                                                                 config=test_environment.config,
+                                                                num_test_groups=len(test_groups),
                                                                 **kwargs)
 
                     executor_cls = product.executor_classes.get(test_type)
diff --git a/tools/binary_size/BUILD.gn b/tools/binary_size/BUILD.gn
index e6806bf7..383ab115 100644
--- a/tools/binary_size/BUILD.gn
+++ b/tools/binary_size/BUILD.gn
@@ -21,9 +21,13 @@
   data_deps = [ "//third_party/catapult/tracing:convert_chart_json" ]
 }
 
-if (is_linux || is_chromeos) {
-  group("caspian") {
-    deps = [ "//tools/binary_size/libsupersize/caspian:cli($host_toolchain)" ]
+if (is_linux) {
+  group("caspian_all") {
+    testonly = true
+    deps = [
+      "//tools/binary_size/libsupersize/caspian:caspian_cli",
+      "//tools/binary_size/libsupersize/caspian:caspian_unittests",
+    ]
   }
 }
 
diff --git a/tools/binary_size/libsupersize/caspian/BUILD.gn b/tools/binary_size/libsupersize/caspian/BUILD.gn
index 7364186..a032e2d 100644
--- a/tools/binary_size/libsupersize/caspian/BUILD.gn
+++ b/tools/binary_size/libsupersize/caspian/BUILD.gn
@@ -54,7 +54,7 @@
   ]
 }
 
-executable("cli") {
+executable("caspian_cli") {
   sources = [ "cli.cc" ]
   deps = [ ":caspian-lib" ]
   cflags = [ "-Wall" ]
diff --git a/tools/binary_size/libsupersize/caspian/README.md b/tools/binary_size/libsupersize/caspian/README.md
index 013eaec8..3b37625d 100644
--- a/tools/binary_size/libsupersize/caspian/README.md
+++ b/tools/binary_size/libsupersize/caspian/README.md
@@ -4,7 +4,36 @@
 
 Caspian is the name for the WebAssembly portion of the SuperSize Tiger Viewer.
 
-## How do I build it?
+## Applying patches
+
+Caspian needs some minor edits that we don't want to commit:
+
+```sh
+git apply -3 tools/binary_size/libsupersize/caspian/wasmbuild.patch
+```
+
+To re-create .patch file:
+```sh
+git add ...files to include in patch...
+git diff --staged > tools/binary_size/libsupersize/caspian/wasmbuild.patch
+# Double check that only expected files are included in the patch:
+grep +++ tools/binary_size/libsupersize/caspian/wasmbuild.patch
+```
+
+## Building the test app & tests
+There is a test and a binary that you can run to help with development (and
+allows debugging outside of the browser).
+
+```sh
+OUT=$out/linux_debug
+autoninja -C $OUT caspian_cli caspian_unittests
+$OUT/caspian_cli --help
+$OUT/caspian_unittests
+# To debug a crash:
+lldb $OUT/caspian_cli validatediff supersize_diff.sizediff
+```
+
+## Building the wasm module
 
 Install emscripten from:
 https://emscripten.org/docs/getting_started/downloads.html
@@ -14,24 +43,18 @@
 ./emsdk install 2.0.3 && ./emsdk activate 2.0.3 && source ./emsdk_env.sh
 ```
 
+Build:
 ```sh
-git apply -3 tools/binary_size/libsupersize/caspian/wasmbuild.patch
 gn gen out/caspian --args='is_official_build=true treat_warnings_as_errors=false fatal_linker_warnings=false chrome_pgo_phase=0'
-( cd out/caspian; autoninja tools/binary_size:caspian_web && cp wasm/caspian_web.* ../../tools/binary_size/libsupersize/static/ )
+( cd out/caspian; autoninja caspian_web && cp wasm/caspian_web.* ../../tools/binary_size/libsupersize/static/ )
 ```
 
-Then run locally via:
+Run local test server:
 ```sh
 tools/binary_size/libsupersize/upload_html_viewer.py --local
 ```
 
-or upload to hosted site via:
+Deploy to firebase:
 ```sh
 tools/binary_size/libsupersize/upload_html_viewer.py [--prod | --staging]
 ```
-
-To re-create .patch file:
-```sh
-git add ...any files...
-git diff --staged > tools/binary_size/libsupersize/caspian/wasmbuild.patch
-```
diff --git a/tools/binary_size/libsupersize/caspian/cli.cc b/tools/binary_size/libsupersize/caspian/cli.cc
index 2fcffb9..d8954c24 100644
--- a/tools/binary_size/libsupersize/caspian/cli.cc
+++ b/tools/binary_size/libsupersize/caspian/cli.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 // Command-line interface for checking the integrity of .size files.
-// Usage: cli (path to .size file)
 
 #include <stdlib.h>
 
@@ -76,8 +75,9 @@
   std::cerr << "Must have exactly one of:" << std::endl;
   std::cerr << "  validate, diff" << std::endl;
   std::cerr << "Usage:" << std::endl;
-  std::cerr << "  cli validate <size file>" << std::endl;
-  std::cerr << "  cli diff <before_file> <after_file>" << std::endl;
+  std::cerr << "  caspian_cli validate <.size file>" << std::endl;
+  std::cerr << "  caspian_cli validatediff <.sizediff file>" << std::endl;
+  std::cerr << "  caspian_cli diff <before_file> <after_file>" << std::endl;
   exit(1);
 }
 
diff --git a/tools/binary_size/libsupersize/caspian/file_format.cc b/tools/binary_size/libsupersize/caspian/file_format.cc
index 5c07458b..58fb508 100644
--- a/tools/binary_size/libsupersize/caspian/file_format.cc
+++ b/tools/binary_size/libsupersize/caspian/file_format.cc
@@ -69,9 +69,11 @@
 
 std::vector<const char*> ReadValuesFromLine(char** rest,
                                             const char* delimiter) {
-  char* rest_of_line = strsep(rest, "\n");
-
   std::vector<const char*> ret;
+  char* rest_of_line = strsep(rest, "\n");
+  // Check for empty line (otherwise "" is added).
+  if (!*rest_of_line)
+    return ret;
   while (true) {
     char* token = strsep(&rest_of_line, delimiter);
     if (!token)
diff --git a/tools/binary_size/libsupersize/caspian/wasmbuild.patch b/tools/binary_size/libsupersize/caspian/wasmbuild.patch
index 821a359..512dae3 100644
--- a/tools/binary_size/libsupersize/caspian/wasmbuild.patch
+++ b/tools/binary_size/libsupersize/caspian/wasmbuild.patch
@@ -1,9 +1,9 @@
 diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
-index bb656fa19ff3..7fbf650f7b0e 100644
+index 407ca1a239c1..4a0e5b97307b 100644
 --- a/build/config/BUILDCONFIG.gn
 +++ b/build/config/BUILDCONFIG.gn
-@@ -291,10 +291,11 @@ is_ios = current_os == "ios"
- is_linux = current_os == "chromeos" || current_os == "linux"
+@@ -299,10 +299,11 @@ is_ios = current_os == "ios"
+ is_linux = current_os == "linux"
  is_mac = current_os == "mac"
  is_nacl = current_os == "nacl"
 +is_wasm = current_os == "wasm"
@@ -14,12 +14,12 @@
 +is_posix = !is_win && !is_fuchsia && !is_wasm
  
  # =============================================================================
- # SOURCES FILTERS
+ # TARGET DEFAULTS
 diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
-index c9ef45a1495e..85ea1ddd0d00 100644
+index ccf1dd59f9a4..a8ef5afa086a 100644
 --- a/build/config/compiler/BUILD.gn
 +++ b/build/config/compiler/BUILD.gn
-@@ -603,6 +603,20 @@ config("compiler") {
+@@ -594,6 +594,20 @@ config("compiler") {
      ldflags += [ "-stdlib=libc++" ]
    }
  
@@ -40,16 +40,18 @@
    # Add flags for link-time optimization. These flags enable
    # optimizations/transformations that require whole-program visibility at link
    # time, so they need to be applied to all translation units, and we may end up
-@@ -726,7 +740,7 @@ config("compiler") {
+@@ -714,9 +728,7 @@ config("compiler") {
    if (use_lld && !enable_call_graph_profile_sort) {
      if (is_win) {
        ldflags += [ "/call-graph-profile-sort:no" ]
--    } else {
+-    } else if (!is_apple) {
+-      # TODO(thakis): Once LLD's Mach-O port basically works, implement call
+-      # graph profile sorting for it, add an opt-out flag, and pass it here.
 +    } else if (!is_wasm) {
        ldflags += [ "-Wl,--no-call-graph-profile-sort" ]
      }
    }
-@@ -1532,7 +1546,8 @@ config("default_warnings") {
+@@ -1559,7 +1571,8 @@ config("default_warnings") {
          cflags += [ "-Wno-nonportable-include-path" ]
        }
  
@@ -59,7 +61,7 @@
          # Flags NaCl (Clang 3.7) and Xcode 9.2 (Clang clang-900.0.39.2) do not
          # recognize.
          cflags += [
-@@ -2294,6 +2309,9 @@ config("symbols") {
+@@ -2321,6 +2334,9 @@ config("symbols") {
          "-debug-info-kind=constructor",
        ]
      }
diff --git a/tools/binary_size/libsupersize/models.py b/tools/binary_size/libsupersize/models.py
index a1c78ee..c5674994 100644
--- a/tools/binary_size/libsupersize/models.py
+++ b/tools/binary_size/libsupersize/models.py
@@ -1265,6 +1265,9 @@
   def GroupedByContainerAndSectionName(self):
     return self.GroupedBy(lambda s: (s.container_name, s.section_name))
 
+  def GroupedByContainer(self):
+    return self.GroupedBy(lambda s: s.container_name)
+
   def GroupedBySectionName(self):
     return self.GroupedBy(lambda s: s.section_name)
 
diff --git a/tools/binary_size/libsupersize/testdata/Console.golden b/tools/binary_size/libsupersize/testdata/Console.golden
index fc03748..26f3e06 100644
--- a/tools/binary_size/libsupersize/testdata/Console.golden
+++ b/tools/binary_size/libsupersize/testdata/Console.golden
@@ -4,7 +4,7 @@
 SizeInfo: ContainerForName, all_section_sizes, build_config, containers, metadata, metadata_legacy, native_symbols, pak_symbols, raw_symbols, size_path, symbols
 Symbol: FlagsString, IsBss, IsDelta, IsDex, IsGeneratedByToolchain, IsGroup, IsNameUnique, IsNative, IsOther, IsOverhead, IsPak, IsStringLiteral, IterLeafSymbols, SetName, address, aliases, component, container, container_name, container_short_name, end_address, flags, full_name, generated_source, is_anonymous, name, num_aliases, object_path, padding, padding_pss, pss, pss_without_padding, section, section_name, size, size_without_padding, source_path, template_name
 
-SymbolGroup (extends Symbol): CountUniqueSymbols, Filter, GroupedBy, GroupedByAliases, GroupedByComponent, GroupedByContainerAndSectionName, GroupedByFullName, GroupedByName, GroupedByPath, GroupedBySectionName, Inverted, IterUniqueSymbols, Sorted, SortedByAddress, SortedByCount, SortedByName, WhereAddressInRange, WhereComponentMatches, WhereFullNameMatches, WhereGeneratedByToolchain, WhereHasAnyAttribution, WhereHasComponent, WhereHasFlag, WhereHasPath, WhereInSection, WhereIsDex, WhereIsGroup, WhereIsNative, WhereIsPak, WhereIsTemplate, WhereMatches, WhereNameMatches, WhereObjectPathMatches, WherePathMatches, WherePssBiggerThan, WhereSizeBiggerThan, WhereSourceIsGenerated, WhereSourcePathMatches, WhereTemplateNameMatches, index, is_default_sorted
+SymbolGroup (extends Symbol): CountUniqueSymbols, Filter, GroupedBy, GroupedByAliases, GroupedByComponent, GroupedByContainer, GroupedByContainerAndSectionName, GroupedByFullName, GroupedByName, GroupedByPath, GroupedBySectionName, Inverted, IterUniqueSymbols, Sorted, SortedByAddress, SortedByCount, SortedByName, WhereAddressInRange, WhereComponentMatches, WhereFullNameMatches, WhereGeneratedByToolchain, WhereHasAnyAttribution, WhereHasComponent, WhereHasFlag, WhereHasPath, WhereInSection, WhereIsDex, WhereIsGroup, WhereIsNative, WhereIsPak, WhereIsTemplate, WhereMatches, WhereNameMatches, WhereObjectPathMatches, WherePathMatches, WherePssBiggerThan, WhereSizeBiggerThan, WhereSourceIsGenerated, WhereSourcePathMatches, WhereTemplateNameMatches, index, is_default_sorted
 
 DeltaSizeInfo: ContainerForName, after, all_section_sizes, before, build_config, containers, metadata, native_symbols, pak_symbols, raw_symbols, symbols
 DeltaSymbol (extends Symbol): after_symbol, before_symbol, diff_status
diff --git a/tools/binary_size/trybot_commit_size_checker.py b/tools/binary_size/trybot_commit_size_checker.py
index 5b85b83..f47f19c 100755
--- a/tools/binary_size/trybot_commit_size_checker.py
+++ b/tools/binary_size/trybot_commit_size_checker.py
@@ -73,41 +73,45 @@
     return self.name < other.name
 
 
-def _SymbolDiffHelper(symbols):
+def _SymbolDiffHelper(title_fragment, symbols):
   added = symbols.WhereDiffStatusIs(models.DIFF_STATUS_ADDED)
   removed = symbols.WhereDiffStatusIs(models.DIFF_STATUS_REMOVED)
   both = (added + removed).SortedByName()
-  lines = None
+  lines = []
   if len(both) > 0:
-    lines = [
-        'Added: {}'.format(len(added)),
-        'Removed: {}'.format(len(removed)),
-    ]
-    lines.extend(describe.GenerateLines(both, summarize=False))
+    for group in both.GroupedByContainer():
+      counts = group.CountsByDiffStatus()
+      lines += [
+          '===== {} Added & Removed ({}) ====='.format(
+              title_fragment, group.full_name),
+          'Added: {}'.format(counts[models.DIFF_STATUS_ADDED]),
+          'Removed: {}'.format(counts[models.DIFF_STATUS_REMOVED]),
+          ''
+      ]
+      lines.extend(describe.GenerateLines(group, summarize=False))
+      lines += ['']
 
   return lines, len(added) - len(removed)
 
 
 def _CreateMutableConstantsDelta(symbols):
   symbols = symbols.WhereInSection('d').WhereNameMatches(r'\bk[A-Z]|\b[A-Z_]+$')
-  lines, net_added = _SymbolDiffHelper(symbols)
+  lines, net_added = _SymbolDiffHelper('Mutable Constants', symbols)
 
   return lines, _SizeDelta('Mutable Constants', 'symbols', 0, net_added)
 
 
 def _CreateMethodCountDelta(symbols):
   method_symbols = symbols.WhereInSection(models.SECTION_DEX_METHOD)
-  method_lines, net_method_added = _SymbolDiffHelper(method_symbols)
+  method_lines, net_method_added = _SymbolDiffHelper('Methods', method_symbols)
   class_symbols = symbols.WhereInSection(
       models.SECTION_DEX).WhereNameMatches('#').Inverted()
-  class_lines, _ = _SymbolDiffHelper(class_symbols)
+  class_lines, _ = _SymbolDiffHelper('Classes', class_symbols)
   lines = []
   if class_lines:
-    lines.append('===== Classes Added & Removed =====')
     lines.extend(class_lines)
     lines.extend(['', ''])  # empty lines added for clarity
   if method_lines:
-    lines.append('===== Methods Added & Removed =====')
     lines.extend(method_lines)
 
   return lines, _SizeDelta('Dex Methods Count', 'methods',
diff --git a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
index 826b94c1..7cd0c177 100644
--- a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
+++ b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
@@ -106,6 +106,7 @@
 
   if (options_.dump_graph) {
     std::error_code err;
+#if !defined(LLVM_FORCE_HEAD_REVISION)
     // TODO: Make createDefaultOutputFile or a shorter createOutputFile work.
     json_ = JsonWriter::from(instance_.createOutputFile(
         "",                                      // OutputPath
@@ -118,6 +119,16 @@
         false,                                   // CreateMissingDirectories
         0,                                       // ResultPathName
         0));                                     // TempPathName
+#else
+    SmallString<128> OutputFile(instance_.getFrontendOpts().OutputFile);
+    llvm::sys::path::replace_extension(OutputFile, "graph.json");
+    json_ = JsonWriter::from(instance_.createOutputFile(
+        OutputFile,                              // OutputPath
+        true,                                    // Binary
+        true,                                    // RemoveFileOnSignal
+        false,                                   // UseTemporary
+        false));                                 // CreateMissingDirectories
+#endif
     if (!err && json_) {
       json_->OpenList();
     } else {
diff --git a/tools/clang/scripts/build.py b/tools/clang/scripts/build.py
index dd0f75c..6edfd85 100755
--- a/tools/clang/scripts/build.py
+++ b/tools/clang/scripts/build.py
@@ -434,6 +434,15 @@
                       default=sys.platform in ('linux2', 'darwin'))
   args = parser.parse_args()
 
+  # TODO(crbug.com/1171687): Remove in the next Clang roll.
+  if args.llvm_force_head_revision:
+    global RELEASE_VERSION
+    RELEASE_VERSION = '13.0.0'
+    old_lib_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', '12.0.0')
+    if (os.path.isdir(old_lib_dir)):
+      print('Removing old lib dir: ' + old_lib_dir)
+      RmTree(old_lib_dir)
+
   if (args.pgo or args.thinlto) and not args.bootstrap:
     print('--pgo/--thinlto requires --bootstrap')
     return 1
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index 2587135e..78121840 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -43,6 +43,7 @@
 
 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION)
 RELEASE_VERSION = '12.0.0'
+# TODO(crbug.com/1171687): Bump to 13.0.0 in the next Clang roll.
 
 
 CDS_URL = os.environ.get('CDS_CLANG_BUCKET_OVERRIDE',
@@ -316,6 +317,11 @@
                       help='Verify that clang has the passed-in version.')
   args = parser.parse_args()
 
+  # TODO(crbug.com/1171687): Remove in the next Clang roll.
+  if args.llvm_force_head_revision:
+    global RELEASE_VERSION
+    RELEASE_VERSION = '13.0.0'
+
   if args.force_local_build:
     print(('update.py --force-local-build is no longer used to build clang; '
            'use build.py instead.'))
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 0ab8623f..c8ffb380 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -10005,6 +10005,7 @@
   <int value="0" label="User selected an unspecified lab"/>
   <int value="1" label="User selected the Read Later lab"/>
   <int value="2" label="User selected the Tab Search lab"/>
+  <int value="3" label="User selected the Tab Scrolling lab"/>
 </enum>
 
 <enum name="ChromeMLServiceDecisionTreePredictionResult">
@@ -54364,6 +54365,21 @@
   <int value="2" label="Other, not at startup"/>
 </enum>
 
+<enum name="NtpModules">
+  <summary>
+    Hash values for the IDs of NTP modules. Each of these values is computed by
+    casting the output of base::PersistentHash(module_id) to
+    base::HistogramBase::Sample.
+  </summary>
+  <int value="-1996945391" label="chrome_cart"/>
+  <int value="-1985729288" label="recipe_tasks"/>
+  <int value="-1870686922" label="drive"/>
+  <int value="-1810591528" label="shopping_tasks"/>
+  <int value="-505117227" label="dummy2"/>
+  <int value="301684683" label="kaleidoscope (deprecated)"/>
+  <int value="1976054971" label="dummy"/>
+</enum>
+
 <enum name="NtpMostVisitedScheme">
   <obsolete>
     Deprecated 2016-05.
diff --git a/tools/metrics/histograms/histograms_xml/accessibility/histograms.xml b/tools/metrics/histograms/histograms_xml/accessibility/histograms.xml
index 08fad52..3780e570 100644
--- a/tools/metrics/histograms/histograms_xml/accessibility/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/accessibility/histograms.xml
@@ -244,7 +244,7 @@
 </histogram>
 
 <histogram name="Accessibility.CrosDockedMagnifier" enum="BooleanEnabled"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>dmazzoni@chromium.org</owner>
   <owner>katie@chromium.org</owner>
   <owner>chrome-a11y-core@google.com</owner>
@@ -320,7 +320,7 @@
 </histogram>
 
 <histogram name="Accessibility.CrosSelectToSpeak.BackgroundShading"
-    enum="BooleanEnabled" expires_after="2021-05-28">
+    enum="BooleanEnabled" expires_after="2021-07-27">
   <owner>katie@chromium.org</owner>
   <owner>chrome-a11y-core@google.com</owner>
   <summary>
@@ -412,7 +412,7 @@
 
 <histogram
     name="Accessibility.CrosShelfNavigationButtonsInTabletModeChanged.OOBE"
-    enum="BooleanEnabled" expires_after="M91">
+    enum="BooleanEnabled" expires_after="2021-07-27">
   <owner>gzadina@google.com</owner>
   <owner>tbarzic@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/android/histograms.xml b/tools/metrics/histograms/histograms_xml/android/histograms.xml
index f6d0b4d3..bb736d7 100644
--- a/tools/metrics/histograms/histograms_xml/android/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/android/histograms.xml
@@ -1628,7 +1628,7 @@
 </histogram>
 
 <histogram name="Android.Omnibox.SuggestionView.Reused" enum="BooleanReused"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
   <owner>ender@chromium.org</owner>
   <owner>mpearson@chromium.org</owner>
   <owner>jdonnelly@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/apps/histograms.xml b/tools/metrics/histograms/histograms_xml/apps/histograms.xml
index 2e05a63..67eabb11 100644
--- a/tools/metrics/histograms/histograms_xml/apps/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/apps/histograms.xml
@@ -268,7 +268,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.DriveZeroStateProvider.Latency" units="ms"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
   <owner>tby@chromium.org</owner>
   <owner>thanhdng@chromium.org</owner>
   <owner>wrong@chromium.org</owner>
@@ -976,7 +976,7 @@
 </histogram>
 
 <histogram name="Apps.AppListSearchBoxActivated"
-    enum="SearchBoxActivationSource" expires_after="2021-05-23">
+    enum="SearchBoxActivationSource" expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" -->
 
   <owner>newcomer@chromium.org</owner>
@@ -1058,7 +1058,7 @@
 </histogram>
 
 <histogram name="Apps.AppListSearchResultOpenTypeV2" enum="AppListSearchResult"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" -->
 
   <owner>newcomer@chromium.org</owner>
@@ -1592,7 +1592,7 @@
 </histogram>
 
 <histogram name="Apps.NumberOfFolders" units="folder(s)"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>mmourgos@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/arc/histograms.xml b/tools/metrics/histograms/histograms_xml/arc/histograms.xml
index 5e844a7..1d6a80b 100644
--- a/tools/metrics/histograms/histograms_xml/arc/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/arc/histograms.xml
@@ -344,7 +344,7 @@
 </histogram>
 
 <histogram name="Arc.ContainerLifetimeEvent" enum="ArcContainerLifetimeEvent"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>elijahtaylor@google.com</owner>
   <owner>yusukes@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/ash/histograms.xml b/tools/metrics/histograms/histograms_xml/ash/histograms.xml
index 435dcd1..18b05b8a 100644
--- a/tools/metrics/histograms/histograms_xml/ash/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/ash/histograms.xml
@@ -1123,7 +1123,7 @@
 </histogram>
 
 <histogram name="Ash.Login.Lock.NbPasswordAttempts.UntilSuccess"
-    units="attempts" expires_after="2021-05-27">
+    units="attempts" expires_after="2021-07-27">
   <owner>tellier@google.com</owner>
   <owner>cros-oac@google.com</owner>
   <summary>
@@ -1704,7 +1704,7 @@
 </histogram>
 
 <histogram name="Ash.Shelf.NumberOfUnpinnedItems" units="Icons"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>anasalazar@google.com</owner>
   <owner>mmourgos@google.com</owner>
   <summary>
@@ -2125,7 +2125,7 @@
 </histogram>
 
 <histogram name="Ash.TouchView.LidAngle" units="degrees"
-    expires_after="2021-03-15">
+    expires_after="2021-07-27">
   <owner>oshima@chromium.org</owner>
   <summary>
     Chrome OS only. The computed angle between the lid and the keyboard panel.
diff --git a/tools/metrics/histograms/histograms_xml/assistant/histograms.xml b/tools/metrics/histograms/histograms_xml/assistant/histograms.xml
index f35315eb..d7dfab8 100644
--- a/tools/metrics/histograms/histograms_xml/assistant/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/assistant/histograms.xml
@@ -348,6 +348,16 @@
   </summary>
 </histogram>
 
+<histogram name="QuickAnswers.NetworkError.IntentType"
+    enum="QuickAnswersIntentType" expires_after="2021-06-27">
+  <owner>updowndota@google.com</owner>
+  <owner>croissant-eng@chromium.org</owner>
+  <summary>
+    Records the intent type when network error occurs during the quick answers
+    fetch. ChromeOS only.
+  </summary>
+</histogram>
+
 <histogram name="QuickAnswers.Result" enum="QuickAnswersResultType"
     expires_after="2021-06-27">
   <owner>llin@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/autofill/histograms.xml b/tools/metrics/histograms/histograms_xml/autofill/histograms.xml
index 9243163..4f52307 100644
--- a/tools/metrics/histograms/histograms_xml/autofill/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/autofill/histograms.xml
@@ -580,7 +580,7 @@
 </histogram>
 
 <histogram name="Autofill.ExpirationDateFixFlowPrompt.Events"
-    enum="AutofillExpirationDateFixFlowPromptEvent" expires_after="2021-05-16">
+    enum="AutofillExpirationDateFixFlowPromptEvent" expires_after="2021-07-27">
   <owner>siashah@google.com</owner>
   <owner>jsaul@google.com</owner>
   <owner>payments-autofill-team@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/blink/histograms.xml b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
index 177615b..10d7de19 100644
--- a/tools/metrics/histograms/histograms_xml/blink/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
@@ -34,7 +34,7 @@
 </histogram>
 
 <histogram base="true" name="Blink.Animate.UpdateTime" units="microseconds"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" -->
 
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" -->
@@ -946,7 +946,7 @@
 </histogram>
 
 <histogram base="true" name="Blink.ForcedStyleAndLayout.UpdateTime"
-    units="microseconds" expires_after="2021-05-23">
+    units="microseconds" expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" -->
 
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" -->
@@ -1904,7 +1904,7 @@
 </histogram>
 
 <histogram name="Blink.Script.AsyncScriptCount" units="count"
-    expires_after="2021-05-25">
+    expires_after="2021-07-27">
   <owner>dom@chromium.org</owner>
   <owner>chrome-loading@google.com</owner>
   <summary>
@@ -2197,7 +2197,7 @@
 </histogram>
 
 <histogram base="true" name="Blink.Style.UpdateTime" units="microseconds"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" -->
 
 <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" -->
@@ -2516,7 +2516,7 @@
 </histogram>
 
 <histogram name="Blink.VisibleBeforeLoaded.LazyLoadImages.AboveTheFold"
-    enum="NQEEffectiveConnectionType" expires_after="2021-05-23">
+    enum="NQEEffectiveConnectionType" expires_after="2021-07-27">
   <owner>sclittle@chromium.org</owner>
   <owner>rajendrant@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/browser/histograms.xml b/tools/metrics/histograms/histograms_xml/browser/histograms.xml
index 3ddf9ed..1b51914 100644
--- a/tools/metrics/histograms/histograms_xml/browser/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/browser/histograms.xml
@@ -268,7 +268,7 @@
 </histogram>
 
 <histogram base="true" name="Browser.PaintPreview.TabbedPlayer.UpTime"
-    units="ms" expires_after="2021-04-18">
+    units="ms" expires_after="2021-07-27">
   <owner>ckitagawa@chromium.org</owner>
   <owner>mahmoudi@chromium.org</owner>
   <owner>fredmello@chromium.org</owner>
@@ -800,7 +800,7 @@
 </histogram>
 
 <histogram name="BrowserSwitcher.LaunchSuccess" enum="BooleanSuccess"
-    expires_after="2021-04-04">
+    expires_after="2021-07-27">
   <owner>nicolaso@chromium.org</owner>
   <owner>pastarmovj@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml b/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml
index a41afa9..1f93c8725 100644
--- a/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml
@@ -68,7 +68,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Apps.IntentPickerDestinationPlatform"
-    enum="ArcIntentHandlerDestinationPlatform" expires_after="2021-05-23">
+    enum="ArcIntentHandlerDestinationPlatform" expires_after="2021-07-27">
   <owner>elijahtaylor@google.com</owner>
   <owner>dominickn@chromium.org</owner>
   <owner>shihuis@google.com</owner>
@@ -102,7 +102,7 @@
 
 <histogram base="true"
     name="ChromeOS.Camera.ConfigureStreams.Output.Resolution" units="pixels"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes
      name="ChromeOS.Camera.StreamFormat" -->
 
@@ -138,7 +138,7 @@
 </histogram>
 
 <histogram name="ChromeOS.Camera.Facing" enum="ChromeOSCameraFacing"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
   <owner>wtlee@chromium.org</owner>
   <owner>chromeos-camera-eng@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/cookie/histograms.xml b/tools/metrics/histograms/histograms_xml/cookie/histograms.xml
index 297ae2ad..1ecd30e4 100644
--- a/tools/metrics/histograms/histograms_xml/cookie/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/cookie/histograms.xml
@@ -114,7 +114,7 @@
   </summary>
 </histogram>
 
-<histogram name="Cookie.Count" units="units" expires_after="2021-05-23">
+<histogram name="Cookie.Count" units="units" expires_after="2021-07-27">
   <owner>battre@chromium.org</owner>
   <summary>
     Number of cookies in the store (recorded every 10 minutes of active browsing
diff --git a/tools/metrics/histograms/histograms_xml/dev/histograms.xml b/tools/metrics/histograms/histograms_xml/dev/histograms.xml
index 13dede2..0fe99cd6 100644
--- a/tools/metrics/histograms/histograms_xml/dev/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/dev/histograms.xml
@@ -77,7 +77,7 @@
 </histogram>
 
 <histogram name="DevTools.ColorPicker.FixedColor"
-    enum="DevToolsColorPickerFixedColor" expires_after="2021-05-16">
+    enum="DevToolsColorPickerFixedColor" expires_after="2021-07-27">
   <owner>yangguo@chromium.org</owner>
   <owner>mathias@chromium.org</owner>
   <owner>alexrudenko@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/download/histograms.xml b/tools/metrics/histograms/histograms_xml/download/histograms.xml
index 4c8fde5..42840730 100644
--- a/tools/metrics/histograms/histograms_xml/download/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/download/histograms.xml
@@ -825,7 +825,7 @@
 </histogram>
 
 <histogram name="Download.Service.Finish.Type"
-    enum="Download.Service.CompletionType" expires_after="2021-05-23">
+    enum="Download.Service.CompletionType" expires_after="2021-07-27">
   <owner>xingliu@chromium.org</owner>
   <summary>The completion type for downloads in download service.</summary>
 </histogram>
diff --git a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
index fdcc80f..3670cee 100644
--- a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
@@ -405,7 +405,7 @@
 </histogram>
 
 <histogram name="Enterprise.DeviceRemoteCommand.Executed"
-    enum="RemoteCommandExecutionStatus" expires_after="2021-05-16">
+    enum="RemoteCommandExecutionStatus" expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="Enterprise.RemoteCommandType". -->
 
   <owner>asumaneev@google.com</owner>
@@ -472,7 +472,7 @@
 </histogram>
 
 <histogram name="Enterprise.DeviceSettings.MissingPolicyMitigated"
-    units="BooleanSuccess" expires_after="2021-05-23">
+    units="BooleanSuccess" expires_after="2021-07-27">
   <owner>poromov@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
   <summary>
@@ -483,7 +483,7 @@
 </histogram>
 
 <histogram name="Enterprise.DeviceSettings.UpdatedStatus"
-    enum="DeviceSettingsStatus" expires_after="2021-05-23">
+    enum="DeviceSettingsStatus" expires_after="2021-07-27">
   <owner>poromov@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
   <summary>
@@ -1111,7 +1111,7 @@
 </histogram>
 
 <histogram name="Enterprise.PublicSession.SessionLength" units="minutes"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>marcgrimme@chromium.org</owner>
   <owner>managed-devices@google.com</owner>
   <summary>
@@ -1676,7 +1676,7 @@
 </histogram>
 
 <histogram name="EnterpriseCheck.Mac.IsDeviceDomainJoined" enum="Boolean"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>avi@chromium.org</owner>
   <owner>pastarmovj@chromium.org</owner>
   <summary>
@@ -1716,7 +1716,7 @@
 </histogram>
 
 <histogram name="EnterpriseCheck.OSType" enum="OsSuite"
-    expires_after="2021-05-05">
+    expires_after="2021-07-27">
   <owner>pastarmovj@chromium.org</owner>
   <owner>rogerta@chomium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/extensions/histograms.xml b/tools/metrics/histograms/histograms_xml/extensions/histograms.xml
index 4a32f09..25aa29d8 100644
--- a/tools/metrics/histograms/histograms_xml/extensions/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/extensions/histograms.xml
@@ -2510,7 +2510,7 @@
 </histogram>
 
 <histogram name="Extensions.LoadType" enum="ExtensionType"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>rdevlin.cronin@chromium.org</owner>
   <owner>extensions-core@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/fingerprint/histograms.xml b/tools/metrics/histograms/histograms_xml/fingerprint/histograms.xml
index a37a472..adcb052 100644
--- a/tools/metrics/histograms/histograms_xml/fingerprint/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/fingerprint/histograms.xml
@@ -55,7 +55,7 @@
 </histogram>
 
 <histogram name="Fingerprint.SetContext.SetContextMode"
-    enum="FingerprintSensorMode" expires_after="2021-05-23">
+    enum="FingerprintSensorMode" expires_after="2021-07-27">
   <owner>yichengli@chromium.org</owner>
   <owner>chromeos-fingerprint@google.com</owner>
   <summary>The mode FPMCU was in when we set its context.</summary>
diff --git a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml
index ded7b962..1b3c180 100644
--- a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml
@@ -380,7 +380,7 @@
 </histogram>
 
 <histogram name="GPU.DirectComposition.CompositionMode"
-    enum="DxgiFramePresentationMode" expires_after="2021-05-02">
+    enum="DxgiFramePresentationMode" expires_after="2021-07-27">
   <owner>sunnyps@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
@@ -400,7 +400,7 @@
 </histogram>
 
 <histogram name="GPU.DirectComposition.CreateSwapChainForComposition"
-    enum="Hresult" expires_after="2021-05-02">
+    enum="Hresult" expires_after="2021-07-27">
   <owner>magchen@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
@@ -419,7 +419,7 @@
 </histogram>
 
 <histogram name="GPU.DirectComposition.DCLayer.YUVOverlayCount"
-    units="overlays" expires_after="2021-05-23">
+    units="overlays" expires_after="2021-07-27">
   <owner>magchen@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
@@ -452,7 +452,7 @@
 </histogram>
 
 <histogram name="GPU.DirectComposition.DcompDeviceCreateSurface" enum="Hresult"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>magchen@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
@@ -500,7 +500,7 @@
 </histogram>
 
 <histogram name="GPU.DirectComposition.IsUnderlay" enum="BooleanUnderlay"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>magchen@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
@@ -556,7 +556,7 @@
 </histogram>
 
 <histogram base="true" name="GPU.DirectComposition.SwapChainCreationResult3"
-    enum="Hresult" expires_after="2021-05-02">
+    enum="Hresult" expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="GPU.ProtectedVideoType" -->
 
   <owner>magchen@chromium.org</owner>
@@ -910,7 +910,7 @@
   </summary>
 </histogram>
 
-<histogram name="GPU.Output.HDR" enum="Boolean" expires_after="2021-05-02">
+<histogram name="GPU.Output.HDR" enum="Boolean" expires_after="2021-07-27">
   <owner>hubbe@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
@@ -1111,7 +1111,7 @@
 </histogram>
 
 <histogram name="GPU.SoftwareRendering" enum="BooleanSoftwareRendering"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>sadrul@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
@@ -1255,7 +1255,7 @@
 </histogram>
 
 <histogram name="GPU.WatchdogThread.ExtraThreadTime" units="# timeouts"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="GPU.WatchdogStage" -->
 
   <owner>magchen@chromium.org</owner>
@@ -1267,7 +1267,7 @@
 </histogram>
 
 <histogram name="GPU.WatchdogThread.ExtraThreadTime.NumOfUsers"
-    units="# timeouts" expires_after="2021-05-23">
+    units="# timeouts" expires_after="2021-07-27">
   <owner>magchen@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/input/histograms.xml b/tools/metrics/histograms/histograms_xml/input/histograms.xml
index 27006bd..69262bd3 100644
--- a/tools/metrics/histograms/histograms_xml/input/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/input/histograms.xml
@@ -178,7 +178,7 @@
 </histogram>
 
 <histogram name="InputMethod.Assistive.TimeToAccept.PersonalInfo" units="ms"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
   <owner>jiwan@google.com</owner>
   <owner>essential-inputs-team@google.com</owner>
   <summary>
@@ -219,7 +219,7 @@
 </histogram>
 
 <histogram name="InputMethod.Assistive.UserPref.PersonalInfo"
-    enum="BooleanEnabled" expires_after="2021-05-23">
+    enum="BooleanEnabled" expires_after="2021-07-27">
   <owner>myy@google.com</owner>
   <owner>essential-inputs-team@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/ios/histograms.xml b/tools/metrics/histograms/histograms_xml/ios/histograms.xml
index 92e48e946..50f92a18 100644
--- a/tools/metrics/histograms/histograms_xml/ios/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/ios/histograms.xml
@@ -522,7 +522,7 @@
 </histogram>
 
 <histogram name="IOS.MetricKit.BackgroundTimePerDay" units="ms"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
   <owner>justincohen@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/media/histograms.xml b/tools/metrics/histograms/histograms_xml/media/histograms.xml
index d8e030f..9ca0753 100644
--- a/tools/metrics/histograms/histograms_xml/media/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/media/histograms.xml
@@ -316,7 +316,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Capture.Win.InitError" enum="Hresult"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>tommi@chromium.org</owner>
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
@@ -327,7 +327,7 @@
 </histogram>
 
 <histogram name="Media.Audio.Capture.Win.InitError.FormatRelated"
-    enum="AudioStreamFormatRelatedInitError" expires_after="2021-05-02">
+    enum="AudioStreamFormatRelatedInitError" expires_after="2021-07-27">
   <owner>guidou@chromium.org</owner>
   <owner>olka@chromium.org</owner>
   <summary>
@@ -823,7 +823,7 @@
 </histogram>
 
 <histogram name="Media.AudioCodecProfile.AAC" enum="AudioCodecProfile"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>dalecurtis@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>Audio codec profile used in HTML5 media for AAC playback.</summary>
@@ -1137,7 +1137,7 @@
 </histogram>
 
 <histogram name="Media.Capabilities.DecodingInfo.Time.Video" units="ms"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>chcunningham@chromium.org</owner>
   <owner>mlamouri@google.com</owner>
   <owner>media-dev@chromium.org</owner>
@@ -2466,7 +2466,7 @@
 </histogram>
 
 <histogram name="Media.MediaElement.ContentTypeParseable"
-    enum="ContentTypeParseableResult" expires_after="2021-05-07">
+    enum="ContentTypeParseableResult" expires_after="2021-07-27">
   <owner>jrummell@chromium.org</owner>
   <owner>media-dev@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/memory/histograms.xml b/tools/metrics/histograms/histograms_xml/memory/histograms.xml
index 132823e..9ab6bea 100644
--- a/tools/metrics/histograms/histograms_xml/memory/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/memory/histograms.xml
@@ -2289,7 +2289,7 @@
 </histogram>
 
 <histogram name="Memory.Total.SystemCommitLimit" units="GB"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>sadrul@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/mobile/histograms.xml b/tools/metrics/histograms/histograms_xml/mobile/histograms.xml
index 7b5733cd..afe9eb7 100644
--- a/tools/metrics/histograms/histograms_xml/mobile/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/mobile/histograms.xml
@@ -191,7 +191,7 @@
 </histogram>
 
 <histogram base="true" name="Mobile.Messages.Banner.Event"
-    enum="MobileMessagesBannerEvent" expires_after="2021-05-23">
+    enum="MobileMessagesBannerEvent" expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="Mobile.Messages.Type" -->
 
   <owner>sczs@chromium.org</owner>
@@ -221,7 +221,7 @@
 </histogram>
 
 <histogram base="true" name="Mobile.Messages.Confirm.Accept.Time" units="ms"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="Mobile.Messages.Confirm.Type" -->
 
   <owner>sczs@chromium.org</owner>
@@ -233,7 +233,7 @@
 </histogram>
 
 <histogram base="true" name="Mobile.Messages.Confirm.Event"
-    enum="MobileMessagesConfirmInfobarEvents" expires_after="2021-05-23">
+    enum="MobileMessagesConfirmInfobarEvents" expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="Mobile.Messages.Confirm.Type" -->
 
   <owner>sczs@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/net/histograms.xml b/tools/metrics/histograms/histograms_xml/net/histograms.xml
index 05c8fd2..0a12bfb 100644
--- a/tools/metrics/histograms/histograms_xml/net/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/net/histograms.xml
@@ -22,7 +22,7 @@
 <histograms>
 
 <histogram name="Net.AlternateProtocolBrokenLocation"
-    enum="BrokenAlternateProtocolLocation" expires_after="2021-05-11">
+    enum="BrokenAlternateProtocolLocation" expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -1048,7 +1048,7 @@
 </histogram>
 
 <histogram name="Net.DNS.ProbeSequence.ConfigChange.Failure.AttemptTime"
-    units="ms" expires_after="2021-04-04">
+    units="ms" expires_after="2021-07-27">
   <owner>ericorth@chromium.org</owner>
   <owner>doh-core@google.com</owner>
   <summary>
@@ -2245,7 +2245,7 @@
 </histogram>
 
 <histogram name="Net.QuicDroppedPacketReason" enum="QuicDroppedPacketReason"
-    expires_after="2021-05-11">
+    expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2255,7 +2255,7 @@
 </histogram>
 
 <histogram name="Net.QuicHandshakeNotConfirmedNumPacketsReceived" units="units"
-    expires_after="2021-05-11">
+    expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2658,7 +2658,7 @@
 </histogram>
 
 <histogram name="Net.QuicSession.ConnectionCloseErrorCodeServerIetfApplication"
-    enum="QuicHttp3ErrorCodes" expires_after="2021-05-11">
+    enum="QuicHttp3ErrorCodes" expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2669,7 +2669,7 @@
 
 <histogram
     name="Net.QuicSession.ConnectionCloseErrorCodeServerIetfApplicationGoogle"
-    enum="QuicHttp3ErrorCodes" expires_after="2021-05-11">
+    enum="QuicHttp3ErrorCodes" expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2702,7 +2702,7 @@
 </histogram>
 
 <histogram name="Net.QuicSession.ConnectionCloseErrorCodeServerIetfTransport"
-    enum="QuicTransportErrorCodes" expires_after="2021-05-11">
+    enum="QuicTransportErrorCodes" expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2713,7 +2713,7 @@
 
 <histogram
     name="Net.QuicSession.ConnectionCloseErrorCodeServerIetfTransportGoogle"
-    enum="QuicTransportErrorCodes" expires_after="2021-05-11">
+    enum="QuicTransportErrorCodes" expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2735,7 +2735,7 @@
 
 <histogram
     name="Net.QuicSession.ConnectionCloseErrorCodeServerIetfTransportGQuicErrorMissingGoogle"
-    enum="QuicTransportErrorCodes" expires_after="2021-05-11">
+    enum="QuicTransportErrorCodes" expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2782,7 +2782,7 @@
 </histogram>
 
 <histogram name="Net.QuicSession.ConnectionMigration"
-    enum="QuicConnectionMigrationStatus" expires_after="2021-05-11">
+    enum="QuicConnectionMigrationStatus" expires_after="2021-07-27">
   <owner>zhongyi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2958,7 +2958,7 @@
 </histogram>
 
 <histogram name="Net.QuicSession.GoAwayReceivedForConnectionMigration"
-    enum="BooleanReceived" expires_after="2021-05-11">
+    enum="BooleanReceived" expires_after="2021-07-27">
   <owner>zhongyi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -2979,7 +2979,7 @@
 </histogram>
 
 <histogram name="Net.QuicSession.HandshakeStatusOnConnectionMigration"
-    enum="BooleanConfirmed" expires_after="2021-05-11">
+    enum="BooleanConfirmed" expires_after="2021-07-27">
   <owner>zhongyi@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -3179,7 +3179,7 @@
 
 <histogram
     name="Net.QuicSession.MaxConsecutiveRtoWithForwardProgressAndBlackholeDetected"
-    units="count" expires_after="2021-05-11">
+    units="count" expires_after="2021-07-27">
   <owner>fayang@chromium.org</owner>
   <owner>src/net/quic/OWNERS</owner>
   <summary>
@@ -4499,14 +4499,14 @@
 </histogram>
 
 <histogram name="Net.SpdySessionErrorDetails2" enum="SpdyProtocolErrorDetails2"
-    expires_after="2021-05-11">
+    expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>The type of SPDY Protocol error encountered.</summary>
 </histogram>
 
 <histogram name="Net.SpdySessionErrorDetails_Google2"
-    enum="SpdyProtocolErrorDetails2" expires_after="2021-05-11">
+    enum="SpdyProtocolErrorDetails2" expires_after="2021-07-27">
   <owner>dschinazi@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
@@ -4673,7 +4673,7 @@
 </histogram>
 
 <histogram name="Net.SSLLegacyCryptoFallback" enum="SSLLegacyCryptoFallback"
-    expires_after="2021-05-09">
+    expires_after="2021-07-27">
   <owner>davidben@chromium.org</owner>
   <owner>src/net/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/network/histograms.xml b/tools/metrics/histograms/histograms_xml/network/histograms.xml
index 6ed2cb9..e588f87 100644
--- a/tools/metrics/histograms/histograms_xml/network/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/network/histograms.xml
@@ -1343,7 +1343,7 @@
 
 <histogram
     name="Network.Shill.Wifi.LinkMonitorsDetectionTimeDiff.NeighborBetter"
-    units="ms" expires_after="M91">
+    units="ms" expires_after="2021-07-27">
   <owner>jiejiang@chromium.org</owner>
   <owner>cros-network-metrics@google.com</owner>
   <summary>
@@ -2029,7 +2029,7 @@
 </histogram>
 
 <histogram name="Network.Wifi.Synced.UpdateOperation.FailureReason"
-    enum="ConnectionFailureReason" expires_after="2021-04-22">
+    enum="ConnectionFailureReason" expires_after="2021-07-27">
   <owner>jonmann@chromium.org</owner>
   <owner>better-together-dev@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml b/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
index f6c0bfd2..bb13104 100644
--- a/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
@@ -782,6 +782,19 @@
   </summary>
 </histogram>
 
+<histogram name="NewTabPage.Modules.Hover" enum="NtpModules"
+    expires_after="2022-01-01">
+  <owner>danielms@google.com</owner>
+  <owner>tiborg@chromium.org</owner>
+  <owner>chrome-desktop-ntp@google.com</owner>
+  <summary>
+    Logged when the user hovers on a module. Only logged once per NTP and
+    module. Only logged on the 1P NTP. Note that even if the user has Google as
+    their default search engine, Incognito and Guest mode NTPs are not
+    considered 1P and dont't log this histogram.
+  </summary>
+</histogram>
+
 <histogram name="NewTabPage.Modules.Impression" units="ms"
     expires_after="2021-07-04">
   <owner>tiborg@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/omnibox/histograms.xml b/tools/metrics/histograms/histograms_xml/omnibox/histograms.xml
index 2947004..0b0ac5c 100644
--- a/tools/metrics/histograms/histograms_xml/omnibox/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/omnibox/histograms.xml
@@ -729,7 +729,7 @@
 </histogram>
 
 <histogram name="Omnibox.SelectedPosition" units="position"
-    expires_after="2021-06-30">
+    expires_after="2021-07-27">
   <owner>jdonnelly@chromium.org</owner>
   <owner>mpearson@chromium.org</owner>
   <owner>chrome-omnibox-team@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/oobe/histograms.xml b/tools/metrics/histograms/histograms_xml/oobe/histograms.xml
index 5103c87..fca2ddf 100644
--- a/tools/metrics/histograms/histograms_xml/oobe/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/oobe/histograms.xml
@@ -22,7 +22,7 @@
 <histograms>
 
 <histogram name="OOBE.ArcTermsOfServiceScreen.ReviewFollowingSetup"
-    enum="BooleanChecked" expires_after="2021-05-23">
+    enum="BooleanChecked" expires_after="2021-07-27">
   <owner>raleksandrov@google.com</owner>
   <owner>cros-oac@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml
index 2e96b67b..25963bd 100644
--- a/tools/metrics/histograms/histograms_xml/others/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml
@@ -699,7 +699,7 @@
 </histogram>
 
 <histogram name="appcache.UpdateJob.ExistingResourceCorruptionRecovery"
-    units="units" expires_after="2021-05-25">
+    units="units" expires_after="2021-07-27">
   <owner>cmp@chromium.org</owner>
   <owner>pwnall@chromium.org</owner>
   <summary>
@@ -797,7 +797,7 @@
 </histogram>
 
 <histogram name="AppManagement.AppDetailViews" enum="AppManagementUserAction"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="AppType" -->
 
   <owner>jshikaram@chromium.org</owner>
@@ -1025,7 +1025,7 @@
 </histogram>
 
 <histogram name="Autocomplete.MatchType" enum="AutocompleteMatchType"
-    expires_after="2021-05-21">
+    expires_after="2021-07-27">
   <owner>tbansal@chromium.org</owner>
   <owner>ryansturm@chromium.org</owner>
   <owner>chrome-omnibox-team@google.com</owner>
@@ -2137,7 +2137,7 @@
 </histogram>
 
 <histogram name="ChildAccountReconcilor.ForcedUserExitOnReconcileError"
-    enum="BooleanHit" expires_after="2021-05-23">
+    enum="BooleanHit" expires_after="2021-07-27">
   <owner>sinhak@chromium.org</owner>
   <owner>escordeiro@chromium.org</owner>
   <summary>
@@ -4384,7 +4384,7 @@
 </histogram>
 
 <histogram name="DocumentScan.ScanFailed" enum="DocumentScanSaneBackend"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>fletcherw@chromium.org</owner>
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
@@ -4406,7 +4406,7 @@
 </histogram>
 
 <histogram name="DocumentScan.ScanSucceeded" enum="DocumentScanSaneBackend"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>fletcherw@chromium.org</owner>
   <owner>bmgordon@chromium.org</owner>
   <owner>project-bolton@google.com</owner>
@@ -5037,7 +5037,7 @@
 </histogram>
 
 <histogram name="ExploreSites.CatalogRequestResult"
-    enum="ExploreSitesCatalogUpdateRequestResult" expires_after="2021-04-18">
+    enum="ExploreSitesCatalogUpdateRequestResult" expires_after="2021-07-27">
   <owner>dewittj@chromium.org</owner>
   <owner>petewil@chromium.org</owner>
   <summary>Results of the Explore Sites network request for a catalog.</summary>
@@ -5484,7 +5484,7 @@
 </histogram>
 
 <histogram name="FirstRun.LaunchSource" enum="FirstRunLaunchSource"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>jlebel@chromium.org</owner>
   <owner>olivierrobin@chromium.org</owner>
   <summary>
@@ -5532,7 +5532,7 @@
 </histogram>
 
 <histogram name="FirstRun.NewUserExperience.NtpBackgroundInteraction"
-    enum="NuxNtpBackgroundInteractions" expires_after="2021-05-23">
+    enum="NuxNtpBackgroundInteractions" expires_after="2021-07-27">
   <owner>hcarmona@chromium.org</owner>
   <owner>johntlee@chromium.org</owner>
   <summary>
@@ -6522,7 +6522,7 @@
 </histogram>
 
 <histogram name="Hardware.Concurrency" units="CPU cores"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>sadrul@chromium.org</owner>
   <owner>zmo@chromium.org</owner>
   <summary>
@@ -7015,7 +7015,7 @@
 </histogram>
 
 <histogram name="ImportantFile.FileWriteError" enum="PlatformFileError"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>grt@chromium.org</owner>
   <owner>xaerox@yandex-team.ru</owner>
   <summary>
@@ -7697,7 +7697,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryActionImpression"
-    enum="AccessoryAction" expires_after="2021-05-23">
+    enum="AccessoryAction" expires_after="2021-07-27">
   <owner>fhorschig@chromium.org</owner>
   <summary>
     Android only. Records whenever users faces an action in the accessory bar or
@@ -7706,7 +7706,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryActionSelected"
-    enum="AccessoryAction" expires_after="2021-05-23">
+    enum="AccessoryAction" expires_after="2021-07-27">
   <owner>fhorschig@chromium.org</owner>
   <summary>
     Android only. Records whenever users select an action in the accessory bar
@@ -7715,7 +7715,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessoryBarShown"
-    enum="AccessoryBarContents" expires_after="2021-05-23">
+    enum="AccessoryBarContents" expires_after="2021-07-27">
   <owner>fhorschig@chromium.org</owner>
   <owner>ioanap@chromium.org</owner>
   <summary>
@@ -7726,7 +7726,7 @@
 </histogram>
 
 <histogram name="KeyboardAccessory.AccessorySheetSuggestionCount" units="count"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>fhorschig@chromium.org</owner>
   <summary>
     Android only. Records how many suggestions a user faced when opening a
@@ -7810,7 +7810,7 @@
 </histogram>
 
 <histogram name="Kiosk.Launch.Error" enum="KioskLaunchError"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>xiyuan@chromium.org</owner>
   <owner>apotapchuk@chromium.org</owner>
   <summary>Tracks kiosk launch errors.</summary>
@@ -10630,7 +10630,7 @@
 </histogram>
 
 <histogram name="OccludedWindowMouseEvents" units="events"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>davidbienvenu@chromium.org</owner>
   <owner>fdoray@chromium.org</owner>
   <summary>
@@ -11095,7 +11095,7 @@
   </summary>
 </histogram>
 
-<histogram name="PDF.FormType" enum="PDFFormTypes" expires_after="2021-05-23">
+<histogram name="PDF.FormType" enum="PDFFormTypes" expires_after="2021-07-27">
   <owner>rharrison@chromium.org</owner>
   <owner>thestig@chromium.org</owner>
   <summary>
@@ -11123,7 +11123,7 @@
 </histogram>
 
 <histogram name="PDF.LinkHighlightOverlapsInPage" units="overlaps"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>thestig@chromium.org</owner>
   <owner>ankk@microsoft.com</owner>
   <owner>mohitb@microsoft.com</owner>
@@ -11170,7 +11170,7 @@
 </histogram>
 
 <histogram name="Pepper.InterfaceUsed" enum="PepperInterface"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
   <owner>bbudge@chromium.org</owner>
   <owner>raymes@chromium.org</owner>
   <summary>
@@ -12103,7 +12103,7 @@
 </histogram>
 
 <histogram name="Process.Sandbox.Launch.Error" enum="WinGetLastError"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>forshaw@chromium.org</owner>
   <owner>wfh@chromium.org</owner>
   <summary>
@@ -14915,7 +14915,7 @@
 </histogram>
 
 <histogram base="true" name="Spellcheck.Windows.ChromeLocalesSupport"
-    units="locales" expires_after="2021-05-02">
+    units="locales" expires_after="2021-07-27">
   <owner>gujen@google.com</owner>
   <owner>chrome-language@google.com</owner>
   <summary>
@@ -14935,7 +14935,7 @@
 </histogram>
 
 <histogram base="true" name="Spellcheck.Windows.SpellcheckLocalesSupport"
-    units="locales" expires_after="2021-05-02">
+    units="locales" expires_after="2021-07-27">
   <owner>gujen@google.com</owner>
   <owner>chrome-language@google.com</owner>
   <summary>
@@ -14951,7 +14951,7 @@
 </histogram>
 
 <histogram base="true" name="Spellcheck.Windows.SpellcheckRequestDuration"
-    units="ms" expires_after="2021-05-02">
+    units="ms" expires_after="2021-07-27">
   <owner>gujen@google.com</owner>
   <owner>chrome-language@google.com</owner>
   <summary>
@@ -14965,7 +14965,7 @@
 </histogram>
 
 <histogram base="true" name="Spellcheck.Windows.SuggestionGatheringDuration"
-    units="ms" expires_after="2021-05-02">
+    units="ms" expires_after="2021-07-27">
   <owner>gujen@google.com</owner>
   <owner>chrome-language@google.com</owner>
   <summary>
@@ -16742,7 +16742,7 @@
   </summary>
 </histogram>
 
-<histogram name="UI.DeviceScale" units="%" expires_after="2021-05-02">
+<histogram name="UI.DeviceScale" units="%" expires_after="2021-07-27">
   <owner>bsep@chromium.org</owner>
   <summary>
     The device scales available on the system at startup. A system may report
@@ -18512,7 +18512,7 @@
 </histogram>
 
 <histogram name="WebUITabStrip.CloseAction" enum="WebUITabStripCloseActions"
-    expires_after="2021-03-21">
+    expires_after="2021-07-27">
   <owner>collinbaker@chromium.org</owner>
   <owner>dfried@chromium.org</owner>
   <summary>
@@ -18534,7 +18534,7 @@
 </histogram>
 
 <histogram name="WebUITabStrip.OpenAction" enum="WebUITabStripOpenActions"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>collinbaker@chromium.org</owner>
   <owner>dfried@chromium.org</owner>
   <summary>
@@ -18733,7 +18733,7 @@
 </histogram>
 
 <histogram name="WindowOcclusionChanged" enum="WindowOcclusionState"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>davidbienvenu@chromium.org</owner>
   <owner>fdoray@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/password/histograms.xml b/tools/metrics/histograms/histograms_xml/password/histograms.xml
index 0c2518da..9731566 100644
--- a/tools/metrics/histograms/histograms_xml/password/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/password/histograms.xml
@@ -906,7 +906,7 @@
 </histogram>
 
 <histogram name="PasswordManager.CompromisedCredentials"
-    enum="InsecureCredentialsType" expires_after="2021-04-26">
+    enum="InsecureCredentialsType" expires_after="2021-07-27">
   <owner>bdea@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -939,7 +939,7 @@
 </histogram>
 
 <histogram name="PasswordManager.CompromisedCredentials.CountPhished"
-    units="credentials" expires_after="2021-03-28">
+    units="credentials" expires_after="2021-07-27">
   <owner>vasilii@chromium.org</owner>
   <owner>jdoerrie@chromium.org</owner>
   <summary>
@@ -1763,7 +1763,7 @@
 </histogram>
 
 <histogram name="PasswordManager.PasswordReuse.TotalPasswords"
-    units="credentials" expires_after="2021-05-23">
+    units="credentials" expires_after="2021-07-27">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -2376,7 +2376,7 @@
 </histogram>
 
 <histogram name="PasswordProtection.InterstitialString"
-    enum="PasswordProtectionInterstitialStringType" expires_after="2021-05-23">
+    enum="PasswordProtectionInterstitialStringType" expires_after="2021-07-27">
   <owner>vakh@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/platform/histograms.xml b/tools/metrics/histograms/histograms_xml/platform/histograms.xml
index 9d02367..9d7800a 100644
--- a/tools/metrics/histograms/histograms_xml/platform/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/platform/histograms.xml
@@ -970,7 +970,7 @@
 </histogram>
 
 <histogram name="Platform.SwapOutDaily" units="pages"
-    expires_after="2021-04-28">
+    expires_after="2021-07-27">
   <owner>asavery@chromium.org</owner>
   <owner>chromeos-storage@google.com</owner>
   <summary>Number of pages swapped OUT over a day, sampled daily.</summary>
diff --git a/tools/metrics/histograms/histograms_xml/plugin/histograms.xml b/tools/metrics/histograms/histograms_xml/plugin/histograms.xml
index 3a8d748..f084f2f 100644
--- a/tools/metrics/histograms/histograms_xml/plugin/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/plugin/histograms.xml
@@ -200,7 +200,7 @@
 </histogram>
 
 <histogram name="PluginVm.SetupFailureReason" enum="PluginVmSetupFailureReason"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
   <owner>timloh@chromium.org</owner>
   <owner>chromeos-core-services@google.com</owner>
   <summary>Recorded when the Plugin VM installer fails.</summary>
diff --git a/tools/metrics/histograms/histograms_xml/print/histograms.xml b/tools/metrics/histograms/histograms_xml/print/histograms.xml
index 881434d..341a93f 100644
--- a/tools/metrics/histograms/histograms_xml/print/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/print/histograms.xml
@@ -32,7 +32,7 @@
 </histogram>
 
 <histogram name="PrintPreview.InitialDisplayTime" units="ms"
-    expires_after="2021-05-10">
+    expires_after="2021-07-27">
   <owner>thestig@chromium.org</owner>
   <owner>dhoss@chromium.org</owner>
   <summary>
@@ -202,7 +202,7 @@
 </histogram>
 
 <histogram name="PrintPreview.RendererError" enum="PrintPreviewFailureType"
-    expires_after="2021-05-10">
+    expires_after="2021-07-27">
   <owner>thestig@chromium.org</owner>
   <owner>dhoss@chromium.org</owner>
   <summary>
@@ -218,7 +218,7 @@
 </histogram>
 
 <histogram name="PrintPreview.RenderToPDFTime" units="ms"
-    expires_after="2021-05-10">
+    expires_after="2021-07-27">
   <owner>thestig@chromium.org</owner>
   <owner>awscreen@chromium.org</owner>
   <summary>Time taken to render to PDF for print preview.</summary>
diff --git a/tools/metrics/histograms/histograms_xml/profile/histograms.xml b/tools/metrics/histograms/histograms_xml/profile/histograms.xml
index 0a02e674..f853dff6 100644
--- a/tools/metrics/histograms/histograms_xml/profile/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/profile/histograms.xml
@@ -38,7 +38,7 @@
 </histogram>
 
 <histogram name="Profile.AllAccounts.Categories"
-    enum="ProfileAllAccountsCategories" expires_after="2021-05-16">
+    enum="ProfileAllAccountsCategories" expires_after="2021-07-27">
   <owner>jkrcal@chromium.org</owner>
   <owner>droger@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml b/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml
index e6e7856..8edbaa4d 100644
--- a/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml
@@ -1337,7 +1337,7 @@
 </histogram>
 
 <histogram name="SafeBrowsing.V4LocalDatabaseManager.ThreatInfoSize"
-    units="verdicts" expires_after="2021-05-23">
+    units="verdicts" expires_after="2021-07-27">
   <owner>xinghuilu@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/sb_client/histograms.xml b/tools/metrics/histograms/histograms_xml/sb_client/histograms.xml
index 4850164..f04b0cb 100644
--- a/tools/metrics/histograms/histograms_xml/sb_client/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/sb_client/histograms.xml
@@ -470,7 +470,7 @@
 
 <histogram name="SBClientPhishing.PreClassificationCheckResult"
     enum="SBClientDetectionPreClassificationCheckResult"
-    expires_after="2021-05-16">
+    expires_after="2021-07-27">
   <owner>drubery@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
@@ -599,7 +599,7 @@
 </histogram>
 
 <histogram name="SBClientPhishing.VisualComparisonTime" units="ms"
-    expires_after="2021-05-22">
+    expires_after="2021-07-27">
   <owner>drubery@chromium.org</owner>
   <owner>chrome-safebrowsing-alerts@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/search/histograms.xml b/tools/metrics/histograms/histograms_xml/search/histograms.xml
index 29afeb0..e94e728 100644
--- a/tools/metrics/histograms/histograms_xml/search/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/search/histograms.xml
@@ -791,7 +791,7 @@
 </histogram>
 
 <histogram name="Search.ContextualSearchQuickActions.Category"
-    enum="ContextualSearchQuickActionCategory" expires_after="2021-05-23">
+    enum="ContextualSearchQuickActionCategory" expires_after="2021-07-27">
   <owner>donnd@chromium.org</owner>
   <owner>twellington@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/service/histograms.xml b/tools/metrics/histograms/histograms_xml/service/histograms.xml
index 88172d1..20566df0 100644
--- a/tools/metrics/histograms/histograms_xml/service/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/service/histograms.xml
@@ -1173,7 +1173,7 @@
 </histogram>
 
 <histogram name="ServiceWorkerCache.CacheStorage" units="ms"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>dmurph@chromium.org</owner>
   <owner>wanderview@chromium.org</owner>
   <owner>chrome-owp-storage@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/startup/histograms.xml b/tools/metrics/histograms/histograms_xml/startup/histograms.xml
index 8ab92ea..9223b5a 100644
--- a/tools/metrics/histograms/histograms_xml/startup/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/startup/histograms.xml
@@ -224,7 +224,7 @@
 </histogram>
 
 <histogram name="Startup.Android.TimeToGTSFirstMeaningfulPaint.Cold" units="ms"
-    expires_after="2021-04-25">
+    expires_after="2021-07-27">
   <owner>yusufo@chromium.org</owner>
   <owner>yfriedman@chromium.org</owner>
   <summary>
@@ -270,7 +270,7 @@
 </histogram>
 
 <histogram name="Startup.BrowserMainRunnerImplInitializeLongTime" units="ms"
-    expires_after="2021-04-18">
+    expires_after="2021-07-27">
   <owner>robliao@chromium.org</owner>
   <summary>
     The amount of time that elapsed during BrowserMainRunnerImpl::Initialize.
diff --git a/tools/metrics/histograms/histograms_xml/sync/histograms.xml b/tools/metrics/histograms/histograms_xml/sync/histograms.xml
index 9cbbf7d..c5feaf8 100644
--- a/tools/metrics/histograms/histograms_xml/sync/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/sync/histograms.xml
@@ -133,7 +133,7 @@
 </histogram>
 
 <histogram name="Sync.CommitResponse" enum="SyncerErrorValues"
-    expires_after="2021-05-27">
+    expires_after="2021-07-27">
 <!-- Name completed by histogram_suffixes name="SyncModelType" -->
 
   <owner>rushans@google.com</owner>
@@ -244,7 +244,7 @@
 <histogram
     name="Sync.Crypto.CustomPassphraseKeyDerivationMethodOnSuccessfulDecryption"
     enum="SyncCustomPassphraseKeyDerivationMethodState"
-    expires_after="2021-05-09">
+    expires_after="2021-07-27">
   <owner>vitaliii@chromium.org</owner>
   <owner>treib@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/tab/histograms.xml b/tools/metrics/histograms/histograms_xml/tab/histograms.xml
index fcd381c3..7ccdd8215 100644
--- a/tools/metrics/histograms/histograms_xml/tab/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/tab/histograms.xml
@@ -1465,7 +1465,7 @@
 </histogram>
 
 <histogram name="Tabs.PersistedTabData.Storage.Restore.File"
-    enum="BooleanSuccess" expires_after="2021-03-25">
+    enum="BooleanSuccess" expires_after="2021-07-27">
   <owner>yusufo@chromium.org</owner>
   <owner>nyquist@chromium.org</owner>
   <owner>dtrainor@chromium.org</owner>
@@ -2616,7 +2616,7 @@
 </histogram>
 
 <histogram name="TabStrip.UserStatus" enum="TabStripUserStatus"
-    expires_after="2021-04-04">
+    expires_after="2021-07-27">
   <owner>yusufo@chromium.org</owner>
   <owner>wychen@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/uma/histograms.xml b/tools/metrics/histograms/histograms_xml/uma/histograms.xml
index 0427e3bf..bc851d1 100644
--- a/tools/metrics/histograms/histograms_xml/uma/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/uma/histograms.xml
@@ -580,7 +580,7 @@
 </histogram>
 
 <histogram name="UMA.TruncatedEvents.UserAction" units="events"
-    expires_after="2021-07-18">
+    expires_after="2021-07-27">
   <owner>rkaplow@chromium.org</owner>
   <owner>src/base/metrics/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/v8/histograms.xml b/tools/metrics/histograms/histograms_xml/v8/histograms.xml
index 8a619511..c7d0d58 100644
--- a/tools/metrics/histograms/histograms_xml/v8/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/v8/histograms.xml
@@ -46,7 +46,7 @@
   </summary>
 </histogram>
 
-<histogram name="V8.CodeCacheSizeRatio" units="%" expires_after="2021-04-18">
+<histogram name="V8.CodeCacheSizeRatio" units="%" expires_after="2021-07-27">
   <owner>yangguo@chromium.org</owner>
   <summary>Cache size to source size ratio when caching compiled code.</summary>
 </histogram>
@@ -446,7 +446,7 @@
 </histogram>
 
 <histogram name="V8.GCFinalizeMC.Evacuate" units="ms"
-    expires_after="2021-04-01">
+    expires_after="2021-07-27">
   <owner>ulan@chromium.org</owner>
   <owner>hpayer@chromium.org</owner>
   <owner>v8-memory-sheriffs@google.com</owner>
@@ -589,7 +589,7 @@
 </histogram>
 
 <histogram name="V8.GCMainThreadMarkingThroughput" units="MB/s"
-    expires_after="2021-04-01">
+    expires_after="2021-07-27">
   <owner>mlippautz@chromium.org</owner>
   <owner>v8-memory-sheriffs@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml b/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml
index 1ab5071b..45325761 100644
--- a/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml
@@ -787,7 +787,7 @@
 </histogram>
 
 <histogram name="WebRTC.Audio.SpeechExpandRatePercent" units="%"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>hlundin@chromium.org</owner>
   <summary>
     Measures the audible expand rate for an incoming WebRTC audio stream. The
@@ -1459,7 +1459,7 @@
 </histogram>
 
 <histogram name="WebRTC.PeerConnection.SdpSemanticRequested"
-    enum="PeerConnectionSdpSemanticRequested" expires_after="2021-05-16">
+    enum="PeerConnectionSdpSemanticRequested" expires_after="2021-07-27">
   <owner>hta@chromium.org</owner>
   <owner>webrtc-dev@chromium.org</owner>
   <summary>
@@ -1551,7 +1551,7 @@
 </histogram>
 
 <histogram name="WebRTC.PeerConnection.ThermalState" enum="ThermalState"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>eshr@google.com</owner>
   <owner>hbos@chromium.org</owner>
   <summary>
@@ -1591,7 +1591,7 @@
 </histogram>
 
 <histogram name="WebRTC.ReceivedAudioTrackDuration" units="ms"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>perkj@chromium.org</owner>
   <summary>
     Durations of audio tracks received over a PeerConnection. The stopwatch
@@ -1601,7 +1601,7 @@
 </histogram>
 
 <histogram name="WebRTC.ReceivedVideoTrackDuration" units="ms"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>perkj@chromium.org</owner>
   <summary>
     Durations of video tracks received over a PeerConnection. The stopwatch
@@ -1611,7 +1611,7 @@
 </histogram>
 
 <histogram name="WebRTC.ReliableDataChannelMessageSize" units="bytes"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>perkj@chromium.org</owner>
   <summary>
     Sizes of messages sent over reliable data channels. The size of an
@@ -1627,7 +1627,7 @@
 </histogram>
 
 <histogram name="WebRTC.SentAudioTrackDuration" units="ms"
-    expires_after="2021-05-23">
+    expires_after="2021-07-27">
   <owner>perkj@chromium.org</owner>
   <summary>
     Durations of audio tracks sent over a PeerConnection. The stopwatch starts
diff --git a/tools/metrics/histograms/histograms_xml/windows/histograms.xml b/tools/metrics/histograms/histograms_xml/windows/histograms.xml
index 31ffcd0b..20e01de 100644
--- a/tools/metrics/histograms/histograms_xml/windows/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/windows/histograms.xml
@@ -310,7 +310,7 @@
 </histogram>
 
 <histogram name="Windows.ProcessorFamily" enum="ProcessorFamily"
-    expires_after="2021-05-02">
+    expires_after="2021-07-27">
   <owner>rkc@chromium.org</owner>
   <owner>rockot@chromium.org</owner>
   <summary>
@@ -322,7 +322,7 @@
 </histogram>
 
 <histogram name="Windows.ProcessorVirtualizationFirmwareEnabled"
-    enum="BooleanEnabled" expires_after="2021-05-02">
+    enum="BooleanEnabled" expires_after="2021-07-27">
   <owner>rkc@chromium.org</owner>
   <owner>rockot@chromium.org</owner>
   <summary>
@@ -364,7 +364,7 @@
 </histogram>
 
 <histogram name="Windows.TouchDrag.Success" units="BooleanSuccess"
-    expires_after="2021-03-01">
+    expires_after="2021-08-01">
   <owner>davidbienvenu@chromium.org</owner>
   <owner>dfried@chromium.org</owner>
   <summary>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index abac253..b813364 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -9,8 +9,8 @@
             "remote_path": "perfetto_binaries/trace_processor_shell/mac/a74aaf03d7c1d247452bb92b166cd432190e7eaf/trace_processor_shell"
         },
         "linux": {
-            "hash": "8e4c7dab0fef6554d44caed2a12f248503d6b57b",
-            "remote_path": "perfetto_binaries/trace_processor_shell/linux/a74aaf03d7c1d247452bb92b166cd432190e7eaf/trace_processor_shell"
+            "hash": "23a050cd7812d362911768fbe6825a7ce145888e",
+            "remote_path": "perfetto_binaries/trace_processor_shell/linux/4825074456917de8843b42e96abea018a7237b75/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/perf/core/shard_maps/android-pixel2-perf-fyi_map.json b/tools/perf/core/shard_maps/android-pixel2-perf-fyi_map.json
index 7e394337..708932c9 100644
--- a/tools/perf/core/shard_maps/android-pixel2-perf-fyi_map.json
+++ b/tools/perf/core/shard_maps/android-pixel2-perf-fyi_map.json
@@ -8,7 +8,10 @@
                 "abridged": false
             },
             "rendering.mobile": {
-                "end": 148,
+                "end": 223,
+                "abridged": false
+            },
+            "speedometer2": {
                 "abridged": false
             }
         }
@@ -16,16 +19,20 @@
     "1": {
         "benchmarks": {
             "rendering.mobile": {
-                "begin": 148,
-                "end": 298,
-                "abridged": false
-            }
-        }
-    },
-    "2": {
-        "benchmarks": {
-            "rendering.mobile": {
-                "begin": 298,
+                "sections": [
+                    {
+                        "begin": 46,
+                        "end": 47
+                    },
+                    {
+                        "begin": 86,
+                        "end": 87
+                    },
+                    {
+                        "begin": 223,
+                        "end": 419
+                    }
+                ],
                 "abridged": false
             },
             "speedometer2": {
@@ -35,34 +42,72 @@
                 "abridged": false
             },
             "system_health.common_mobile": {
-                "end": 25,
+                "end": 13,
+                "abridged": false
+            }
+        }
+    },
+    "2": {
+        "benchmarks": {
+            "system_health.common_mobile": {
+                "begin": 13,
+                "abridged": false
+            },
+            "system_health.memory_mobile": {
+                "end": 32,
+                "abridged": false
+            },
+            "speedometer2": {
+                "abridged": false
+            },
+            "rendering.mobile": {
+                "sections": [
+                    {
+                        "begin": 46,
+                        "end": 47
+                    },
+                    {
+                        "begin": 86,
+                        "end": 87
+                    }
+                ],
                 "abridged": false
             }
         }
     },
     "3": {
         "benchmarks": {
-            "system_health.common_mobile": {
-                "begin": 25,
-                "abridged": false
-            },
             "system_health.memory_mobile": {
+                "begin": 32,
                 "abridged": false
             },
             "v8.browsing_mobile": {
                 "abridged": false
+            },
+            "rendering.mobile": {
+                "sections": [
+                    {
+                        "begin": 46,
+                        "end": 47
+                    },
+                    {
+                        "begin": 86,
+                        "end": 87
+                    }
+                ],
+                "abridged": false
             }
         }
     },
     "extra_infos": {
         "num_stories": 601,
-        "predicted_min_shard_time": 1500,
-        "predicted_min_shard_index": 0,
-        "predicted_max_shard_time": 1510,
-        "predicted_max_shard_index": 2,
-        "shard #0": 1500,
-        "shard #1": 1500,
-        "shard #2": 1510,
-        "shard #3": 1500
+        "predicted_min_shard_time": 5225.0,
+        "predicted_min_shard_index": 1,
+        "predicted_max_shard_time": 5243.0,
+        "predicted_max_shard_index": 3,
+        "shard #0": 5232.0,
+        "shard #1": 5225.0,
+        "shard #2": 5230.0,
+        "shard #3": 5243.0
     }
 }
\ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android-pixel2-perf-fyi_timing.json b/tools/perf/core/shard_maps/timing_data/android-pixel2-perf-fyi_timing.json
index 0637a08..e1308023 100644
--- a/tools/perf/core/shard_maps/timing_data/android-pixel2-perf-fyi_timing.json
+++ b/tools/perf/core/shard_maps/timing_data/android-pixel2-perf-fyi_timing.json
@@ -1 +1,2382 @@
-[]
\ No newline at end of file
+[
+    {
+        "duration": "0.0",
+        "name": "jetstream/JetStream"
+    },
+    {
+        "duration": "55.0",
+        "name": "octane/Octane"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/accu_weather_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/amazon_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/amazon_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/analog_clock_svg"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/androidpolice_mobile_2018"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/animometer_webgl"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/animometer_webgl_attrib_arrays"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/animometer_webgl_multi_draw"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/aquarium"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/aquarium_20k"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/background_color_animation"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/background_color_animation_with_gradient"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/baidu_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/balls_css_key_frame_animations"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/balls_css_key_frame_animations_composited_transform"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/balls_css_transition_2_properties"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/balls_css_transition_40_properties"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/balls_css_transition_all_properties"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/balls_javascript_canvas"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/balls_javascript_css"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/balls_svg_animations"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/basic_stream"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/bing_mobile_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/blob"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/blogspot_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/blogspot_mobile_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/blur_rotating_background"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/boingboing_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/booking.com_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/booking.com_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/bouncing_balls_15"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_balls_shadow"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/bouncing_clipped_rectangles"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/bouncing_gradient_circles"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/bouncing_png_images"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/bouncing_svg_images"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/camera_to_webgl"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas2d_to_texture.html"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/canvas_05000_pixels_per_second"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/canvas_10000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/canvas_20000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/canvas_40000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/canvas_60000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/canvas_75000_pixels_per_second"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/canvas_90000_pixels_per_second"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_animation_no_clear"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_arcs"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_font_cycler"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_lines"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/canvas_to_blob"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/canvas_to_canvas_draw"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/capitolvolkswagen_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/card_expansion"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/card_expansion_animated"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/card_expansion_images_text"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/card_flying"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/cats_unscaled"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/cats_viewport_width"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/cc_poster_circle"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/cc_scroll_text_only"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/chip_tune"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/cnn_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/cnn_article_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/cnn_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/cnn_pathological_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/compositor_heavy_animation"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/coordinated_animation"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/core_scroll_header_panel"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/crafty_mind"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_many_keyframes"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_animations_simultaneous_inline_style"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_animations_simultaneous_new_element"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_animations_simultaneous_style_element"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_animations_simultaneous_updating_class"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_staggered_inline_style"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_staggered_new_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_staggered_style_element"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_staggered_updating_class"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_triggered_inline_style"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/css_animations_triggered_new_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_triggered_style_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_animations_triggered_updating_class"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_0"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_75"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/css_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_transitions_inline_style"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_transitions_new_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_staggered_inline_style"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_staggered_new_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_staggered_style_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_staggered_updating_class"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_transitions_style_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_triggered_inline_style"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_triggered_new_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_triggered_style_element"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_transitions_triggered_updating_class"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_transitions_updating_class"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_value_type_color"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_value_type_filter"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_length"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_length_complex"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_length_simple"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/css_value_type_path"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_value_type_shadow"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_value_type_transform_complex"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/css_value_type_transform_simple"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/deviantart_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/digg_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/docs_paper.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/docs_resume.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/docs_table.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/draw_image"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/draw_image_not_pixel_aligned"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/dynamic_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/dynamic_cube_map"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/dynamic_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/earth"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/ebay_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/ebay_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/ebay_scroll_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/effect_games"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/espn_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/espn_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/espn_pathological_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/extra_large_texture_uploads"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/facebook_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/facebook_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/falling_particle_simulation_cpu.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/falling_particle_simulation_gpu.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/famo_us_twitter_demo"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/fill_clear_rect.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/fill_shapes"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/filter_terrain_svg"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/flickr_scroll_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/font_wipe"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/forecast.io_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/geo_apis"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/get_image_data_cpu.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/get_image_data_gpu.html"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/gmail_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/google_calendar_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/google_docs_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/google_image_search_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/google_image_search_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/google_news_ios"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/google_news_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/google_plus_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/google_plus_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/google_web_search_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/google_web_search_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/gpu_bound_shader.html"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/gsp.ro_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/guardian_pathological_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/guimark_vector_chart"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/gws_boogie_expansion"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/gws_google_expansion"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/hakim"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/horizontal_vertical_expansion"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/hw_accelerated_canvas_to_sw_canvas.html"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/idle_power_animated_gif"
+    },
+    {
+        "duration": "35.0",
+        "name": "rendering.mobile/idle_power_blank"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/idle_power_css_animation"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/idle_power_request_animation_frame"
+    },
+    {
+        "duration": "6.0",
+        "name": "rendering.mobile/idle_power_set_timeout_long"
+    },
+    {
+        "duration": "6.0",
+        "name": "rendering.mobile/idle_power_set_timetout"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/ie_chalkboard"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/ie_pirate_mark"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_0"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_75"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_element_n_layers_99"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_0"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_75"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_fixed_n_layers_99"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_0"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_75"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/infinite_scroll_root_n_layers_99"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/infinite_scrolling"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/jarro_doverson"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/jpeg_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/jpeg_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/js_full_screen_invalidation"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_0"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_75"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_opacity_plus_n_layers_99"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_0"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_75"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_paint_plus_n_layers_99"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/js_poster_circle"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/js_scroll_text_only"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/kevs_3d"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/keyframed_animations"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/large_texture_uploads"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/latimes_pathological_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/linkedin_2018"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/linkedin_mobile_2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/linkedin_pathological_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/list_animation_simple"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/list_recycle_transform"
+    },
+    {
+        "duration": "60.0",
+        "name": "rendering.mobile/lost_crypt"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_0fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_0fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_15fps_impl_0fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_15fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_30fps_impl_0fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_30fps_impl_60fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_60fps_impl_0fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps_no_update"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_60fps_impl_60fps_no_update_jank"
+    },
+    {
+        "duration": "39.0",
+        "name": "rendering.mobile/main_60fps_with_extreme_jank_impl_0fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_60fps_with_jank_and_delay_impl_60fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/main_60fps_with_jank_impl_0fps"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/main_animations_half_presented"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/man_in_blue"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/many_images"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/many_planets_deep"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/maps_perf_test"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/mask_transition_animation"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/masonry"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/medium_texture_uploads"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/megi_dish"
+    },
+    {
+        "duration": "61.0",
+        "name": "rendering.mobile/microgame_fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/microsoft_asteroid_belt"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/microsoft_fireflies"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/microsoft_fish_ie_tank"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/microsoft_performance"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/microsoft_snow"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/microsoft_speed_reading"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/microsoft_tweet_map"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/microsoft_video_city"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/microsoft_worker_fountains"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/mix_10k"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_difference"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_hue"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/mix_blend_mode_animation_screen"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/mlb_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/mobile_news_sandbox"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motion_mark_canvas_fill_shapes"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/motion_mark_canvas_stroke_shapes"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_anim_design_15"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_anim_focus_25"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_anim_images_50"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_anim_leaves_250"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_anim_multiply_175"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/motionmark_anim_suits_125"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_html_composited_transforms_125"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_blend_circles_25"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_circles_250"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_clipped_rects_100"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_filter_circles_15"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_gradient_circles_250"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_svg_images_50"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_html_css_bouncing_tagged_images_225"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_html_dom_particles_svg_masks_25"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_html_focus_20_15"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_html_leaves_20_50"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_circles_250"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_clipped_rects_100"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_gradient_circles_200"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_png_images_200"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/motionmark_svg_bouncing_svg_images_50"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/new_tilings"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/no_op_raf"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/no_op_scroll"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/no_op_settimeout"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/no_op_touch_handler"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/nvidia_vertex_buffer_object"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/nyc_gov_scroll_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/nytimes_mobile_2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/nytimes_scroll_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/off_screen_main_60fps"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/off_screen_main_60fps_jank"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/overlay_background_color_css_transitions_page"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_button"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_calculator"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_calculator_hit_test"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_checkbox"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_fab"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_icon_button"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_shadow"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_tabs"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/paper_toggle_button"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/parallax_effect"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/particles"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/pbs_pathological_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/physical_simulation"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/pinterest_2018"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/pinterest_mobile_2018"
+    },
+    {
+        "duration": "7.0",
+        "name": "rendering.mobile/polymer_topeka"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/put_and_create_imagebitmap_from_imagedata"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/put_get_image_data"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/put_image_data.html"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/raf"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/raf_animation"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/raf_canvas"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/raf_touch_animation"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/recode_pathological_2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/reddit_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/runway_2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/san_angeles"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/second_batch_js_heavy"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/second_batch_js_light"
+    },
+    {
+        "duration": "14.0",
+        "name": "rendering.mobile/second_batch_js_medium"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/sfgate_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/sheets_render.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/silk_finance"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/simple_text_page"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/simple_touch_drag"
+    },
+    {
+        "duration": "61.0",
+        "name": "rendering.mobile/skelebuddies_wasm_2020"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/slashdot_mobile_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/slide_drawer"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/small_texture_uploads"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/smash_cat"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/spielzeugz"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/static_canvas_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/static_webgl_to_hw_accelerated_canvas.html"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/sticky_using_webkit"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/stress_hidey_bars"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/stroke_shapes"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/svg_icon_raster"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/swipe_action"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/swipe_to_dismiss"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/sync_scroll_offset"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/techcrunch_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/techcrunch_mobile_2018"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_05000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_10000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_20000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_40000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/text_60000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/text_75000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/text_90000_pixels_per_second"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second"
+    },
+    {
+        "duration": "36.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second"
+    },
+    {
+        "duration": "31.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second"
+    },
+    {
+        "duration": "33.0",
+        "name": "rendering.mobile/text_hover_05000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_hover_10000_pixels_per_second"
+    },
+    {
+        "duration": "34.0",
+        "name": "rendering.mobile/text_hover_20000_pixels_per_second"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/text_hover_40000_pixels_per_second"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/text_hover_60000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/text_hover_75000_pixels_per_second"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/text_hover_90000_pixels_per_second"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/theverge_article_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/theverge_mobile_2018"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/throughput_scrolling_active_handler"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/throughput_scrolling_composited"
+    },
+    {
+        "duration": "30.0",
+        "name": "rendering.mobile/throughput_scrolling_passive_handler"
+    },
+    {
+        "duration": "28.0",
+        "name": "rendering.mobile/throughput_scrolling_uncomposited"
+    },
+    {
+        "duration": "56.0",
+        "name": "rendering.mobile/tiny_racing_v3_wasm_2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/toBlob_duration.html"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/toBlob_duration_jpeg.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/toBlob_small_canvas_in_worker.html"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/toggle_drawer"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/touch_handler_scrolling"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/transfer_from_imageBitmap.html"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/transform_transitions"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/transform_transitions_js_block"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/twitch_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/twitter_2018"
+    },
+    {
+        "duration": "17.0",
+        "name": "rendering.mobile/twitter_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/update_history_state"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/usatoday_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/vertical_expansion"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/video_to_hw_accelerated_canvas"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/video_to_sub_texture"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/video_to_sub_texture_flip_and_premultiply"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/video_to_sub_texture_flip_y"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/video_to_sub_texture_premultiply"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/video_to_texture"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/web_animation_value_type_color"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animation_value_type_length_3d"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animation_value_type_length_complex"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animation_value_type_length_simple"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animation_value_type_path"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animation_value_type_shadow"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animation_value_type_transform_complex"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animation_value_type_transform_simple"
+    },
+    {
+        "duration": "29.0",
+        "name": "rendering.mobile/web_animations_many_keyframes"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animations_set_current_time"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/web_animations_simultaneous"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animations_staggered_chaining"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/web_animations_staggered_infinite_iterations"
+    },
+    {
+        "duration": "27.0",
+        "name": "rendering.mobile/web_animations_staggered_triggering_page"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/webgl_to_texture"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/webp_decoding_rgb_and_gpu_rasterization"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/webp_decoding_yuv_and_gpu_rasterization"
+    },
+    {
+        "duration": "26.0",
+        "name": "rendering.mobile/wikipedia_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/wikipedia_delayed_scroll_start_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/wikipedia_mobile_2018"
+    },
+    {
+        "duration": "25.0",
+        "name": "rendering.mobile/wordpress_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/wordpress_mobile_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/worldjournal_mobile_2018"
+    },
+    {
+        "duration": "24.0",
+        "name": "rendering.mobile/wow_wiki_pathological_2018"
+    },
+    {
+        "duration": "32.0",
+        "name": "rendering.mobile/wowwiki_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/wsj_mobile_2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "rendering.mobile/yahoo_answers_2018"
+    },
+    {
+        "duration": "6.0",
+        "name": "rendering.mobile/yahoo_answers_mobile_2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "rendering.mobile/yahoo_news_2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "rendering.mobile/yahoo_news_mobile_2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "rendering.mobile/yahoo_sports_2018"
+    },
+    {
+        "duration": "16.0",
+        "name": "rendering.mobile/yahoo_sports_pathological_2018"
+    },
+    {
+        "duration": "6.0",
+        "name": "rendering.mobile/youtube_2018"
+    },
+    {
+        "duration": "15.0",
+        "name": "rendering.mobile/youtube_mobile_2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "rendering.mobile/zdnet_pathological_2018"
+    },
+    {
+        "duration": "18.0",
+        "name": "rendering.mobile/zoom_in_animation"
+    },
+    {
+        "duration": "53.0",
+        "name": "speedometer2/Speedometer2"
+    },
+    {
+        "duration": "65.0",
+        "name": "startup.mobile/cct:coldish:bbc"
+    },
+    {
+        "duration": "67.0",
+        "name": "startup.mobile/intent:coldish:bbc"
+    },
+    {
+        "duration": "40.0",
+        "name": "startup.mobile/intent:warm:bbc"
+    },
+    {
+        "duration": "6.0",
+        "name": "startup.mobile/maps_pwa:with_http_cache"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.common_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.common_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.common_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.common_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.common_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "47.0",
+        "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.common_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "69.0",
+        "name": "system_health.common_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.common_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.common_mobile/browse:news:cnn:2020"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.common_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.common_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "56.0",
+        "name": "system_health.common_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "34.0",
+        "name": "system_health.common_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "48.0",
+        "name": "system_health.common_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.common_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "54.0",
+        "name": "system_health.common_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.common_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.common_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.common_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "52.0",
+        "name": "system_health.common_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "56.0",
+        "name": "system_health.common_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "6.0",
+        "name": "system_health.common_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "78.0",
+        "name": "system_health.common_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll:2019"
+    },
+    {
+        "duration": "62.0",
+        "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "60.0",
+        "name": "system_health.common_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.common_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:games:lazors"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.common_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.common_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.common_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "33.0",
+        "name": "system_health.common_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "29.0",
+        "name": "system_health.common_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "system_health.common_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "19.0",
+        "name": "system_health.common_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "4.0",
+        "name": "system_health.common_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/background:media:imgur:2019"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.memory_mobile/background:news:nytimes:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/background:search:google:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/background:social:facebook:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/background:tools:gmail:2019"
+    },
+    {
+        "duration": "53.0",
+        "name": "system_health.memory_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "system_health.memory_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "46.0",
+        "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "42.0",
+        "name": "system_health.memory_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "system_health.memory_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "50.0",
+        "name": "system_health.memory_mobile/browse:news:cnn:2020"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.memory_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "57.0",
+        "name": "system_health.memory_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "36.0",
+        "name": "system_health.memory_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "49.0",
+        "name": "system_health.memory_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "51.0",
+        "name": "system_health.memory_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "55.0",
+        "name": "system_health.memory_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "71.0",
+        "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "77.0",
+        "name": "system_health.memory_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll:2019"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "63.0",
+        "name": "system_health.memory_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "system_health.memory_mobile/browse:tools:maps:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:chrome:blank"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_mobile/load:games:bubbles:2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:games:lazors"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/load:games:spychase:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:media:dailymotion:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:media:facebook_feed:mobile:2020"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:media:facebook_photos:mobile:2020"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:media:flickr:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:media:google_images:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:media:imgur:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:media:soundcloud:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:media:youtube:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:news:bbc:2019"
+    },
+    {
+        "duration": "26.0",
+        "name": "system_health.memory_mobile/load:news:cnn:2020"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:news:irctc:2019"
+    },
+    {
+        "duration": "27.0",
+        "name": "system_health.memory_mobile/load:news:nytimes:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:news:qq:2019"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:news:reddit:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:news:washingtonpost:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:news:wikipedia:2018"
+    },
+    {
+        "duration": "23.0",
+        "name": "system_health.memory_mobile/load:search:amazon:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:search:baidu:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:search:ebay:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:search:google:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:search:taobao:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:search:yahoo:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:search:yandex:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:social:instagram:2019"
+    },
+    {
+        "duration": "24.0",
+        "name": "system_health.memory_mobile/load:social:pinterest:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:social:twitter:2019"
+    },
+    {
+        "duration": "21.0",
+        "name": "system_health.memory_mobile/load:tools:docs:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:tools:drive:2019"
+    },
+    {
+        "duration": "35.0",
+        "name": "system_health.memory_mobile/load:tools:dropbox:2019"
+    },
+    {
+        "duration": "30.0",
+        "name": "system_health.memory_mobile/load:tools:gmail:2019"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:tools:stackoverflow:2018"
+    },
+    {
+        "duration": "22.0",
+        "name": "system_health.memory_mobile/load:tools:weather:2019"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-background"
+    },
+    {
+        "duration": "2.0",
+        "name": "system_health.memory_mobile/long_running:tools:gmail-foreground"
+    },
+    {
+        "duration": "69.0",
+        "name": "v8.browsing_mobile/browse:chrome:newtab:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "v8.browsing_mobile/browse:chrome:omnibox:2019"
+    },
+    {
+        "duration": "88.0",
+        "name": "v8.browsing_mobile/browse:media:facebook_photos:2019"
+    },
+    {
+        "duration": "63.0",
+        "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll:2019"
+    },
+    {
+        "duration": "56.0",
+        "name": "v8.browsing_mobile/browse:media:googleplaystore:2019"
+    },
+    {
+        "duration": "90.0",
+        "name": "v8.browsing_mobile/browse:media:imgur:2019"
+    },
+    {
+        "duration": "72.0",
+        "name": "v8.browsing_mobile/browse:media:youtube:2019"
+    },
+    {
+        "duration": "71.0",
+        "name": "v8.browsing_mobile/browse:news:cnn:2020"
+    },
+    {
+        "duration": "20.0",
+        "name": "v8.browsing_mobile/browse:news:cricbuzz:2019"
+    },
+    {
+        "duration": "58.0",
+        "name": "v8.browsing_mobile/browse:news:globo:2019"
+    },
+    {
+        "duration": "81.0",
+        "name": "v8.browsing_mobile/browse:news:nytimes:2019"
+    },
+    {
+        "duration": "52.0",
+        "name": "v8.browsing_mobile/browse:news:qq:2019"
+    },
+    {
+        "duration": "67.0",
+        "name": "v8.browsing_mobile/browse:news:reddit:2019"
+    },
+    {
+        "duration": "70.0",
+        "name": "v8.browsing_mobile/browse:news:toi:2019"
+    },
+    {
+        "duration": "75.0",
+        "name": "v8.browsing_mobile/browse:news:washingtonpost:2019"
+    },
+    {
+        "duration": "39.0",
+        "name": "v8.browsing_mobile/browse:search:amp:2018"
+    },
+    {
+        "duration": "41.0",
+        "name": "v8.browsing_mobile/browse:search:amp:sxg:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.browsing_mobile/browse:shopping:amazon:2019"
+    },
+    {
+        "duration": "68.0",
+        "name": "v8.browsing_mobile/browse:shopping:avito:2019"
+    },
+    {
+        "duration": "69.0",
+        "name": "v8.browsing_mobile/browse:shopping:flipkart:2019"
+    },
+    {
+        "duration": "75.0",
+        "name": "v8.browsing_mobile/browse:shopping:lazada:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "v8.browsing_mobile/browse:social:facebook:2019"
+    },
+    {
+        "duration": "89.0",
+        "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll:2018"
+    },
+    {
+        "duration": "94.0",
+        "name": "v8.browsing_mobile/browse:social:instagram:2019"
+    },
+    {
+        "duration": "20.0",
+        "name": "v8.browsing_mobile/browse:social:pinterest_infinite_scroll:2019"
+    },
+    {
+        "duration": "85.0",
+        "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll:2018"
+    },
+    {
+        "duration": "78.0",
+        "name": "v8.browsing_mobile/browse:social:twitter:2019"
+    },
+    {
+        "duration": "86.0",
+        "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll:2018"
+    },
+    {
+        "duration": "57.0",
+        "name": "v8.browsing_mobile/browse:tools:maps:2019"
+    }
+]
\ No newline at end of file
diff --git a/tools/perf/cross_device_test_config.py b/tools/perf/cross_device_test_config.py
index d1a469e..0ff9eeb 100644
--- a/tools/perf/cross_device_test_config.py
+++ b/tools/perf/cross_device_test_config.py
@@ -22,7 +22,11 @@
 TARGET_DEVICES = {
     'android-pixel2-perf-fyi': {
         'speedometer2': {
-            'Speedometer2': 3
+            'Speedometer2': 3,
+        },
+        'rendering.mobile': {
+            'css_transitions_triggered_style_element': 4,
+            'canvas_animation_no_clear': 4
         }
     }
 }
diff --git a/tools/protoc_wrapper/protoc_wrapper.py b/tools/protoc_wrapper/protoc_wrapper.py
index 27fe2caed..f7f18a8 100755
--- a/tools/protoc_wrapper/protoc_wrapper.py
+++ b/tools/protoc_wrapper/protoc_wrapper.py
@@ -108,6 +108,14 @@
   parser.add_argument(
       "--descriptor-set-dependency-file",
       help="Path to write the dependency file for descriptor set.")
+  # The meaning of this flag is flipped compared to the corresponding protoc
+  # flag due to this script previously passing --include_imports. Removing the
+  # --include_imports is likely to have unintended consequences.
+  parser.add_argument(
+      "--exclude-imports",
+      help="Do not include imported files into generated descriptor.",
+      action="store_true",
+      default=False)
   parser.add_argument("protos", nargs="+",
                       help="Input protobuf definition file(s).")
 
@@ -164,15 +172,16 @@
 
   if options.descriptor_set_out:
     protoc_cmd += ["--descriptor_set_out", options.descriptor_set_out]
-    protoc_cmd += ["--include_imports"]
+    if not options.exclude_imports:
+      protoc_cmd += ["--include_imports"]
 
   dependency_file_data = None
   if options.descriptor_set_out and options.descriptor_set_dependency_file:
-      protoc_cmd += ['--dependency_out', options.descriptor_set_dependency_file]
-      ret = subprocess.call(protoc_cmd)
+    protoc_cmd += ['--dependency_out', options.descriptor_set_dependency_file]
+    ret = subprocess.call(protoc_cmd)
 
-      with open(options.descriptor_set_dependency_file, 'r') as f:
-        dependency_file_data = f.read().decode('utf-8')
+    with open(options.descriptor_set_dependency_file, 'r') as f:
+      dependency_file_data = f.read().decode('utf-8')
 
   ret = subprocess.call(protoc_cmd)
   if ret != 0:
diff --git a/ui/accessibility/accessibility_features.cc b/ui/accessibility/accessibility_features.cc
index 1f2a913..d9252772 100644
--- a/ui/accessibility/accessibility_features.cc
+++ b/ui/accessibility/accessibility_features.cc
@@ -10,6 +10,15 @@
 
 namespace features {
 
+// Enable recognizing "aria-virtualcontent" as a valid aria property.
+const base::Feature kEnableAccessibilityAriaVirtualContent{
+    "AccessibilityAriaVirtualContent", base::FEATURE_DISABLED_BY_DEFAULT};
+
+bool IsAccessibilityAriaVirtualContentEnabled() {
+  return base::FeatureList::IsEnabled(
+      ::features::kEnableAccessibilityAriaVirtualContent);
+}
+
 // Enable exposing "display: none" nodes to the browser process AXTree
 const base::Feature kEnableAccessibilityExposeDisplayNone{
     "AccessibilityExposeDisplayNone", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ui/accessibility/accessibility_features.h b/ui/accessibility/accessibility_features.h
index f913209..9e816e6 100644
--- a/ui/accessibility/accessibility_features.h
+++ b/ui/accessibility/accessibility_features.h
@@ -13,6 +13,13 @@
 
 namespace features {
 
+AX_BASE_EXPORT extern const base::Feature
+    kEnableAccessibilityAriaVirtualContent;
+
+// Returns true if "aria-virtualcontent" should be recognized as a valid aria
+// property.
+AX_BASE_EXPORT bool IsAccessibilityAriaVirtualContentEnabled();
+
 AX_BASE_EXPORT extern const base::Feature kEnableAccessibilityExposeDisplayNone;
 
 // Returns true if "display: none" nodes should be exposed to the
diff --git a/ui/accessibility/ax_enum_util.cc b/ui/accessibility/ax_enum_util.cc
index cecc6e3..da94454 100644
--- a/ui/accessibility/ax_enum_util.cc
+++ b/ui/accessibility/ax_enum_util.cc
@@ -1003,6 +1003,8 @@
       return "isPageBreakingObject";
     case ax::mojom::BoolAttribute::kHasAriaAttribute:
       return "hasAriaAttribute";
+    case ax::mojom::BoolAttribute::kTouchPassthrough:
+      return "touchPassthrough";
   }
 
   return "";
diff --git a/ui/accessibility/ax_enums.mojom b/ui/accessibility/ax_enums.mojom
index 5f24b882..2e07db2 100644
--- a/ui/accessibility/ax_enums.mojom
+++ b/ui/accessibility/ax_enums.mojom
@@ -763,6 +763,11 @@
 
   // True if the node has any ARIA attributes set.
   kHasAriaAttribute,
+
+  // This element allows touches to be passed through when a screen reader
+  // is in touch exploration mode, e.g. a virtual keyboard normally
+  // behaves this way.
+  kTouchPassthrough,
 };
 
 enum IntListAttribute {
diff --git a/ui/accessibility/ax_node_data.cc b/ui/accessibility/ax_node_data.cc
index e35efcdc..38c84c9b 100644
--- a/ui/accessibility/ax_node_data.cc
+++ b/ui/accessibility/ax_node_data.cc
@@ -1609,6 +1609,9 @@
       case ax::mojom::BoolAttribute::kHasAriaAttribute:
         result += " has_aria_attribute=" + value;
         break;
+      case ax::mojom::BoolAttribute::kTouchPassthrough:
+        result += " touch_passthrough=" + value;
+        break;
       case ax::mojom::BoolAttribute::kNone:
         break;
     }
diff --git a/ui/accessibility/ax_node_position_unittest.cc b/ui/accessibility/ax_node_position_unittest.cc
index 7246aed..0bba334 100644
--- a/ui/accessibility/ax_node_position_unittest.cc
+++ b/ui/accessibility/ax_node_position_unittest.cc
@@ -917,6 +917,14 @@
 
   // We now need to update the tree structure to test ignored tree and text
   // positions.
+  //
+  // ++root_data
+  // ++++static_text_data_1 "One" ignored
+  // ++++++inline_box_data_1 "One" ignored
+  // ++++container_data ignored
+  // ++++++static_text_data_2 "Two"
+  // ++++++++inline_box_data_2 "Two"
+
   AXNodeData root_data;
   root_data.id = 1;
   root_data.role = ax::mojom::Role::kRootWebArea;
@@ -925,6 +933,7 @@
   static_text_data_1.id = 2;
   static_text_data_1.role = ax::mojom::Role::kStaticText;
   static_text_data_1.SetName("One");
+  static_text_data_1.AddState(ax::mojom::State::kIgnored);
 
   AXNodeData inline_box_data_1;
   inline_box_data_1.id = 3;
@@ -960,25 +969,15 @@
   // Text positions.
   //
 
-  TestPositionType text_position_1 = AXNodePosition::CreateTextPosition(
-      GetTreeID(), root_data.id, 0 /* text_offset */,
-      ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position_1->IsTextPosition());
-  // Since the leaf node containing the text that is pointed to is ignored, this
-  // position should be ignored.
-  EXPECT_TRUE(text_position_1->IsIgnored());
-
-  // Create a text position before the letter "e" in "One".
-  TestPositionType text_position_2 = AXNodePosition::CreateTextPosition(
-      GetTreeID(), root_data.id, 2 /* text_offset */,
-      ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position_2->IsTextPosition());
-  // Same as above.
-  EXPECT_TRUE(text_position_2->IsIgnored());
+  // A "before text" position on the root should not be ignored, despite the
+  // fact that the leaf equivalent position is, because AXPosition always
+  // adjusts to an unignored position if asked to find the leaf equivalent
+  // position. In other words, the text of ignored leaves is not propagated to
+  // the inner text of their ancestors.
 
   // Create a text position before the letter "T" in "Two".
   TestPositionType text_position_3 = AXNodePosition::CreateTextPosition(
-      GetTreeID(), root_data.id, 3 /* text_offset */,
+      GetTreeID(), root_data.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_TRUE(text_position_3->IsTextPosition());
   // Since the leaf node containing the text that is pointed to is not ignored,
@@ -988,7 +987,7 @@
 
   // Create a text position before the letter "w" in "Two".
   TestPositionType text_position_4 = AXNodePosition::CreateTextPosition(
-      GetTreeID(), root_data.id, 4 /* text_offset */,
+      GetTreeID(), root_data.id, 1 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
   ASSERT_TRUE(text_position_4->IsTextPosition());
   // Same as above.
@@ -1003,7 +1002,7 @@
   EXPECT_TRUE(text_position_5->IsIgnored());
 
   // Whilst a text position on its static text child should not be ignored since
-  // there is nothing ignore below the generic container.
+  // there is nothing ignored below the generic container.
   TestPositionType text_position_6 = AXNodePosition::CreateTextPosition(
       GetTreeID(), static_text_data_2.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
@@ -1021,14 +1020,12 @@
   // Tree positions.
   //
 
-  // A "before children" position on the root should not be ignored, despite the
-  // fact that the leaf equivalent position is, because we can always adjust to
-  // an unignored position if asked to find the leaf equivalent unignored
-  // position.
+  // A "before children" position on the root should be ignored because the
+  // first child of the root is ignored.
   TestPositionType tree_position_1 = AXNodePosition::CreateTreePosition(
       GetTreeID(), root_data.id, 0 /* child_index */);
   ASSERT_TRUE(tree_position_1->IsTreePosition());
-  EXPECT_FALSE(tree_position_1->IsIgnored());
+  EXPECT_TRUE(tree_position_1->IsIgnored());
 
   // A tree position pointing to an ignored child node should be ignored.
   TestPositionType tree_position_2 = AXNodePosition::CreateTreePosition(
@@ -1055,11 +1052,11 @@
   ASSERT_TRUE(tree_position_5->IsTreePosition());
   EXPECT_TRUE(tree_position_5->IsIgnored());
 
-  // A "before text" position on an unignored node should not be ignored.
+  // A "before text" position on an ignored node should be ignored.
   TestPositionType tree_position_6 = AXNodePosition::CreateTreePosition(
       GetTreeID(), static_text_data_1.id, AXNodePosition::BEFORE_TEXT);
   ASSERT_TRUE(tree_position_6->IsTreePosition());
-  EXPECT_FALSE(tree_position_6->IsIgnored());
+  EXPECT_TRUE(tree_position_6->IsIgnored());
 }
 
 TEST_F(AXPositionTest, GetTextFromNullPosition) {
@@ -3297,6 +3294,16 @@
   EXPECT_EQ(inline_box2_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->child_index());
 
+  // Nodes with no text should not be skipped when finding the leaf text
+  // position, otherwise a "before text" position could accidentally turn into
+  // an "after text" one.
+  // ++kTextField "" (empty)
+  // ++++kStaticText "" (empty)
+  // ++++++kInlineTextBox "" (empty)
+  // A TextPosition anchor=kTextField text_offset=0, should turn into a leaf
+  // text position at the start of kInlineTextBox and not after it. In this
+  // case, the deepest first child of the root is the button, regardless as to
+  // whether it has no text inside it.
   text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), root_.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
@@ -3306,7 +3313,7 @@
   ASSERT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsLeafTreePosition());
   EXPECT_EQ(GetTreeID(), test_position->tree_id());
-  EXPECT_EQ(inline_box1_.id, test_position->anchor_id());
+  EXPECT_EQ(button_.id, test_position->anchor_id());
   EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
 
   text_position = AXNodePosition::CreateTextPosition(
@@ -3622,8 +3629,9 @@
 
 TEST_F(AXPositionTest, AsLeafTextPositionWithTextPositionAndEmptyTextSandwich) {
   // This test updates the tree structure to test a specific edge case -
-  // AsLeafTextPosition when there is an empty leaf text node between
-  // two non-empty text nodes.
+  // `AsLeafTextPosition` when there is an empty leaf text node between
+  // two non-empty text nodes. Empty leaf nodes should be skipped when finding
+  // the leaf equivalent position.
   AXNodeData root_data;
   root_data.id = 1;
   root_data.role = ax::mojom::Role::kRootWebArea;
@@ -3649,7 +3657,8 @@
   SetTree(CreateAXTree({root_data, text_data, button_data, more_text_data}));
 
   // Create a text position on the root pointing to just after the
-  // first static text leaf node.
+  // first static text leaf node. Even though the button has empty inner text,
+  // still it should not be skipped when finding the leaf text position.
   TestPositionType text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), root_data.id, 9 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
@@ -3678,6 +3687,14 @@
 }
 
 TEST_F(AXPositionTest, AsUnignoredPosition) {
+  // ++root_data
+  // ++++static_text_data_1 "1"
+  // ++++++inline_box_data_1 "1"
+  // ++++++inline_box_data_1 "2" ignored
+  // ++++container_data ignored
+  // ++++++static_data_2 "3"
+  // ++++++++inline_box_data_2 "3"
+
   AXNodeData root_data;
   root_data.id = 1;
   root_data.role = ax::mojom::Role::kRootWebArea;
@@ -3685,7 +3702,7 @@
   AXNodeData static_text_data_1;
   static_text_data_1.id = 2;
   static_text_data_1.role = ax::mojom::Role::kStaticText;
-  static_text_data_1.SetName("12");
+  static_text_data_1.SetName("1");
 
   AXNodeData inline_box_data_1;
   inline_box_data_1.id = 3;
@@ -3734,33 +3751,33 @@
   TestPositionType text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), container_data.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position->IsIgnored());
+  EXPECT_TRUE(text_position->IsIgnored());
   TestPositionType test_position = text_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(root_data.id, test_position->anchor_id());
-  EXPECT_EQ(2, test_position->text_offset());
+  EXPECT_EQ(1, test_position->text_offset());
   EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, test_position->affinity());
 
   // "After text" position.
   text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), container_data.id, 1 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position->IsIgnored());
+  EXPECT_TRUE(text_position->IsIgnored());
   // Changing the adjustment behavior should not affect the outcome.
   test_position = text_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveBackward);
   ASSERT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(root_data.id, test_position->anchor_id());
-  EXPECT_EQ(3, test_position->text_offset());
+  EXPECT_EQ(2, test_position->text_offset());
   EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, test_position->affinity());
 
   // "Before children" position.
   TestPositionType tree_position = AXNodePosition::CreateTreePosition(
       GetTreeID(), container_data.id, 0 /* child_index */);
-  ASSERT_TRUE(tree_position->IsIgnored());
+  EXPECT_TRUE(tree_position->IsIgnored());
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
@@ -3771,7 +3788,7 @@
   // "After children" position.
   tree_position = AXNodePosition::CreateTreePosition(
       GetTreeID(), container_data.id, 1 /* child_index */);
-  ASSERT_TRUE(tree_position->IsIgnored());
+  EXPECT_TRUE(tree_position->IsIgnored());
   // Changing the adjustment behavior should not affect the outcome.
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveBackward);
@@ -3784,7 +3801,7 @@
   // whose last child is ignored.
   tree_position = AXNodePosition::CreateTreePosition(
       GetTreeID(), static_text_data_1.id, 2 /* child_index */);
-  ASSERT_TRUE(tree_position->IsIgnored());
+  EXPECT_TRUE(tree_position->IsIgnored());
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveBackward);
   ASSERT_NE(nullptr, test_position);
@@ -3805,7 +3822,7 @@
   text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), root_data.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position->IsIgnored());
+  EXPECT_TRUE(text_position->IsIgnored());
   test_position = text_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
@@ -3817,7 +3834,7 @@
   text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), root_data.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position->IsIgnored());
+  EXPECT_TRUE(text_position->IsIgnored());
   // Changing the adjustment behavior should not change the outcome.
   test_position = text_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveBackward);
@@ -3829,7 +3846,7 @@
 
   tree_position = AXNodePosition::CreateTreePosition(GetTreeID(), root_data.id,
                                                      1 /* child_index */);
-  ASSERT_TRUE(tree_position->IsIgnored());
+  EXPECT_TRUE(tree_position->IsIgnored());
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
@@ -3848,7 +3865,7 @@
   // "After children" position.
   tree_position = AXNodePosition::CreateTreePosition(GetTreeID(), root_data.id,
                                                      2 /* child_index */);
-  ASSERT_TRUE(tree_position->IsIgnored());
+  EXPECT_TRUE(tree_position->IsIgnored());
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
@@ -3867,7 +3884,7 @@
   // "Before children" position.
   tree_position = AXNodePosition::CreateTreePosition(
       GetTreeID(), container_data.id, 0 /* child_index */);
-  ASSERT_TRUE(tree_position->IsIgnored());
+  EXPECT_TRUE(tree_position->IsIgnored());
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
@@ -3878,7 +3895,7 @@
   // "After children" position.
   tree_position = AXNodePosition::CreateTreePosition(
       GetTreeID(), container_data.id, 1 /* child_index */);
-  ASSERT_TRUE(tree_position->IsIgnored());
+  EXPECT_TRUE(tree_position->IsIgnored());
   // Changing the adjustment behavior should not affect the outcome.
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveBackward);
@@ -3887,13 +3904,10 @@
   EXPECT_EQ(inline_box_data_3.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->child_index());
 
-  // 3. As a last resort, we move either to the next or previous unignored
-  // position in the accessibility tree, based on the "adjustment_behavior".
-
   text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), root_data.id, 1 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position->IsIgnored());
+  EXPECT_TRUE(text_position->IsIgnored());
   test_position = text_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
@@ -3905,7 +3919,7 @@
   text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), inline_box_data_2.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position->IsIgnored());
+  EXPECT_TRUE(text_position->IsIgnored());
   test_position = text_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
@@ -3917,7 +3931,7 @@
   text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), inline_box_data_2.id, 0 /* text_offset */,
       ax::mojom::TextAffinity::kDownstream);
-  ASSERT_TRUE(text_position->IsIgnored());
+  EXPECT_TRUE(text_position->IsIgnored());
   test_position = text_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveBackward);
   ASSERT_NE(nullptr, test_position);
@@ -3929,14 +3943,14 @@
 
   tree_position = AXNodePosition::CreateTreePosition(
       GetTreeID(), inline_box_data_2.id, AXNodePosition::BEFORE_TEXT);
-  ASSERT_TRUE(tree_position->IsIgnored());
+  EXPECT_TRUE(tree_position->IsIgnored());
+
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveForward);
   ASSERT_NE(nullptr, test_position);
   EXPECT_TRUE(test_position->IsTreePosition());
   EXPECT_EQ(inline_box_data_3.id, test_position->anchor_id());
   EXPECT_EQ(AXNodePosition::BEFORE_TEXT, test_position->child_index());
-  ASSERT_TRUE(tree_position->IsIgnored());
 
   test_position = tree_position->AsUnignoredPosition(
       AXPositionAdjustmentBehavior::kMoveBackward);
@@ -6775,10 +6789,7 @@
   EXPECT_TRUE(test_position->IsTextPosition());
   EXPECT_EQ(root_.id, test_position->anchor_id());
   EXPECT_EQ(0, test_position->text_offset());
-  // Since the same text offset in the root could be used to point to the
-  // beginning of the second line, affinity should have been adjusted to
-  // upstream.
-  EXPECT_EQ(ax::mojom::TextAffinity::kUpstream, test_position->affinity());
+  EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, test_position->affinity());
 
   text_position = AXNodePosition::CreateTextPosition(
       GetTreeID(), root_.id, 2 /* text_offset */,
@@ -8625,8 +8636,8 @@
   ASSERT_NE(nullptr, text_position_two);
   ASSERT_TRUE(text_position_two->IsTextPosition());
 
-  ASSERT_TRUE(*text_position_one == *text_position_two);
-  ASSERT_TRUE(*text_position_two == *text_position_one);
+  EXPECT_TRUE(*text_position_one == *text_position_two);
+  EXPECT_TRUE(*text_position_two == *text_position_one);
 }
 
 TEST_F(AXPositionTest, OperatorEqualsSameTextOffsetDifferentAnchorIdLeaf) {
@@ -9514,6 +9525,9 @@
   result_position =
       position->CreateNextWordEndPosition(AXBoundaryBehavior::CrossBoundary);
   EXPECT_TRUE(result_position->IsTextPosition());
+  // The position would be on `text_field_4` instead of on `generic_container_5`
+  // because the latter is ignored, and by design we prefer not to create
+  // positions on ignored nodes if it could be avoided.
   EXPECT_EQ(text_field_4.id, result_position->anchor_id());
   EXPECT_EQ(1, result_position->text_offset());
   EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity());
@@ -9533,6 +9547,9 @@
   result_position = position->CreatePreviousWordEndPosition(
       AXBoundaryBehavior::CrossBoundary);
   EXPECT_TRUE(result_position->IsTextPosition());
+  // The position would be on `text_field_4` instead of on `generic_container_5`
+  // because the latter is ignored, and by design we prefer not to create
+  // positions on ignored nodes if it could be avoided.
   EXPECT_EQ(text_field_4.id, result_position->anchor_id());
   EXPECT_EQ(1, result_position->text_offset());
   EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity());
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h
index addd117..64b7771 100644
--- a/ui/accessibility/ax_position.h
+++ b/ui/accessibility/ax_position.h
@@ -224,6 +224,30 @@
 
   virtual AXPositionInstance Clone() const = 0;
 
+  AXPositionInstance CloneWithDownstreamAffinity() const {
+    if (!IsTextPosition()) {
+      NOTREACHED() << "Only text positions have affinity.";
+      return CreateNullPosition();
+    }
+
+    AXPositionInstance clone_with_downstream_affinity = Clone();
+    clone_with_downstream_affinity->affinity_ =
+        ax::mojom::TextAffinity::kDownstream;
+    return clone_with_downstream_affinity;
+  }
+
+  AXPositionInstance CloneWithUpstreamAffinity() const {
+    if (!IsTextPosition()) {
+      NOTREACHED() << "Only text positions have affinity.";
+      return CreateNullPosition();
+    }
+
+    AXPositionInstance clone_with_upstream_affinity = Clone();
+    clone_with_upstream_affinity->affinity_ =
+        ax::mojom::TextAffinity::kUpstream;
+    return clone_with_upstream_affinity;
+  }
+
   // A serialization of a position as POD. Not for sharing on disk or sharing
   // across thread or process boundaries, just for passing a position to an
   // API that works with positions as opaque objects.
@@ -569,7 +593,7 @@
         // a non-empty text position in which case the end of line iterators
         // must move to the line end of the non-empty content. Specified next
         // line IDs are ignored.
-        if (!text_position->MaxTextOffset())
+        if (text_position->MaxTextOffset() == 0)
           return false;
 
         // If affinity has been used to specify whether the caret is at the end
@@ -1151,31 +1175,48 @@
       return Clone();
 
     AXPositionInstance copy = Clone();
-    DCHECK(copy);
     DCHECK_GE(copy->text_offset_, 0);
+    // Note that by design, `AXPosition::IsLeaf()` excludes the text found in
+    // ignored subtrees from the accessibility tree's text representation. (See
+    // `AXNode::IsEmptyLeaf()`.)
     if (copy->IsLeaf()) {
-      const int max_text_offset = copy->MaxTextOffset();
-      copy->child_index_ =
-          (max_text_offset != 0 && copy->text_offset_ != max_text_offset)
-              ? BEFORE_TEXT
-              : 0;
+      // Even though leaf positions are generally not anchored to a node with a
+      // lot of descendants, still, there is the possibility that the leaf node
+      // is a text field with a large amount of text. We avoid computing
+      // `MaxTextOffset()` unless it is really necessary.
+      if (copy->text_offset_ == 0) {
+        copy->child_index_ = BEFORE_TEXT;
+      } else {
+        const int max_text_offset = copy->MaxTextOffset();
+        copy->child_index_ =
+            copy->text_offset_ != max_text_offset ? BEFORE_TEXT : 0;
+      }
+
       copy->kind_ = AXPositionKind::TREE_POSITION;
       return copy;
     }
 
-    // We stop at the last child that we can reach with the current text offset
-    // and ignore any remaining children. This is for defensive programming
-    // purposes, in case "MaxTextOffset" doesn't match the total length of all
-    // our children. This may happen if, for example, there is a bug in the
-    // internal accessibility tree we get from the renderer. In contrast, the
-    // current offset could not be greater than the length of all our children
-    // because the position would have been invalid.
-    int current_offset = 0;
+    // We stop at the first child that we can reach with the current text
+    // offset. We do not attempt to validate `MaxTextOffset()` in case it
+    // doesn't match the total length of all our children. This may happen if,
+    // for example, there is a bug in the internal accessibility tree we get
+    // from the renderer. In contrast, the current offset could not be greater
+    // than the length of all our children because the position would have been
+    // invalid.
+    //
+    // Note that even though ignored children should not contribute any inner
+    // text or hypertext to the tree's text representation, we have to include
+    // them because they might contain unignored descendants. We only exclude
+    // them if they are both ignored and contain no inner text or hypertext. The
+    // latter is to avoid, as much as we can, the possibility that an unignored
+    // position will turn into an ignored one after calling this method.
+
     int child_index = 0;
-    for (; child_index < copy->AnchorChildCount(); ++child_index) {
+    for (int current_offset = 0; child_index < copy->AnchorChildCount();
+         ++child_index) {
       AXPositionInstance child = copy->CreateChildPositionAt(child_index);
-      DCHECK(child);
-      int child_length = child->MaxTextOffsetInParent();
+      DCHECK(!child->IsNullPosition());
+
       // If the text offset falls on the boundary between two adjacent children,
       // we look at the affinity to decide whether to place the tree position on
       // the first child vs. the second child. Upstream affinity would always
@@ -1184,16 +1225,34 @@
       // to a text position. In that case, maintaining an upstream affinity
       // would place the text position at the end of the first child, whilst
       // maintaining a downstream affinity will place the text position at the
-      // beginning of the second child.
+      // beginning of the second child. This is vital for text positions on soft
+      // line breaks, as well as text positions before and after character, to
+      // work properly.
       //
-      // This is vital for text positions on soft line breaks, as well as text
-      // positions before and after character, to work properly.
+      // Note that in this context "adjacent children" excludes ignored
+      // children. Note also that children with no inner text or no hypertext
+      // are not skipped, otherwise the following situation will produce an
+      // erroneous tree position:
+      // ++kTextField contenteditable=true "" (empty)
+      // ++++kStaticText "\n" ignored
+      // ++++++kInlineTextBox "\n" ignored
+      // ++++kStaticText "" (empty)
+      // ++++++kInlineTextOffset "" (empty)
+      // TextPosition anchor=kTextField text_offset=0 affinity=downstream
+      // AsTreePosition should produce:
+      // TreePosition anchor=kTextField child_index=1, and not child_index=0 or
+      // child_index=2
       //
       // See also `CreateLeafTextPositionBeforeCharacter` and
       // `CreateLeafTextPositionAfterCharacter`.
+
+      const int child_length = child->MaxTextOffsetInParent();
+      const bool contributes_no_text_in_parent = !child_length;
+      const bool is_anchor_unignored = !child->GetAnchor()->IsIgnored();
       if (copy->text_offset_ >= current_offset &&
           (copy->text_offset_ < (current_offset + child_length) ||
-           (copy->affinity_ == ax::mojom::TextAffinity::kUpstream &&
+           ((copy->affinity_ == ax::mojom::TextAffinity::kUpstream ||
+             (contributes_no_text_in_parent && is_anchor_unignored)) &&
             copy->text_offset_ == (current_offset + child_length)))) {
         break;
       }
@@ -1241,10 +1300,10 @@
         tree_position =
             tree_position->CreateChildPositionAt(tree_position->child_index_);
       }
-      DCHECK(tree_position && !tree_position->IsNullPosition());
+      DCHECK(!tree_position->IsNullPosition());
     } while (!tree_position->IsLeaf());
 
-    DCHECK(tree_position && tree_position->IsLeafTreePosition());
+    DCHECK(tree_position->IsLeafTreePosition());
     return tree_position;
   }
 
@@ -1253,17 +1312,18 @@
       return Clone();
 
     AXPositionInstance copy = Clone();
-    DCHECK(copy);
     // Check if it is a "before text" position.
     if (copy->child_index_ == BEFORE_TEXT) {
-      // "Before text" positions can only appear on leaf nodes.
-      DCHECK(copy->IsLeaf());
+      DCHECK(copy->IsLeaf())
+          << "Before text positions can only appear on leaf nodes.";
       // If the current text offset is valid, we don't touch it to potentially
       // allow converting from a text position to a tree position and back
       // without losing information.
       //
-      // We test for INVALID_OFFSET first, due to the possible performance
-      // implications of calling MaxTextOffset().
+      // We test for INVALID_OFFSET and greater than 0 first, due to the
+      // possible performance cost of calling `MaxTextOffset()`. Also, if the
+      // text offset is already 0, we don't need to touch it, and if it is less
+      // than `MaxTextOffset()` we don't modify it as explained above.
       DCHECK_GE(copy->text_offset_, INVALID_OFFSET)
           << "Unrecognized text offset.";
       if (copy->text_offset_ == INVALID_OFFSET ||
@@ -1271,21 +1331,35 @@
            copy->text_offset_ >= copy->MaxTextOffset())) {
         copy->text_offset_ = 0;
       }
-    } else if (copy->child_index_ == copy->AnchorChildCount()) {
+
+      copy->kind_ = AXPositionKind::TEXT_POSITION;
+      return copy;
+    }
+
+    // Leaf nodes might have descendants that should be hidden for text
+    // navigation purposes, thus we can't rely solely on `AnchorChildCount()`.
+    // Any child index that is not `BEFORE_TEXT` should be treated as indicating
+    // an "after text" position. (See `IsEmptyObjectReplacedByCharacter()` for
+    // more information.)
+    // ++kButton "<embedded_object_character>" (empty)
+    // ++++kGenericContainer ignored (Might sometimes be added by Blink.)
+    if (copy->IsLeaf() || copy->child_index_ == copy->AnchorChildCount()) {
       copy->text_offset_ = copy->MaxTextOffset();
-    } else {
+      copy->kind_ = AXPositionKind::TEXT_POSITION;
+      return copy;
+    }
+
       DCHECK_GE(copy->child_index_, 0);
       DCHECK_LT(copy->child_index_, copy->AnchorChildCount());
       int new_offset = 0;
       for (int i = 0; i <= child_index_; ++i) {
         AXPositionInstance child = copy->CreateChildPositionAt(i);
-        DCHECK(child);
+        DCHECK(!child->IsNullPosition());
         // If the current text offset is valid, we don't touch it to
         // potentially allow converting from a text position to a tree
         // position and back without losing information. Otherwise, if the
         // text_offset is invalid, equals to 0 or is smaller than
-        // |new_offset|, we reset it to the beginning of the current child
-        // node.
+        // |new_offset|, we reset it to the beginning of the current child.
         if (i == child_index_ && copy->text_offset_ <= new_offset) {
           copy->text_offset_ = new_offset;
           break;
@@ -1306,16 +1380,15 @@
 
         new_offset += child_length;
       }
-    }
 
-    // Affinity should always be left as downstream. The only case when the
-    // resulting text position is at the end of the line is when we get an
-    // "after text" leaf position, but even in this case downstream is
-    // appropriate because there is no ambiguity whetehr the position is at the
-    // end of the current line vs. the start of the next line. It would always
-    // be the former.
-    copy->kind_ = AXPositionKind::TEXT_POSITION;
-    return copy;
+      // Affinity should always be left as downstream. The only case when the
+      // resulting text position is at the end of the line is when we get an
+      // "after text" leaf position, but even in this case downstream is
+      // appropriate because there is no ambiguity whether the position is at
+      // the end of the current line vs. the start of the next line. It would
+      // always be the former.
+      copy->kind_ = AXPositionKind::TEXT_POSITION;
+      return copy;
   }
 
   AXPositionInstance AsLeafTextPosition() const {
@@ -1328,36 +1401,49 @@
     AXPositionInstance text_position = AsTextPosition();
     int adjusted_offset = text_position->text_offset_;
     do {
-      AXPositionInstance child_position =
-          text_position->CreateChildPositionAt(0);
-      DCHECK(child_position);
+      AXPositionInstance child = text_position->CreateChildPositionAt(0);
+      DCHECK(!child->IsNullPosition());
 
-      // If the text offset corresponds to multiple child positions because some
-      // of the children have empty text, the condition "adjusted_offset > 0"
-      // below ensures that the first child will be chosen.
+      // Note that even though ignored children should not contribute any inner
+      // text or hypertext to the tree's text representation, we have to include
+      // them because they might contain unignored descendants. We only exclude
+      // them if they are both ignored and contain no inner text or hypertext.
+      // The latter is to avoid, as much as we can, the possibility that an
+      // unignored position will turn into an ignored one after calling this
+      // method.
       for (int i = 1;
-           i < text_position->AnchorChildCount() && adjusted_offset > 0; ++i) {
-        const int max_text_offset_in_parent =
-            child_position->MaxTextOffsetInParent();
-        if (adjusted_offset < max_text_offset_in_parent) {
+           i < text_position->AnchorChildCount() && adjusted_offset >= 0; ++i) {
+        const int child_length = child->MaxTextOffsetInParent();
+        const bool contributes_no_text_in_parent = !child_length;
+        const bool is_anchor_unignored = !child->GetAnchor()->IsIgnored();
+        if (adjusted_offset == 0 && contributes_no_text_in_parent &&
+            is_anchor_unignored) {
+          // If the text offset corresponds to multiple child positions because
+          // some of the children have no inner text or hypertext, the above
+          // condition ensures that the first child will be chosen; unless it is
+          // ignored as explained before.
           break;
         }
+
+        if (adjusted_offset < child_length)
+          break;
+
         if (affinity_ == ax::mojom::TextAffinity::kUpstream &&
-            adjusted_offset == max_text_offset_in_parent) {
+            adjusted_offset == child_length) {
           // Maintain upstream affinity so that we'll be able to choose the
           // correct leaf anchor if the text offset is right on the boundary
           // between two leaves.
-          child_position->affinity_ = ax::mojom::TextAffinity::kUpstream;
+          child->affinity_ = ax::mojom::TextAffinity::kUpstream;
           break;
         }
-        child_position = text_position->CreateChildPositionAt(i);
-        adjusted_offset -= max_text_offset_in_parent;
+
+        child = text_position->CreateChildPositionAt(i);
+        adjusted_offset -= child_length;
       }
 
-      text_position = std::move(child_position);
+      text_position = std::move(child);
     } while (!text_position->IsLeaf());
 
-    DCHECK(text_position);
     DCHECK(text_position->IsLeafTextPosition());
     text_position->text_offset_ = adjusted_offset;
     // A leaf Text position is always downstream since there is no ambiguity as
@@ -1906,7 +1992,7 @@
   // these three conditions apply: This is a text position, we are in the
   // process of searching for a text boundary, and this is a platform where
   // child nodes are represented by "object replacement characters". On such
-  // platforms, the "IsEmbeddedObjectInParent" method returns true. We need to
+  // platforms, the `IsEmbeddedObjectInParent` method returns true. We need to
   // decide whether to create a parent equivalent position that is before or
   // after the child node, since moving to a parent position would always cause
   // us to lose some information. We can't simply re-use the text offset of the
@@ -1939,6 +2025,7 @@
       case AXPositionKind::NULL_POSITION:
         NOTREACHED();
         return CreateNullPosition();
+
       case AXPositionKind::TREE_POSITION: {
         int child_index = AnchorIndexInParent();
         // If this position is an "after children" or an "after text" position,
@@ -1978,11 +2065,12 @@
             return CreateTreePosition(tree_id, parent_id, child_index);
         }
       }
+
       case AXPositionKind::TEXT_POSITION: {
         // On some platforms, such as Android, Mac and Chrome OS, the inner text
         // of a node is made up by concatenating the text of child nodes. On
-        // other platforms, such as Windows IA2 and Linux ATK, child nodes are
-        // represented by a single "object replacement character".
+        // other platforms, such as Windows IAccessible2 and Linux ATK, child
+        // nodes are represented by a single "object replacement character".
         //
         // If our parent's inner text is a concatenation of all its children's
         // text, we need to maintain the affinity and compute the corresponding
@@ -2005,19 +2093,40 @@
         // "Line one", then the resulting parent equivalent position would be
         // the same as the one that would have been computed if the original
         // position were at the start of the inline text box for "Line two".
+
         const int max_text_offset = MaxTextOffset();
         DCHECK_LE(text_offset_, max_text_offset);
         const int max_text_offset_in_parent =
-            IsEmbeddedObjectInParent() ? 1 : max_text_offset;
+            IsEmbeddedObjectInParent() ? AXNode::kEmbeddedCharacterLength
+                                       : max_text_offset;
         int parent_offset = AnchorTextOffsetInParent();
         ax::mojom::TextAffinity parent_affinity = affinity_;
-        if (max_text_offset == max_text_offset_in_parent) {
+
+        // "max_text_offset > 0" is required to filter out anchor nodes that are
+        // either ignored or empty, i.e. those that contribute no inner text or
+        // hypertext to their parent's text representation. (See example in the
+        // "else" block.)
+        if (max_text_offset > 0 &&
+            max_text_offset == max_text_offset_in_parent) {
           // Our parent contains all our text. No information would be lost when
-          // moving to a parent equivalent position.
+          // moving to a parent equivalent position. It turns out, that even in
+          // the unusual case where there is a single character in our anchor's
+          // inner text but our anchor is represented in our parent by an
+          // "embedded object replacement character" and not by our inner text,
+          // the outcome is still correct.
           parent_offset += text_offset_;
         } else {
           // Our parent represents our anchor node using an "object replacement"
-          // character in its text representation.
+          // character in its text representation. Or, our anchor is a text node
+          // that is ignored or empty, and so contributes no text in its
+          // parent's text representation. For example:
+          // ++kTextField "Before after."
+          // ++++kStaticText "Before "
+          // ++++kStaticText "Ignored text" ignored
+          // ++++kStaticText "after."
+          // TextPosition anchor=kStaticText (ignored) text_offset=2
+          // annotated_text="Ig<n>ored text"
+
           if (text_offset_ > 0 && text_offset_ < max_text_offset) {
             // If this is a "before text" or an "after text" position, i.e. if
             // "text_offset_" == 0 or "max_text_offset", then the child position
@@ -2073,7 +2182,7 @@
 
         AXPositionInstance parent_position = CreateTextPosition(
             tree_id, parent_id, parent_offset, parent_affinity);
-        if (text_offset_ == max_text_offset &&
+        if (AtEndOfAnchor() && !parent_position->AtStartOfAnchor() &&
             !parent_position->AtEndOfAnchor() &&
             parent_position->AtStartOfLine()) {
           parent_position->affinity_ = ax::mojom::TextAffinity::kUpstream;
@@ -2283,11 +2392,14 @@
     // grapheme cluster, we should not erroneously assume that we are at a
     // character boundary and stop because we had been asked to "stop if already
     // at boundary". However, we should not modify our position if
-    // "AsLeafTextPositionBeforeCharacter" has simply moved us to the start of
+    // `AsLeafTextPositionBeforeCharacter` has simply moved us to the start of
     // the next leaf anchor because we originally happened to be at the end of
-    // our current anchor.
+    // our current anchor. We also need to ensure that we are comparing two
+    // positions that have the same affinity, since
+    // `AsLeafTextPositionBeforeCharacter` resets the affinity to downstream,
+    // while the original affinity might have been upstream.
     if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-        (AtEndOfAnchor() || *text_position == *this)) {
+        (AtEndOfAnchor() || *text_position == *CloneWithDownstreamAffinity())) {
       return Clone();
     }
 
@@ -2354,11 +2466,14 @@
     // grapheme cluster, we should not erroneously assume that we are at a
     // character boundary and stop because we had been asked to "stop if already
     // at boundary". However, we should not modify our position if
-    // "AsLeafTextPositionAfterCharacter" has simply moved us to the end of the
+    // `AsLeafTextPositionAfterCharacter` has simply moved us to the end of the
     // previous leaf anchor because we originally happened to be at the start of
-    // our current anchor.
+    // our current anchor. We also need to ignore any differences that might be
+    // due to the affinity, because that should not be a determining factor as
+    // to whether we would stop if we are already at boundary or not.
     if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary &&
-        (AtStartOfAnchor() || *text_position == *this)) {
+        (AtStartOfAnchor() || *text_position == *CloneWithUpstreamAffinity() ||
+         *text_position == *CloneWithDownstreamAffinity())) {
       return Clone();
     }
 
@@ -2474,19 +2589,19 @@
   AXPositionInstance CreatePreviousFormatStartPosition(
       AXBoundaryBehavior boundary_behavior) const {
     if (IsNullPosition())
-      return Clone();
+      return CreateNullPosition();
 
     AXBoundaryType boundary_type = GetFormatStartBoundaryType();
     if (boundary_type != AXBoundaryType::kNone) {
       if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary ||
           (boundary_behavior == AXBoundaryBehavior::StopAtLastAnchorBoundary &&
            boundary_type == AXBoundaryType::kContentStart)) {
-        AXPositionInstance clone = Clone();
         // In order to make equality checks simpler, affinity should be reset so
         // that we would get consistent output from this function regardless of
         // input affinity.
-        clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
-        return clone;
+        if (IsTextPosition())
+          return CloneWithDownstreamAffinity();
+        return Clone();
       } else if (boundary_behavior == AXBoundaryBehavior::CrossBoundary &&
                  boundary_type == AXBoundaryType::kContentStart) {
         // If we're at a format boundary and there are no more text positions
@@ -2542,19 +2657,19 @@
   AXPositionInstance CreateNextFormatEndPosition(
       AXBoundaryBehavior boundary_behavior) const {
     if (IsNullPosition())
-      return Clone();
+      return CreateNullPosition();
 
     AXBoundaryType boundary_type = GetFormatEndBoundaryType();
     if (boundary_type != AXBoundaryType::kNone) {
       if (boundary_behavior == AXBoundaryBehavior::StopIfAlreadyAtBoundary ||
           (boundary_behavior == AXBoundaryBehavior::StopAtLastAnchorBoundary &&
            boundary_type == AXBoundaryType::kContentEnd)) {
-        AXPositionInstance clone = Clone();
         // In order to make equality checks simpler, affinity should be reset so
         // that we would get consistent output from this function regardless of
         // input affinity.
-        clone->affinity_ = ax::mojom::TextAffinity::kDownstream;
-        return clone;
+        if (IsTextPosition())
+          return CloneWithDownstreamAffinity();
+        return Clone();
       } else if (boundary_behavior == AXBoundaryBehavior::CrossBoundary &&
                  boundary_type == AXBoundaryType::kContentEnd) {
         // If we're at a format boundary and there are no more text positions
@@ -3000,8 +3115,8 @@
     // start or the end of the current anchor, so we should always reset to
     // downstream affinity in those cases.
     if (text_position->affinity_ == ax::mojom::TextAffinity::kUpstream) {
-      AXPositionInstance downstream_position = text_position->Clone();
-      downstream_position->affinity_ = ax::mojom::TextAffinity::kDownstream;
+      AXPositionInstance downstream_position =
+          text_position->CloneWithDownstreamAffinity();
       if (downstream_position->AtStartOfAnchor() ||
           downstream_position->AtEndOfAnchor() ||
           !at_start_condition.Run(downstream_position)) {
diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_strings_iw.xtb b/ui/accessibility/extensions/strings/accessibility_extensions_strings_iw.xtb
index eb6ad99..9e8a01c0 100644
--- a/ui/accessibility/extensions/strings/accessibility_extensions_strings_iw.xtb
+++ b/ui/accessibility/extensions/strings/accessibility_extensions_strings_iw.xtb
@@ -24,7 +24,7 @@
 <translation id="3435896845095436175">הפעלה</translation>
 <translation id="3622586652998721735">הגדרה כברירת מחדל של ערכת צבעים</translation>
 <translation id="3812541808639806898">‏מציג טקסט Alt של תמונה</translation>
-<translation id="381767806621926835">‏לחץ לחיצה ארוכה על כל פריט עם המאפיין "longdesc" או "aria-describedat" כדי לגשת לתיאור הארוך שלו.</translation>
+<translation id="381767806621926835">‏כדי לגשת לתיאור הארוך יש ללחוץ לחיצה ארוכה על הפריט עם המאפיין "longdesc" או "aria-describedat".</translation>
 <translation id="4023902424053835668">דפדף בטקסט של דפי אינטרנט באמצעות מקשי החצים.</translation>
 <translation id="4388820049312272371">הדגשת מיקום הסמן באמצעות הבהוב מהיר.</translation>
 <translation id="4394049700291259645">השבתה</translation>
diff --git a/ui/ozone/platform/drm/gpu/drm_device.cc b/ui/ozone/platform/drm/gpu/drm_device.cc
index cc5e8c5..af6db3b 100644
--- a/ui/ozone/platform/drm/gpu/drm_device.cc
+++ b/ui/ozone/platform/drm/gpu/drm_device.cc
@@ -308,9 +308,15 @@
 
   TRACE_EVENT2("drm", "DrmDevice::SetCrtc", "crtc", crtc_id, "size",
                gfx::Size(mode.hdisplay, mode.vdisplay).ToString());
-  return !drmModeSetCrtc(file_.GetPlatformFile(), crtc_id, framebuffer, 0, 0,
-                         connectors.data(), connectors.size(),
-                         const_cast<drmModeModeInfo*>(&mode));
+
+  if (!drmModeSetCrtc(file_.GetPlatformFile(), crtc_id, framebuffer, 0, 0,
+                      connectors.data(), connectors.size(),
+                      const_cast<drmModeModeInfo*>(&mode))) {
+    ++modeset_sequence_id_;
+    return true;
+  }
+
+  return false;
 }
 
 bool DrmDevice::DisableCrtc(uint32_t crtc_id) {
@@ -540,7 +546,22 @@
     uint32_t flags,
     uint32_t crtc_count,
     scoped_refptr<PageFlipRequest> page_flip_request) {
+  bool success = CommitPropertiesInternal(properties, flags, crtc_count,
+                                          page_flip_request);
+
+  if (success && flags == DRM_MODE_ATOMIC_ALLOW_MODESET)
+    ++modeset_sequence_id_;
+
+  return success;
+}
+
+bool DrmDevice::CommitPropertiesInternal(
+    drmModeAtomicReq* properties,
+    uint32_t flags,
+    uint32_t crtc_count,
+    scoped_refptr<PageFlipRequest> page_flip_request) {
   uint64_t id = 0;
+
   if (page_flip_request) {
     flags |= DRM_MODE_PAGE_FLIP_EVENT;
     id = page_flip_manager_->GetNextId();
diff --git a/ui/ozone/platform/drm/gpu/drm_device.h b/ui/ozone/platform/drm/gpu/drm_device.h
index fdc7f2d..400c9a8 100644
--- a/ui/ozone/platform/drm/gpu/drm_device.h
+++ b/ui/ozone/platform/drm/gpu/drm_device.h
@@ -215,11 +215,10 @@
 
   // On success, true is returned and |page_flip_request| will receive a
   // callback signalling completion of the flip, if provided.
-  virtual bool CommitProperties(
-      drmModeAtomicReq* properties,
-      uint32_t flags,
-      uint32_t crtc_count,
-      scoped_refptr<PageFlipRequest> page_flip_request);
+  bool CommitProperties(drmModeAtomicReq* properties,
+                        uint32_t flags,
+                        uint32_t crtc_count,
+                        scoped_refptr<PageFlipRequest> page_flip_request);
 
   virtual bool SetCapability(uint64_t capability, uint64_t value);
 
@@ -230,6 +229,8 @@
   virtual bool SetMaster();
   virtual bool DropMaster();
 
+  int modeset_sequence_id() const { return modeset_sequence_id_; }
+
   int get_fd() const { return file_.GetPlatformFile(); }
 
   base::FilePath device_path() const { return device_path_; }
@@ -244,8 +245,19 @@
 
   virtual ~DrmDevice();
 
+  virtual bool CommitPropertiesInternal(
+      drmModeAtomicReq* properties,
+      uint32_t flags,
+      uint32_t crtc_count,
+      scoped_refptr<PageFlipRequest> page_flip_request);
+
   std::unique_ptr<HardwareDisplayPlaneManager> plane_manager_;
 
+  // Sequence ID incremented at each modeset.
+  // Currently used by DRM Framebuffer to indicate when was the fb initialized
+  // wrt the preceding modeset.
+  int modeset_sequence_id_ = 0;
+
  private:
   class IOWatcher;
   class PageFlipManager;
diff --git a/ui/ozone/platform/drm/gpu/drm_framebuffer.cc b/ui/ozone/platform/drm/gpu/drm_framebuffer.cc
index bdf7db0e..4eb71a4 100644
--- a/ui/ozone/platform/drm/gpu/drm_framebuffer.cc
+++ b/ui/ozone/platform/drm/gpu/drm_framebuffer.cc
@@ -113,7 +113,8 @@
       opaque_framebuffer_pixel_format_(opaque_framebuffer_pixel_format),
       format_modifier_(format_modifier),
       preferred_modifiers_(modifiers),
-      size_(size) {}
+      size_(size),
+      modeset_sequence_id_at_allocation_(drm_device_->modeset_sequence_id()) {}
 
 DrmFramebuffer::~DrmFramebuffer() {
   if (!drm_device_->RemoveFramebuffer(framebuffer_id_))
diff --git a/ui/ozone/platform/drm/gpu/drm_framebuffer.h b/ui/ozone/platform/drm/gpu/drm_framebuffer.h
index 079297a..8dbfe7f2 100644
--- a/ui/ozone/platform/drm/gpu/drm_framebuffer.h
+++ b/ui/ozone/platform/drm/gpu/drm_framebuffer.h
@@ -92,6 +92,10 @@
   // Device on which the buffer was created.
   const scoped_refptr<DrmDevice>& drm_device() const { return drm_device_; }
 
+  int modeset_sequence_id_at_allocation() const {
+    return modeset_sequence_id_at_allocation_;
+  }
+
  private:
   ~DrmFramebuffer();
 
@@ -110,6 +114,10 @@
   const std::vector<uint64_t> preferred_modifiers_;
   const gfx::Size size_;
 
+  // The latest modeset sequence ID that was retrieved from DrmDevice when the
+  // buffer is initialized.
+  const int modeset_sequence_id_at_allocation_ = 0;
+
   friend class base::RefCountedThreadSafe<DrmFramebuffer>;
 };
 
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
index 1515e63..08418f7 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
@@ -142,6 +142,24 @@
 
   bool status =
       ScheduleOrTestPageFlip(plane_list, page_flip_request, &out_fence);
+  if (!status) {
+    for (const auto& plane : plane_list) {
+      // If the page flip failed and we see that the buffer has been allocated
+      // before the latest modeset, it could mean it was an in-flight buffer
+      // carrying an obsolete configuration.
+      // Request a buffer reallocation to reflect the new change.
+      if (plane.buffer &&
+          plane.buffer->modeset_sequence_id_at_allocation() <
+              plane.buffer->drm_device()->modeset_sequence_id()) {
+        std::move(submission_callback)
+            .Run(gfx::SwapResult::SWAP_NAK_RECREATE_BUFFERS, nullptr);
+        std::move(presentation_callback)
+            .Run(gfx::PresentationFeedback::Failure());
+        return;
+      }
+    }
+  }
+
   CHECK(status) << "SchedulePageFlip failed";
 
   if (page_flip_request->page_flip_count() == 0) {
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
index 739c8dd..054aae3 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
@@ -848,16 +848,38 @@
 }
 
 TEST_F(HardwareDisplayControllerTest, FailPageFlipping) {
-  ui::DrmOverlayPlane plane1(CreateBuffer(), nullptr);
-  EXPECT_TRUE(ModesetWithPlane(plane1));
+  EXPECT_TRUE(ModesetWithPlane(ui::DrmOverlayPlane(CreateBuffer(), nullptr)));
 
   drm_->set_commit_expectation(false);
   std::vector<ui::DrmOverlayPlane> planes;
-  planes.push_back(plane1.Clone());
+  planes.emplace_back(CreateBuffer(), nullptr);
   EXPECT_DEATH_IF_SUPPORTED(SchedulePageFlip(std::move(planes)),
                             "SchedulePageFlip failed");
 }
 
+TEST_F(HardwareDisplayControllerTest, RecoverPageFlipForOlderPlanes) {
+  ui::DrmOverlayPlane pre_modeset_plane(CreateBuffer(), nullptr);
+  EXPECT_TRUE(ModesetWithPlane(pre_modeset_plane));
+
+  drm_->set_commit_expectation(false);
+
+  // If pageflip fails with a plane initialized before the previous modeset, it
+  // shouldn't crash, it will NACK with a reallocation buffer request.
+  {
+    std::vector<ui::DrmOverlayPlane> planes;
+    planes.emplace_back(pre_modeset_plane.Clone());
+    SchedulePageFlip(std::move(planes));
+  }
+
+  {
+    ui::DrmOverlayPlane post_modeset_plane(CreateBuffer(), nullptr);
+    std::vector<ui::DrmOverlayPlane> planes;
+    planes.push_back(post_modeset_plane.Clone());
+    EXPECT_DEATH_IF_SUPPORTED(SchedulePageFlip(std::move(planes)),
+                              "SchedulePageFlip failed");
+  }
+}
+
 TEST_F(HardwareDisplayControllerTest, CheckNoPrimaryPlaneOnFlip) {
   ui::DrmOverlayPlane modeset_primary_plane(CreateBuffer(), nullptr);
   EXPECT_TRUE(ModesetWithPlane(modeset_primary_plane));
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc
index a32832c9..1f23be53 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc
@@ -332,6 +332,47 @@
   }
 }
 
+TEST_P(HardwareDisplayPlaneManagerTest, SequenceIncrementOnModesetOnly) {
+  fake_drm_->InitializeState(crtc_properties_, connector_properties_,
+                             plane_properties_, property_names_,
+                             /*use_atomic=*/true);
+
+  // Modeset Test
+  {
+    int pre_test_sequence_id = fake_drm_->modeset_sequence_id();
+    ASSERT_TRUE(fake_drm_->plane_manager()->Commit(
+        ui::CommitRequest(),
+        DRM_MODE_ATOMIC_TEST_ONLY | DRM_MODE_ATOMIC_ALLOW_MODESET));
+    EXPECT_EQ(pre_test_sequence_id, fake_drm_->modeset_sequence_id());
+  }
+
+  // Successful Modeset
+  {
+    int pre_modeset_sequence_id = fake_drm_->modeset_sequence_id();
+    ASSERT_TRUE(fake_drm_->plane_manager()->Commit(
+        ui::CommitRequest(), DRM_MODE_ATOMIC_ALLOW_MODESET));
+    EXPECT_EQ(pre_modeset_sequence_id + 1, fake_drm_->modeset_sequence_id());
+  }
+
+  // Failed Modeset
+  {
+    int pre_modeset_sequence_id = fake_drm_->modeset_sequence_id();
+    fake_drm_->set_set_crtc_expectation(false);
+    ASSERT_FALSE(fake_drm_->plane_manager()->Commit(
+        ui::CommitRequest(), DRM_MODE_ATOMIC_ALLOW_MODESET));
+    fake_drm_->set_set_crtc_expectation(true);
+    EXPECT_EQ(pre_modeset_sequence_id, fake_drm_->modeset_sequence_id());
+  }
+
+  // Page Flip
+  {
+    int pre_flip_sequence_id = fake_drm_->modeset_sequence_id();
+    ASSERT_TRUE(fake_drm_->plane_manager()->Commit(ui::CommitRequest(),
+                                                   DRM_MODE_ATOMIC_NONBLOCK));
+    EXPECT_EQ(pre_flip_sequence_id, fake_drm_->modeset_sequence_id());
+  }
+}
+
 TEST_P(HardwareDisplayPlaneManagerLegacyTest, Modeset) {
   InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1);
   fake_drm_->InitializeState(crtc_properties_, connector_properties_,
diff --git a/ui/ozone/platform/drm/gpu/mock_drm_device.cc b/ui/ozone/platform/drm/gpu/mock_drm_device.cc
index c46d33bf..48c5521 100644
--- a/ui/ozone/platform/drm/gpu/mock_drm_device.cc
+++ b/ui/ozone/platform/drm/gpu/mock_drm_device.cc
@@ -427,19 +427,21 @@
   return true;
 }
 
-bool MockDrmDevice::CommitProperties(
+bool MockDrmDevice::CommitPropertiesInternal(
     drmModeAtomicReq* request,
     uint32_t flags,
     uint32_t crtc_count,
     scoped_refptr<PageFlipRequest> page_flip_request) {
+  commit_count_++;
   if (flags == kTestModesetFlags)
     ++test_modeset_count_;
   else if (flags == kCommitModesetFlags)
     ++commit_modeset_count_;
 
-  commit_count_++;
-  if (!commit_expectation_)
+  if ((flags & kCommitModesetFlags && !set_crtc_expectation_) ||
+      (flags & DRM_MODE_ATOMIC_NONBLOCK && !commit_expectation_)) {
     return false;
+  }
 
   for (uint32_t i = 0; i < request->cursor; ++i) {
     bool res = ValidatePropertyValue(request->items[i].property_id,
diff --git a/ui/ozone/platform/drm/gpu/mock_drm_device.h b/ui/ozone/platform/drm/gpu/mock_drm_device.h
index 922d402..ff80ab6 100644
--- a/ui/ozone/platform/drm/gpu/mock_drm_device.h
+++ b/ui/ozone/platform/drm/gpu/mock_drm_device.h
@@ -177,10 +177,6 @@
   bool MapDumbBuffer(uint32_t handle, size_t size, void** pixels) override;
   bool UnmapDumbBuffer(void* pixels, size_t size) override;
   bool CloseBufferHandle(uint32_t handle) override;
-  bool CommitProperties(drmModeAtomicReq* request,
-                        uint32_t flags,
-                        uint32_t crtc_count,
-                        scoped_refptr<PageFlipRequest> callback) override;
   bool SetGammaRamp(
       uint32_t crtc_id,
       const std::vector<display::GammaRampRGBEntry>& lut) override;
@@ -190,6 +186,12 @@
  private:
   ~MockDrmDevice() override;
 
+  bool CommitPropertiesInternal(
+      drmModeAtomicReq* request,
+      uint32_t flags,
+      uint32_t crtc_count,
+      scoped_refptr<PageFlipRequest> callback) override;
+
   bool UpdateProperty(uint32_t id,
                       uint64_t value,
                       std::vector<DrmDevice::Property>* properties);
diff --git a/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc b/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
index e361225..66645bc 100644
--- a/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
@@ -1316,4 +1316,47 @@
   screen_manager.RemoveWindow(1)->Shutdown();
 }
 
+TEST_F(ScreenManagerTest, DrmFramebufferSequenceIdIncrementingAtModeset) {
+  InitializeDrmStateWithDefault(drm_.get());
+
+  scoped_refptr<DrmFramebuffer> pre_modeset_buffer =
+      CreateBuffer(DRM_FORMAT_XRGB8888, GetPrimaryBounds().size());
+  CHECK_EQ(pre_modeset_buffer->modeset_sequence_id_at_allocation(), 0);
+
+  // Successful modeset
+  screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector);
+  {
+    ScreenManager::ControllerConfigsList controllers_to_enable;
+    controllers_to_enable.emplace_back(
+        kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
+        GetPrimaryBounds().origin(),
+        std::make_unique<drmModeModeInfo>(kDefaultMode));
+    ASSERT_TRUE(
+        screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  }
+
+  scoped_refptr<DrmFramebuffer> first_post_modeset_buffer =
+      CreateBuffer(DRM_FORMAT_XRGB8888, GetPrimaryBounds().size());
+  CHECK_EQ(first_post_modeset_buffer->modeset_sequence_id_at_allocation(), 1);
+  CHECK_EQ(pre_modeset_buffer->modeset_sequence_id_at_allocation(), 0);
+
+  // Unsuccessful modeset
+  {
+    drm_->set_set_crtc_expectation(false);
+    ScreenManager::ControllerConfigsList controllers_to_enable;
+    controllers_to_enable.emplace_back(
+        kPrimaryDisplayId, drm_, kPrimaryCrtc, kPrimaryConnector,
+        GetSecondaryBounds().origin(),
+        std::make_unique<drmModeModeInfo>(kDefaultMode));
+    ASSERT_FALSE(
+        screen_manager_->ConfigureDisplayControllers(controllers_to_enable));
+  }
+
+  scoped_refptr<DrmFramebuffer> second_post_modeset_buffer =
+      CreateBuffer(DRM_FORMAT_XRGB8888, GetPrimaryBounds().size());
+  CHECK_EQ(second_post_modeset_buffer->modeset_sequence_id_at_allocation(), 1);
+  CHECK_EQ(first_post_modeset_buffer->modeset_sequence_id_at_allocation(), 1);
+  CHECK_EQ(pre_modeset_buffer->modeset_sequence_id_at_allocation(), 0);
+}
+
 }  // namespace ui
diff --git a/ui/ozone/platform/x11/ozone_platform_x11.cc b/ui/ozone/platform/x11/ozone_platform_x11.cc
index 347898d5..622cb39 100644
--- a/ui/ozone/platform/x11/ozone_platform_x11.cc
+++ b/ui/ozone/platform/x11/ozone_platform_x11.cc
@@ -175,6 +175,7 @@
       properties->message_pump_type_for_viz_compositor =
           base::MessagePumpType::UI;
       properties->supports_vulkan_swap_chain = true;
+      properties->uses_external_vulkan_image_factory = true;
       properties->platform_shows_drag_image = false;
       properties->supports_global_application_menus = true;
       properties->app_modal_dialogs_use_event_blocker = true;
diff --git a/ui/ozone/public/ozone_platform.h b/ui/ozone/public/ozone_platform.h
index 6201032..559aab0 100644
--- a/ui/ozone/public/ozone_platform.h
+++ b/ui/ozone/public/ozone_platform.h
@@ -116,6 +116,10 @@
     // Determines if the platform supports vulkan swap chain.
     bool supports_vulkan_swap_chain = false;
 
+    // Linux only: determines if the platform uses the external Vulkan image
+    // factory.
+    bool uses_external_vulkan_image_factory = false;
+
     // Wayland only: determines if the client must ignore the screen bounds when
     // calculating bounds of menu windows.
     bool ignore_screen_bounds_for_menus = false;
diff --git a/weblayer/browser/weblayer_browser_interface_binders.cc b/weblayer/browser/weblayer_browser_interface_binders.cc
index 8251ba6..f80c5ce 100644
--- a/weblayer/browser/weblayer_browser_interface_binders.cc
+++ b/weblayer/browser/weblayer_browser_interface_binders.cc
@@ -146,7 +146,7 @@
       base::BindRepeating(&BindContentTranslateDriver));
 
   // When Prerender2 is enabled, the content layer already added a binder.
-  if (!base::FeatureList::IsEnabled(blink::features::kPrerender2)) {
+  if (!blink::features::IsPrerender2Enabled()) {
     map->Add<blink::mojom::PrerenderProcessor>(
         base::BindRepeating(&BindPrerenderProcessor));
   }